OpenLayers adding markers with popups as features.

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, popupContentHTMLpPopUpText});

       // 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.



As I said you use OpenLayers.Layer.Vector so you don't use
OpenLayers.Feature but OpenLayers.Feature.Vector, which has a move()
method, at least in trunk. Eric

你可能感兴趣的:(OpenLayers)