[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 16:49:03 EDT 2012


Ah yes, the use of alerts.  Good work!

On 4/12/2012 1:34 PM, Curtis Olson wrote:
> 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 
> <mailto: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
>>     <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  <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/cff05d9f/attachment-0001.html


More information about the Users mailing list