传单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想法?
答案 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();