[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