宣传单& Mapbox:OpenPopup不能正常工作

时间:2012-10-22 09:23:12

标签: leaflet mapbox

传单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));
    });
}

当我点击标记时,我打开了弹出窗口。但我希望在加载地图时打开第一个弹出窗口。 (并在标记处打开其他弹出窗口)

AnNy想法?

3 个答案:

答案 0 :(得分:5)

将之后的openPopup调用添加到地图后你就可以了。

答案 1 :(得分:2)

我假设当你点击一个标记时你会看到弹出窗口,但你没有得到第一个标记的弹出窗口,以便在加载地图时自动显示?

首先,它看起来并不像你实际上使用GeoJSON所以不需要GeoJSON层(你可以只使用FeatureLayer),但这不应该导致任何问题。无论您使用何种图层组,都应该只将其添加到地图一次,然后将所有子图层添加到图层组。您当前正在“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();
    }
}

答案 2 :(得分:0)

首先添加地图,然后放置openPopup()

L.marker([lat, long]).bindPopup('Your message').addTo(map).openPopup();