Я хочу создать карту-буклет для отображения местоположения сайта. Данные сайта были загружены leaflet ajax
в формате geojson.
Затем я использую Leaflet.markercluster
для создания представления кластера, и он отлично работает. Но кажется, что всплывающее окно показывает только последний сайт, независимо от того, на какой значок я нажимаю.
Вот мой исходный код
function map_viewer(map, options){
var my_data = new L.GeoJSON.AJAX("http://127.0.0.1:8000/my_data/",{
onEachFeature: function(feature,layer){
layer.bindPopup(feature.properties.siteid);
clusters.on('click', function (e) {
this.bindPopup(feature.properties.siteid);
});
}
});
var clusters = L.markerClusterGroup();
my_data.on('data:loaded', function()
{
clusters.addLayer(my_data);
map.addLayer(clusters);
});
var groupedOverlays = {
"Layers": {
"cluster view": clusters
}
};
L.control.groupedLayers(groupedOverlays).addTo(map);
}
Обновлено 1 февраля 2021 г .:
Я понимаю, что после поиска в Google есть несколько подобных случаев. Однако, когда я уточняю свой код на основе предложения, всплывающее окно больше не появляется:
function map_viewer(map, options){
var clusters = L.markerClusterGroup();
var my_data = new L.GeoJSON.AJAX("http://127.0.0.1:8000/my_data/",{
onEachFeature: function(feature,layer){
layer.bindPopup(feature.properties.siteid);
}
});
my_data.on('data:loaded', function()
{
clusters.addLayer(my_data);
map.addLayer(clusters);
});
}
Также, пожалуйста, обратитесь к небольшой части импортируемого набора данных geojson ниже.
{"type": "FeatureCollection", "crs":
{"type": "name", "properties": {"name": "EPSG:4326"}}, "features": [
{"type": "Feature", "properties": {"siteid": 1, "latitude": -28.004959, "longitude": 153.428117, "pk": "1"}, "geometry": {"type": "MultiPoint", "coordinates": [[153.428117, -28.004959]]}},
{"type": "Feature", "properties": {"siteid": 2, "latitude": -33.870436, "longitude": 151.225013, "pk": "2"}, "geometry": {"type": "MultiPoint", "coordinates": [[151.225013, -33.870436]]}},
{"type": "Feature", "properties": {"siteid": 3, "latitude": -33.92677, "longitude": 151.21356, "pk": "3"}, "geometry": {"type": "MultiPoint", "coordinates": [[151.21356, -33.92677]]}},
{"type": "Feature", "properties": {"siteid": 4, "latitude": -33.854711, "longitude": 150.987657, "pk": "4"}, "geometry": {"type": "MultiPoint", "coordinates": [[150.987657, -33.854711]]}},
Заключение:
Я исправил проблему, просто преобразовав тип геометрии в моем наборе данных geojson из Multipoint в Point. Кажется, этот плагин Leaflet.markercluster
может только кластерное представление для Multipoints, но не может отображать bindPopup каждого слоя.