Saya menggunakan Leaflet untuk membuat peta. Saya membuat peta dengan spidol dan saya tidak tahu bagaimana menerapkan Event onener 'onClick' pada masing-masing Marker.
Kode saya
var stops = JSON.parse(json);
var map = new L.Map('map', {
zoom: 12,
minZoom: 12,
center: L.latLng(41.11714, 16.87187)
});
map.addLayer(L.tileLayer('https://api.tiles.mapbox.com/v4/{id}/{z}/{x}/{y}.png?access_token={accessToken}', {
attribution: 'Map data',
maxZoom: 18,
id: 'mapbox.streets',
accessToken: '-----'
}));
var markersLayer = new L.LayerGroup();
map.addLayer(markersLayer);
//populate map from stops
for (var i in stops) {
L.marker(L.latLng(stops[i].Position.Lat, stops[i].Position.Lon), {
title: stops[i].Description
}).addTo(markersLayer).bindPopup("<b>" + stops[i].Description + "</b>").openPopup();
}
Contoh
map.on('click', function(e) {
alert(e.latlng);
});
Leaflet berurusan dengan pendengar acara dengan referensi, jadi jika Anda ingin menambahkan pendengar dan kemudian menghapusnya, tentukan sebagai fungsi:
function onClick(e) { ... }
map.on('click', onClick);
map.off('click', onClick);
javascript
leaflet
ilias ioannou
sumber
sumber
Jawaban:
Selamat datang di GIS Stack Exchange!
Seharusnya tidak ada kesulitan khusus dalam melampirkan acara klik callback ke marker. Anda cukup menggunakan
myMarker.on('click', callback)
seperti yang Anda lakukan dengan peta. Anda juga harus melakukan itu untuk setiap penanda yang ingin Anda lampirkan panggilan balik.Kemungkinan lain adalah menambahkan semua spidol Anda ke dalam Grup Fitur (misalnya, instantiate
markersLayer
dengan AndaL.featureGroup()
alih - alihL.layerGroup()
), sehingga Anda dapat melampirkan panggilan balik langsung ke Grup tersebut. Ini akan menerima peristiwa klik dari penanda individual, dan Anda dapat mengakses fitur yang diklik individu menggunakanevent.layer
.Demo: http://jsfiddle.net/ve2huzxw/74/
Pertanyaan serupa diajukan oleh orang lain di forum Leaflet: https://groups.google.com/forum/#!topic/leaflet-js/RDTCHuLvMdw
sumber
event.layer.properties
akan memberi Anda akses ke array semua properti (metadata) dari marker Anda, sesuai format GeoJSON. Jadi, Anda dapat menetapkanevent.layer.properties.description = stops[i].Description
misalnya.Ubah loop populasi peta Anda untuk menetapkan properti ke marker Anda.
Kemudian, untuk mengakses properti ini (properti fitur sebagaimana mereka dipanggil) di acara onclick,
The
properties.var
pendekatan memiliki manfaat tambahan membuat penanda Anda dalam format GeoJSON standar. Buat itu kompatibel jika, katakanlah, Anda perlu mengekspor data sebagai shapefile, mengimpor spidol dari shapefile, dll.sumber
var oneMarker
- itu lingkup lokal di dalam untuk loop, dan baris layer.addTo () menambahkan nilai itu. (seperti:a=3; array1.push[a];
akan menambah nilai3
ke array, bukan referensi untuka
dirinya sendiri.)Cara yang cukup lurus ke depan dan mudah untuk mencapai pembuatan array penanda yang dapat diklik dalam objek peta selebaran adalah memanipulasi daftar kelas marker yang dibuat dengan menambahkan nama kelas yang ditambahkan kustom ke setiap marker. Maka mudah untuk membuat pendengar dan tahu penanda mana yang diklik. Dengan melewatkan yang aktif atau tidak, masing-masing memiliki acara klik yang dapat diambil dengan ID yang andal.
sumber