1

リーフレットの openPopup メソッドに問題があります。

showMap = function(elements) {
    var jsonp = 'http://a.tiles.mapbox.com/v3/blahblahblah.jsonp';
    var m = new L.Map("my_map").setView(new L.LatLng(51.5, -0.09), 15);

    var geojsonLayer = new L.GeoJSON();

    var PlaceIcon = L.Icon.extend({
        iconSize: new L.Point(25, 41),
        shadowSize: new L.Point(40, 35),
        popupAnchor: new L.Point(0, -30)
    });

    var icon = new PlaceIcon(__HOME__ + '/images/leaflet/marker.png');
    var marker;


    for (var i = 0; i < elements.length; i++) {
        var address = $("<div/>").html(elements[i].address).text();
        var latlng = new L.LatLng(elements[i].latitude, elements[i].longitude);
        marker = new L.Marker(latlng, {icon: icon}).bindPopup(address);

        if (i == 0) {
            marker.openPopup();
        }
        m.addLayer(geojsonLayer).addLayer(marker);
    }
    // Get metadata about the map from MapBox
    wax.tilejson(jsonp, function(tilejson) {
        m.addLayer(new wax.leaf.connector(tilejson));
    });
}

マーカーをクリックすると、ポップアップが開きます。しかし、マップがロードされたときに最初のポップアップを開きたいと思います。(そしてマーカーをクリックすると他のポップアップが開きます)

アニーのアイデア?

4

4 に答える 4

5

マップにマーカーを追加した後、 openPopup呼び出しを行うと、問題がないはずです。

于 2012-11-09T18:08:33.600 に答える
2

マーカーをクリックするとポップアップが表示されますが、マップがロードされたときに最初のマーカーのポップアップが自動的に表示されないと思いますか?

まず、GeoJSON を実際に使用しているようには見えないため、GeoJSON レイヤーは必要ありません (FeatureLayer を使用するだけでかまいません) が、問題は発生しません。どのレイヤー グループを使用する場合でも、一度だけマップに追加してから、すべての子レイヤーを LayerGroup に追加する必要があります。現在、「for」ループでgeojsonLayerを複数回追加していますが、これは望ましくありません。marker.openPopup()次に、マーカーがマップに追加された後に呼び出す必要があります。コードを次のように変更してみてください。

var layerGroup = new L.FeatureGroup();
layerGroup.addTo( m );

for (var i = 0; i < elements.length; i++) {
    var address = $("<div/>").html(elements[i].address).text();
    var latlng = new L.LatLng(elements[i].latitude, elements[i].longitude);
    marker = new L.Marker(latlng, {icon: icon}).bindPopup(address);

    //You don't add the marker directly to the map.  The layerGroup has already
    //been added to the map so it will take care of adding the marker to the map
    layerGroup.addLayer( marker );

    if (i == 0) {
        marker.openPopup();
    }
}
于 2012-10-22T13:53:41.467 に答える
0

最初にマップを追加してから入れますopenPopup()

L.marker([lat, long]).bindPopup('Your message').addTo(map).openPopup();
于 2020-06-09T07:15:47.707 に答える