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

Fred Arters fred at monkeytroy.com
Thu Aug 21 17:51:42 EDT 2008


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.

I didn't see it but is there an example that does this too?

-Fred

On Aug 21, 2008, at 12:56 AM, Eric Lemoine wrote:

> Hi. Yes, the new way is to use Layer.Vector for markers. To render
> points as markers the externalSymbol style property must be passed to
> the layer, see the examples to understand how to do it. To select
> features and display a popup you can use the SelectFeature control and
> register a featureselected event listener to the layer events. This is
> a rough description, look at the API doc and the examples, and come
> back with specific questions if needed. Hope this helps. Cheers. Eric
>
> 2008/8/20, Fred Arters <fred at monkeytroy.com>:
>> I need to be able to dynamically create and add markers to my map,
>> each with it's own pop up.   Had some trouble getting it to work.  I
>> could create markers and remove them and I could handle an event  
>> for a
>> marker but the examples really directly associated contents of a  
>> popup
>> with one method that was tied to one marker.   So adding several
>> markers with their own pop up details dynamically from a function was
>> not as easy or as obvious as I thought.
>>
>> The examples were not really helping me with what I needed.   There
>> are examples to create markers and examples to manually create  
>> markers
>> with popups but with hard-coded content in the pop ups.   Some of the
>> examples I found based on xml files didn't really apply either,  
>> though
>> in the future they may.
>>
>> I came up with this and it works.. so here it is for anyone else
>> needing the same kind of thing.
>>
>> function addMarker(pLon, pLat, pPopUpText) {
>>
>>       // setup the icon
>>        var size = new OpenLayers.Size(15, 22);
>>        var offset = new OpenLayers.Pixel(-(size.w / 2), -size.h);
>>        var theIcon = theIcon = new OpenLayers.Icon('img/marker.png',
>> size, offset);
>>
>>       // set the popup size..  static for now.
>>        var theSize = new OpenLayers.Size(350, 200);
>>
>>        // create a feature.
>>        var feature = new OpenLayers.Feature( featureLayer, new
>> OpenLayers.LonLat(pLon, pLat),
>>            {icon: theIcon, popupSize: theSize, popupContentHTML:
>> pPopUpText});
>>
>>        // create the marker and popup
>>        feature.createMarker();
>>        feature.createPopup(true);
>>
>>        // hide the popup to start.
>>        feature.popup.hide();
>>
>>        // add the popup and marker to the map.
>>        theMap.addPopup(feature.popup);
>>        markerLayer.addMarker(feature.marker);
>>
>>        // toggle the popup.
>>        feature.marker.events.register("mousedown", feature, function
>> (evt) {
>>            feature.popup.toggle();
>>            OpenLayers.Event.stop(evt);
>>        });
>>  }
>>
>> When you want to remove a marker you have to remove the marker from
>> the marker layer, destroy the pop up and then the feature.
>>
>> Thoughts on this?
>>
>> Works really well for me but is there a more appropriate way to use
>> the Feature for creating markers and associated popups?   Looks like
>> Vector will become the way to do it in the future but right now the
>> createMarker and createPopup methods for vector are just stubbed out
>> functions that return null.
>>
>> -Fred
>>
>>




More information about the Dev mailing list