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

Michael mdm at yachtpc.com
Thu Apr 12 13:01:51 EDT 2012


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 
> <mailto: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://aem.umn.edu/%7Euav/>
>>     http://www.flightgear.org - http://gallinazo.flightgear.org
>>
>>
>>
>>     _______________________________________________
>>     Users mailing list
>>     Users at lists.osgeo.org  <mailto:Users at lists.osgeo.org>
>>     http://lists.osgeo.org/mailman/listinfo/openlayers-users
>
>     _______________________________________________
>     Users mailing list
>     Users at lists.osgeo.org <mailto: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://aem.umn.edu/%7Euav/>
> http://www.flightgear.org - http://gallinazo.flightgear.org
>
>
>
> _______________________________________________
> Users mailing list
> Users at lists.osgeo.org
> http://lists.osgeo.org/mailman/listinfo/openlayers-users
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://lists.osgeo.org/pipermail/openlayers-users/attachments/20120412/a8a08a00/attachment-0001.html


More information about the Users mailing list