2016-11-11 67 views
2

我有使用單張顯示geoJson數據。標記出現在地圖上,因爲它們應該是這樣,但我無法將彈出框綁定到它。如果我直接將它附加到標記上,則不會顯示任何內容。如果我將它附加到圖層上,它不會顯示,但標記會顯示。請看看並提出問題是什麼!geojson單張彈出不會出現或打破標記

function playgroundMarker(feature, layer){ 
    var popupOptions = {width: 200}; 
    var popupContent = "This is some content"; 


    var marker = new L.icon({iconUrl: "lib/leaflet/images/play_icon.png"}); 
    //L.marker.bindPopup(popupContent, popupOptions); - This breaks it 
    //layer.bindPopup(popupContent, popupOptions); - This just doesn't appear 
    layer.setIcon(marker); 

}; 
var playground = L.geoJson(playgrounds, { 
    onEachFeature: playgroundMarker 
}).addTo(map); 

回答

2

如果你just .bindPopup(),什麼都沒有出現。這是預料之中的。

如果你.bindPopup()and then.openPopup(),彈出窗口會顯示。

您遇到的主要問題是致電setIconsetIcon expects its only argument to be an instance of L.Icon,不是L.Marker的實例。該標記已經是由onEachFeature回調接收的layer

您不需要(也不應該)在onEachFeature中創建標記。標記創建於pointToLayer callback option of L.GeoJSON。如果您需要創建標記,請覆蓋默認的pointToLayer回調並在此處執行。

當您使用GeoJSON的,在pointToLayerstyle選擇創造了神奇效果,以點轉換成L.Marker S(pointToLayer)和路線] /多邊形到L.Polyline S/L.Polygon秒。一旦所有的GeoJSON功能已被轉換爲或者標記或折線/多邊形,然後onEachFeature遍歷全部。這很容易混合起來。

+0

我對某事有點困惑 - 你是建議使用pointToLayer而不是onEachFeature或使用它們兩個嗎?謝謝你的答覆btw –

0

我不知道我是否理解你,但如果你有geojson對象,你可以使用pointToLayer函數來添加標記。 eachFeature函數適用於綁定彈出窗口。

var playground = L.geoJson(playgrounds, { 
    pointToLayer: function (feature, latlng) { 
     return L.marker(latlng, {icon: new L.icon({iconUrl: "lib/leaflet/images/play_icon.png"})}); 
    }, 
    onEachFeature: playgroundMarker 
}).addTo(map); 



function playgroundMarker(feature, layer) { 
      var popup = new L.Popup({ 
       autoPan: false, 
       keepInView: true, 
       closeButton: false, 
       offset: new L.point(0, -5) 
      }).setContent("This is some content"); 


     layer.bindPopup(popup); 
     //you can also choose the click event oder simply no event and add layer.openPopup(); 
     layer.on({ 
      mouseover: function() { 
       layer.openPopup(); 
      }, 
      mouseout: function() { 
       layer.closePopup() 
      }, 
      mousemove: function (e) { 
       popup.setLatLng(e.latlng); 
      } 
     }); 
    } 
+0

謝謝你的回覆,但這也沒有奏效。 –