2014-01-16 2 views
0

Включает ли OpenLayers функцию для возврата ссылки на маркер на основе ее идентификатора? Это фрагмент кода, который я хочу работать (я пометил его комментарием, который читает «ЗДЕСЬ!»): Я попытался извлечь маркер, используя команду «getMarkerById (this.id)», и firebug сообщил мне, что возвращенный значение не определено. Затем я попытался использовать статический идентификатор одного из маркеров («41014»), и это тоже не сработало. Любая помощь будет принята с благодарностью!Можно ли получить маркер, если вы знаете его id?

$(function() 
{ 
     var map, layer; 


     //alert("RAN!!"); 

     map = new OpenLayers.Map("map"); 
     var wms = new OpenLayers.Layer.WMS(
     "OpenLayers WMS", 
     "http://vmap0.tiles.osgeo.org/wms/vmap0", 
     {'layers':'basic'}); 
     map.addLayer(wms); 
     map.setCenter(new OpenLayers.LonLat(-40, 30), 2.5); 
     var markers = new OpenLayers.Layer.Markers("Markers"); 
     map.addLayer(markers); 


     //load and retrieve values from local XML file here 
    var xmlDoc=loadXMLDoc("http://whxlab3.dart.ns.ec.gc.ca/~brinka/EMETsiteV1/buoys.xml"); 
    var z=xmlDoc.getElementsByTagName("id"); 
    var y=xmlDoc.getElementsByTagName("lat"); 
    var x=xmlDoc.getElementsByTagName("lng"); 

    for(i=0; i<x.length; i++) 
    { 
     //use loaded XML file to retrieve values for marker positions 
     var px = x[i].childNodes[0].nodeValue; 
     var py = y[i].childNodes[0].nodeValue; 
     var pz = z[i].childNodes[0].nodeValue; 
     var size = new OpenLayers.Size(32, 37); 
     var offset = new OpenLayers.Pixel(-(size.w/2), -size.h); 
     var icon = new OpenLayers.Icon('stock_images/buoy.png', size, offset); 
     icon.setOpacity(0.85); 


     var lonlat = new OpenLayers.LonLat(px, py); 

     var marker = new OpenLayers.Marker(lonlat, icon); 
     marker.id=(pz); 

     marker.events.register("mouseover", marker, function(){ 
      console.log("Over the marker "+this.id+" at place "+this.lonlat); 
      this.inflate(1.2); 
      this.setOpacity(1); 
     }); 

     marker.events.register("mouseout", marker, function(){ 
      console.log("Out the marker "+this.id+" at place "+this.lonlat); 
      this.inflate(1/1.2); 
      this.setOpacity(0.85); 
     }); 
     marker.events.register("click", marker, function(){ 
      console.log("Clicked "+this.id+" at place "+this.lonlat); 
      console.log("Z value here: ", this.id); 
      popup = new OpenLayers.Popup.FramedCloud("chicken", this.lonlat, new OpenLayers.Size(200, 200), ("Buoy Number: "+this.id), null, true); 

      map.addPopup(popup); 
      markers.removeMarker(getMarkerById(this.id)); //HERE! 
     }); 

     markers.addMarker(marker); 

    } 


}); 

ответ

0

Нет, , но вы можете определить маркер в (глобальный) объект, как:

obj.marker = new OpenLayers.Marker(lonlat, icon); 

чем добавить маркер слоя (например, "маркеры"):

markers.addMarker(obj.marker); 

Если вы хотите, чтобы удалить его, сделайте следующее:

markers.removeMarker(obj.marker); 
0
map = new OpenLayers.Map("map"); 
     var wms = new OpenLayers.Layer.WMS(
     "OpenLayers WMS", 
     "http://vmap0.tiles.osgeo.org/wms/vmap0", 
     {'layers':'basic'}); 
     map.addLayer(wms); 
     map.setCenter(new OpenLayers.LonLat(-40, 30), 2.5); 

Marker Layer Добавить (Вектор)

var markerlayer = new OpenLayers.Layer.Vector("Marker Layers", { 
      styleMap: new OpenLayers.StyleMap({ 
        'default': { 
         externalGraphic: "stock_images/buoy.png", 
         graphicWidth:32,//pixel 
         graphicHeight:37,//pixel 
         graphicOpacity:"${opacity}" 
        } 
       }) 
      }); 
      map.addLayer(markerlayer); 

var xmlDoc=loadXMLDoc("http://whxlab3.dart.ns.ec.gc.ca/~brinka/EMETsiteV1/buoys.xml"); 
    var z=xmlDoc.getElementsByTagName("id"); 
    var y=xmlDoc.getElementsByTagName("lat"); 
    var x=xmlDoc.getElementsByTagName("lng"); 

для:

for(i=0; i<x.length; i++) 
      { 
     var px = x[i].childNodes[0].nodeValue; 
     var py = y[i].childNodes[0].nodeValue; 
     var pz = z[i].childNodes[0].nodeValue; 

     var lonlat = new OpenLayers.LonLat(px, py); 
     var marker= new OpenLayers.Feature.Vector(new OpenLayers.Geometry.Point(lonlat.lon, lonlat.lat)); 
     // var marker= new OpenLayers.Feature.Vector(new OpenLayers.Geometry.Point(px, py)); 
marker.attributes = { 
     opacity: "1" 
}; 
     markerlayer.addFeatures([marker]); 
     }; 

функции нажмите

markercontrol = new OpenLayers.Control.SelectFeature(markerlayer, { eventListeners: { featurehighlighted: controlfunction } }) 
    map.addControl(markercontrol); 


    function controlfunction(e) { 
     var featureID = e.feature.id; 
var marker = markerlayer.getFeatureById(featureID) 
marker.attributes.opacity = '0.5';//opacity 
markerlayer.removeFeatures(marker);//remove 
    console.log(featureID); 
    console.log(e); 
    } 

и посмотреть на парении: http://dev.openlayers.org/releases/OpenLayers-2.8/doc/apidocs/files/OpenLayers/Control/SelectFeature-js.html

Смежные вопросы