2016-11-11 25 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()の場合、ポップアップが表示されます。

あなたが持っている主な問題は、setIconへの呼び出しです。 setIcon expects its only argument to be an instance of L.IconL.Markerのインスタンス。マーカーは既にonEachFeatureコールバックで受信したlayerです。

onEachFeatureにマーカーを作成する必要はありません。マーカーはpointToLayer callback option of L.GeoJSONに作成されます。マーカーを作成する必要がある場合は、デフォルトのpointToLayerコールバックをオーバーライドしてそれを実行します。

あなたがにGeoJSONを使用する場合は、pointToLayerstyleオプションはL.Polyline S/L.Polygon秒にL.Marker S(pointToLayer)にポイントを変換し、ラインストリング/ポリゴンに彼らの魔法をかけます。 GeoJSONのすべての機能がに変換されると、マーカーまたはポリライン/ポリゴンのいずれかがになり、onEachFeatureがすべて繰り返されます。これらを混在させるのは簡単です。

+0

私はちょっと混乱しています。onEachFeatureではなくpointToLayerを使用することをお勧めしますか?返信いただきありがとうございますbtw –

0

わかりましたか分かりませんが、geojsonオブジェクトがある場合は、pointToLayer関数を使用してマーカーを追加できます。 eachFeature関数は、ポップアップをバインドするのに適しています。

+0

返信いただきありがとうございますが、これもうまくいきませんでした。 –

関連する問題