[OpenLayers-Users] Is it possible to edit a LineString after it has been created and added to a layer?

Curtis Olson curtolson at gmail.com
Thu Apr 12 16:34:43 EDT 2012


Hi all,

I think I have figured this out -- after some tedious back and forth
through the documentation and dumping out intermediate structures with
"alert".

If I start with this:

var route_points = new Array();
var multipoint = new OpenLayers.Geometry.MultiPoint(route_points);
var route = new OpenLayers.Feature.Vector(multipoint);
myLayer.addFeatures( route );

Then later I can get the point list by accessing:

var pts = route.geometry.components;

Then I can modify a point by:

pts[3].lon = newlon;
pts[3].lat = newlat;

And then I need to call myLayer.redraw() to see the change.  I can add or
remove points to this list as well.  Seems to do the trick!

Thanks,

Curt.


On Thu, Apr 12, 2012 at 12:01 PM, Michael <mdm at yachtpc.com> wrote:

>  Hi Curt
>
> Yes, as I recall (and I will dig into my code as soon as I pay bills) a
> copy is constructed.  So you need to walk through the points in the line
> itself and find the one that matches the one you want to change (I gave
> them all ids).  THEN change it, THEN redraw the line.  If you are doing a
> lot of lines or points, do them all then redraw the layer.
>
> Michael
>
>
> On 4/12/2012 9:36 AM, Curtis Olson wrote:
>
> Hi Michael (and everyone else who replied),
>
> Thanks for your quick replies.  I'm working on this some more today and
> have some follow up questions.
>
>  I define my point list in the global scope:
>
>  var route_points = new Array();
>
>  Then I populate this array with a few points.
>
>  Finally I can build the structures and add the result to a layer so I
> can see it (and I do see the result.)
>
>  lineString = new OpenLayers.Geometry.LineString(route_points);
> route_vector = new OpenLayers.Feature.Vector(lineString,null,home_style);
> routeLayer.addFeatures( route_vector );
>
>  Later I go back and change the location of a point in my route_list
> array of points.
>
>  route_points[2].lon = newlon;
> route_points[2].lat = newlat;
>
>  But nothing changes on screen.  (for what it's worth, I can recreate all
> these structures and add them as a new layer to my map and I do see the new
> points in their correct locations, but it's as a new feature along with the
> old -- I'm hoping to be able to simply modify the old structure rather than
> having to create a new (potentially large/complex) structure each iteration.
>
>  I am wondering if the lineString or the Vector constructors use a copy
> of the upstream structure rather than a pointer to the structure? In that
> case changing my original structure would have no effect.
>
>  I wouldn't mind using accessor functions to find the actual data point,
> but as I look through the class definitions and inheritance, I don't see
> any way to get back to the original point array when starting from a
> Vector() or a LineString()?
>
>  I'm probably missing something stupid or easy, but I'm just not seeing
> it?  Am I on the right track or missing by a mile?
>
>  Thanks,
>
>  Curt.
>
>
>
>  On Wed, Apr 11, 2012 at 2:22 PM, Michael <mdm at yachtpc.com> wrote:
>
>>  Both are doable.  You need to do a little digging to be sure you are
>> pointing to the correct point when you either change its lonlat or delete
>> it.  Then you need to redraw the line.
>>
>> In my application, I maintained a separate array pointing to the points
>> in my line.  Possibly not the most efficient, but it worked.
>>
>> Michael
>>
>>
>> On 4/11/2012 12:08 PM, Curtis Olson wrote:
>>
>>  Hi,
>>
>>  I've begun my plunge into openlayers and have a number of things
>> working, but I've run into a question that I haven't been able to answer
>> for myself from the docs and the mailing list archives.
>>
>>  I am building a map that will live track an object (for example: my
>> aircraft location as I fly in the FlightGear flight simulator.)
>>
>>  I would like to leave a trail behind myself showing my recent path (say
>> for the past 10 seconds or the past 10 minutes.)  I am imagining a
>> LineString where I can insert new points at one end and remove points from
>> the other end -- as my position updates.
>>
>> I could create an entirely new LineString and Vector and add that to my
>> layer 10x a second (removing the old feature), but I was hoping I could
>> just build the linestring once, add it too a layer once, and from then on
>> just modify the linestring structure.
>>
>> Is something like this possible or am I barking up the wrong tree?
>>
>>  I have another sort of similar situation where I may want to
>> additionally modify the point locations of some of the points in the
>> linestring (based on external data coming from the flight simulator.)  In
>> otherwords I want to reshape the linestring by adjusting the locations of
>> individual points.  Is anything like this possible?
>>
>> I've been hunting through the examples and the documentation and haven't
>> stumbled on the appropriate magic yet.
>>
>>  Any tips or pointers or nudges for an openlayers newbie?
>>
>> Thanks,
>>
>>  Curt.
>> --
>>  Curtis Olson:
>> http://www.atiak.com - http://aem.umn.edu/~uav/
>> http://www.flightgear.org - http://gallinazo.flightgear.org
>>
>>
>>
>>  _______________________________________________
>> Users mailing listUsers at lists.osgeo.orghttp://lists.osgeo.org/mailman/listinfo/openlayers-users
>>
>>
>> _______________________________________________
>> Users mailing list
>> Users at lists.osgeo.org
>> http://lists.osgeo.org/mailman/listinfo/openlayers-users
>>
>>
>
>
>  --
>  Curtis Olson:
> http://www.atiak.com - http://aem.umn.edu/~uav/
> http://www.flightgear.org - http://gallinazo.flightgear.org
>
>
>
> _______________________________________________
> Users mailing listUsers at lists.osgeo.orghttp://lists.osgeo.org/mailman/listinfo/openlayers-users
>
>
> _______________________________________________
> Users mailing list
> Users at lists.osgeo.org
> http://lists.osgeo.org/mailman/listinfo/openlayers-users
>
>


-- 
Curtis Olson:
http://www.atiak.com - http://aem.umn.edu/~uav/
http://www.flightgear.org - http://gallinazo.flightgear.org
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://lists.osgeo.org/pipermail/openlayers-users/attachments/20120412/b5e6fcc3/attachment.html


More information about the Users mailing list