onEachFeature не вызывается - PullRequest
0 голосов
/ 25 июня 2019

Я пытаюсь добавить некоторые маркеры с определенными стилями и всплывающими окнами, но если я использую функцию 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 Ответ

2 голосов
/ 25 июня 2019

Позвольте мне процитировать цитату из Leaflet для опции обратного вызова pointToLayer :

A Function, определяющую, как точки GeoJSON порождают слои Leaflet.Он вызывается изнутри при добавлении данных, передавая точечный объект GeoJSON и его LatLng.По умолчанию порождается значение по умолчанию Marker:

function(geoJsonPoint, latlng) {
    return L.marker(latlng);
}

Обратите внимание, что отличается между этим и вашим кодом?Обратный вызов pointToLayer 1015 * возвращает экземпляр 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.
    }
});
...