不调用onEachFeature

时间:2019-06-25 09:56:25

标签: javascript leaflet markers

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

没有错误,只是我不能同时显示弹出窗口和样式。

1 个答案:

答案 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.
    }
});