Ho una mappa con molti (> 100) marcatori su di essa. Vorrei farlo in modo che facendo clic su questi si cambi l'icona in una versione evidenziata. Ho creato due icone personalizzate, una normale e una evidenziata. Ho ottenuto che funzioni con singoli marcatori, ma non riesco a trovare alcun modo per configurarlo, quindi ogni icona può essere cambiata facendo clic su di essa.
Ecco il codice di lavoro per un'icona:
var testmarker = L.marker([44.0, -73.0], {icon: unselectedIcon});
testmarker.on('click', function(e) {
testmarker.setIcon(selectedIcon);
});
Tuttavia ho molti marker e utilizzo un ciclo for per posizionarli:
//points is a 2 dim array with lat/long pairs
for (i = 0; i <= points.length-1; i++) {
var marker = L.marker([points[i][0], points[i][1]], {icon: unselectedIcon});
}
marker.on('click', function(e) {
marker.setIcon(selectedIcon);
});
Ho provato a dare a ciascun marcatore un nome di variabile univoco usando un array:
for (i = 0; i <= points.length-1; i++) {
testmarker[i] = L.marker([points[i][0], points[i][1]], {icon: unselectedIcon});
testmarker[i].on('click', function(e) {
alert(e.latlng); e.setIcon(selectedIcon);
});
}
Il che mi dà solo "indefinito" nell'avviso.
Passare testmarker[i].on
a this.map.on
dà solo un avviso quando si fa clic sulla mappa (nessuna modifica dell'icona).
Cambiando l'intera riga in:
testmarker[i].on('click', function(e) {
alert(e.latlng); testmarker[i].setIcon(selectedIcon);
});
Cambia l'ultimo (quando si fa clic su uno), fornendo anche un avviso indefinito.
Come posso impostare i marker in modo che ciascuno possa essere modificato individualmente con un clic, ma senza usare centinaia di blocchi di codice ripetuti per ognuno?