我正在尝试添加一些具有特定样式和弹出窗口的标记,但是如果使用PointToLayer函数,则不会调用onEachFeature。所以我无法添加弹出窗口。
如果仅使用onEachFeature,则可以使用console.log(feature)
,但不能显示标记。如果我使用pointToLayer,则不会调用onEachFeature。
var json_chambre = L.geoJson(response, {
pointToLayer: function(feature, latlng) {
var markerCh = L.circleMarker(latlng, {
radius: 5,
fillColor: "#ff7800",
color: "#000",
weight: 1,
opacity: 1,
fillOpacity: 0.8
});
chambre_pit.addLayer(markerCh);
},
onEachFeature: function(feature, layer) {
console.log(feature);
}
});
没有错误,只是我不能同时显示弹出窗口和样式。
答案 0 :(得分:2)
让我引用Leaflet reference for the pointToLayer
callback option:
一个
Function
,用于定义GeoJSON指向如何生成Leaflet图层。在添加数据时,会在内部调用它,并传递GeoJSON点特征及其LatLng
。默认是生成默认的Marker
:function(geoJsonPoint, latlng) { return L.marker(latlng); }
请注意,这与您的代码有何不同? pointToLayer
回调返回 L.Marker
的实例,并将其添加到L.GeoJson
实例(它是L.LayerGroup
的子类)中。< / p>
由于您不返回标记(或图层)实例,因此L.GeoJson
实例最终为空,并且onEachFeature
循环遍历总共零个要素+图层对。
还请注意,您无需在onEachFeature
步骤附加弹出窗口,即:
var json_chambre = L.geoJson(response, {
pointToLayer: function(feature, latlng) {
var markerCh = L.circleMarker(latlng, {
radius: 5,
fillColor: "#ff7800",
color: "#000",
weight: 1,
opacity: 1,
fillOpacity: 0.8
});
markerCh.bindPopup(feature.properties.label); // Or whatever
return markerCh; // And do return the marker so it gets added to json_chambre.
}
});