我正在尝试添加一些具有特定样式和弹出窗口的标记,但是如果使用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.
    }
});

09-10 18:30