#javascript #leaflet
#javascript #листовка
Вопрос:
Я создал несколько слоев GeoJSON. Каждый объект слоя имеет ряд свойств. Когда вы нажимаете на объект любого слоя, отображается всплывающее окно с кнопкой, которая должна отображать расширенную информацию о слое и объекте. Как сделать:
- получить объект ‘lay1’ или ‘lay2’;
- получить объект, на который был нажат;
- получить все свойства объекта, на который был нажат?
<div id="map" style="width: 600px; height: 400px;"></div>
<script>
let map = L.map('map').setView([10.1497326, -67.9283981], 7);
let data1 = {
"type": "FeatureCollection",
"features": [{
"type": "Feature",
"geometry": {
"type": "Point",
"coordinates": [-67.9283981, 10.1497326]
},
"properties": {
"id": 10,
"text": "Marker1"
}
}]
};
let data2 = {
"type": "FeatureCollection",
"features": [{
"type": "Feature",
"geometry": {
"type": "Point",
"coordinates": [-68.9283981, 11.1497326]
},
"properties": {
"id": 20,
"text": "Marker2"
}
}]
};
let lay1 = L.geoJson(data1, {
onEachFeature: function(feature, layer) {
layer.bindPopup(
feature.properties.id '<br />'
'<button id="open-div">Info</button>');
}
});
let lay2 = L.geoJson(data2, {
onEachFeature: function(feature, layer) {
layer.bindPopup(
feature.properties.id '<br />'
'<button id="open-div">Info</button>');
}
});
lay1.addTo(map);
lay2.addTo(map);
map.on('popupopen', function (e) {
$('#open-div').click(function (e) {
$(".leaflet-popup-close-button")[0].click();
showInfo();
});
});
function showInfo() {
// 1) How to get 'lay1' or 'lay2' object
// 2) How to get feature which was clicked
// 3) How to get all feature properties which was clicked
alert('Info');
}
</script>
Ответ №1:
Получите из всплывающего окна источник (маркер), а затем получите функцию и свойства
map.on('popupopen', function (e) {
var layer = e.popup._source;
$('#open-div').click(function (e) {
$(".leaflet-popup-close-button")[0].click();
showInfo(layer); // <-- pass layer to the function
});
});
function showInfo(layer) {
var properties = layer.feature.properties;
console.log(properties)
}