Estou usando o Leaflet para renderizar um mapa. Criei um mapa com marcadores e não sei como implementar o Event Listener 'onClick' em cada Marcador.
Meu código
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();
}
Exemplo
map.on('click', function(e) {
alert(e.latlng);
});
O folheto trata dos ouvintes de eventos por referência; portanto, se você deseja adicionar um ouvinte e removê-lo, defina-o como uma função:
function onClick(e) { ... }
map.on('click', onClick);
map.off('click', onClick);
javascript
leaflet
ilias ioannou
fonte
fonte
Respostas:
Bem-vindo ao GIS Stack Exchange!
Não deve haver dificuldade especial em anexar um retorno de chamada ao evento de clique do (s) marcador (s). Você simplesmente usaria
myMarker.on('click', callback)
como no mapa. Você também teria que fazer isso para cada marcador ao qual deseja anexar um retorno de chamada.Outra possibilidade seria adicionar todos os seus marcadores a um grupo de recursos (por exemplo, instancie seu
markersLayer
com emL.featureGroup()
vez deL.layerGroup()
), para que você possa anexar o retorno de chamada diretamente a esse grupo. Ele receberá os eventos de clique de marcadores individuais e você pode acessar o recurso clicado individual usandoevent.layer
.Demonstração: http://jsfiddle.net/ve2huzxw/74/
Pergunta semelhante feita por outra pessoa no fórum do Leaflet: https://groups.google.com/forum/#!topic/leaflet-js/RDTCHuLvMdw
fonte
event.layer.properties
você terá acesso à matriz de todas as propriedades (metadados) de seus marcadores, conforme o formato GeoJSON. Então você pode atribuir,event.layer.properties.description = stops[i].Description
por exemplo.Modifique o loop de preenchimento do mapa para atribuir propriedades ao seu marcador.
Mais tarde, para acessar essas propriedades (propriedades do recurso como são chamadas) no evento onclick,
A
properties.var
abordagem tem o benefício adicional de fazer com que seu marcador esteja no formato padrão GeoJson. Torna-o compatível se, por exemplo, você precisar exportar os dados como shapefile, importar marcadores do shapefile, etc.fonte
var oneMarker
- é o escopo local dentro do loop for e a linha layer.addTo () adiciona valor. (como:a=3; array1.push[a];
irá agregar valor3
para a matriz, não uma referência aa
si mesmo.)Uma maneira bastante direta e fácil de conseguir criar uma matriz de marcadores clicáveis em um objeto de mapa de folheto é manipular a lista de classes do marcador criado adicionando um nome de classe incrementado personalizado a cada marcador. Então é fácil criar um ouvinte e saber em qual marcador foi clicado. Ignorando o ativo ou não, cada um tem um evento de clique recuperável com um ID confiável.
fonte