我正在尝试添加一些具有特定样式和弹出窗口的标记,但是如果使用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);
}
});
没有错误,只是我不能同时拥有弹出窗口和样式。
最佳答案
让我引用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
的子类)。由于不返回标记(或图层)实例,因此
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.
}
});