[OpenLayers-Dev] adding markers with popups as features.

Fred Arters fred at monkeytroy.com
Fri Aug 22 12:27:08 EDT 2008


Hey Eric, I know I had a lot in that last email.. but the first part  
is...

>> According to the documentation and looking at the source the class
>> Feature does not have a move method.

This seems to be the case for the stable 2.5 release which I am using  
and the trunk..

Here is a link to the Feature.js on trunk.  I can't find a move method.

http://trac.openlayers.org/browser/trunk/openlayers/lib/OpenLayers/Feature.js

Documentation for trunk does not show a move method either.

Am I looking in the wrong spot?


On Aug 22, 2008, at 12:15 PM, Eric Lemoine wrote:

> Hi. If you use Vector.Layer then your feature class should be
> Feature.Vector, which further means you should be able to do
> feature.move(). IIRC move takes either an OpenLayers.Pixel or an
> OpenLayers.LonLat as an argument. My comments apply to current trunk,
> you may want to check that they apply to the version of OL you're
> using. Cheers. Eric
>
> 2008/8/22, Fred Arters <fred at monkeytroy.com>:
>> Hey Eric,
>>
>> I looked into this a bit yesterday.. here is what I found.
>>
>> According to the documentation and looking at the source the class
>> Feature does not have a move method.
>>
>> According to the documentation, the class Vector *does* have a move
>> method.   However, if you attempt to call move on a vector object, it
>> throws a javascript error saying the object has no move method.
>> Looking at the source confirms that there is no move method.
>>
>> The Vector's geometry attribute is a Point which has a move  
>> method.  I
>> tried that and it did redraw the point but it draws it using relative
>> pixels for the x, y values.   So move (5, 5) does not move it to lon:
>> 5, lat: 5 but it moves it 5px up and 5px to the right.
>>
>> Looking at the source for the move method on the Point class I  
>> noticed
>> move function does this.x = this.x + x.   Then it calls  
>> clearBounds().
>>
>> So I did this...
>>
>> function myMove(pID, pLon, pLat) {
>>
>>     var v = vectorLayer.getFeatureById(pID);
>>
>>     v.geometry.x = pLon;
>>     v.geometry.y = pLat;
>>     v.geometry.clearBounds();
>>     v.layer.drawFeature(v);
>> }
>>
>> And that worked.   Though it feels like a hack.  Seems like there
>> should be a move method to do this in addition to the move method to
>> move a Point in relative pixels.
>>
>> How would I suggest such a change or did I miss a more correct way to
>> do this?
>>
>> Thanks for you help on this btw.
>>
>> -Fred
>>
>>
>> On Aug 22, 2008, at 3:35 AM, Eric Lemoine wrote:
>>
>>> On Thu, Aug 21, 2008 at 11:51 PM, Fred Arters <fred at monkeytroy.com>
>>> wrote:
>>>> Thanks for the advice.  I have it working now using Vector with an
>>>> externalSymbol style as you suggest.   Seems to work fine and a bit
>>>> cleaner
>>>> as I don't have to add a separate pop up and marker for each  
>>>> feature.
>>>> Thanks.
>>>>
>>>> Though I do have a question... what would be the correct way to
>>>> then move
>>>> one of my marker as a vector?   For a feature all I had to do was
>>>> set the
>>>> lonlat attribute and refresh the layer and it moved..  but that
>>>> doesn't seem
>>>> to work with a Vector.  The documentation says there is a move
>>>> function but
>>>> it fails and looking at the code does not seem to be there.
>>>
>>> Doing feature.move(px) or feature.move(lonlat) should work. Both the
>>> Feature.Vector and Geometry.Point classes include move methods. If
>>> that doesn't work, please come back with a simple example.
>>>
>>>
>>>>
>>>> I didn't see it but is there an example that does this too?
>>>
>>> No that I'm aware.
>>>
>>> Thanks,
>>>
>>> --
>>> Eric
>>
>>




More information about the Dev mailing list