Existe uma maneira de identificar quais Google Map marcador foi clicado?
-
21-08-2019 - |
Pergunta
O código follwoing loop sobre um objeto JSON para o lugar de marcador em um mapa do Google. Que bem funciona.
function displayMarkers(data){
for(var i = 0; i < data.Lat.length; i++){
var point = new GLatLng(data.Lat[i],data.Lng[i]);
marker = new GMarker(point);
map.addOverlay(marker);
// here's the problem
GEvent.addListener(marker, "click", function(){
alert(data.Name[i]);
});
}
}
O problema é, cada marcador de sempre responde com o último valor de "i". Eu estou preso tentando descobrir uma maneira de identificar o marcador que foi clicado, de alguma forma obter as informações corretas do objeto de dados.
Eu estou pensando sobre a criação de um conjunto de marcadores na criação de percorrer com base na localização marcadores, mas que se sente realmente ineficiente para mim.
Qualquer ajuda, como sempre, muito apreciada.
Solução
O evento clique para ver o mapa passes três elementos diferentes.
GEvent.addListener(map, "click", function(overlay, latlng, overlaylatlng) {
// overlay = GOverlay or null
// latlng = GLatLng
// overlaylatlng = GLatLng or null
});
Se o usuário não clicar em uma sobreposição, 'overlay' e 'overlaylatlng' será nula.
Update: Você tem que adicionar o ouvinte ao mapa (não o marcador) se você deseja obter um GOverlay fora dele. A clique evento para um GMarker só retorna a GLatLng .
Outras dicas
O Mapa suporta um evento ONTAP, que passa o índice do marcador que foi selecionado, consulte neste exemplo :
Parece que as soluções acima retornar apenas as coordenadas do marcador, que não resolve o meu problema. Talvez eu estou fazendo algo errado.
No entanto, a maneira como eu resolvi que era simplesmente adicionar uma propriedade para o marcador como este
function createMarker(latlng,name) {
var marker = new GMarker(latlng);
// HERE WE GO
marker.value = name;
GEvent.addListener(marker,"click", function() {
addToList(this.value);
});
return marker;
}
UPDATE: Os aboves resolve-lo de uma maneira, mas a maneira mais fácil é para anexar o evento para o mapa, como mencionado nos comentários
GEvent.addListener(map, "click", function(marker, point){
alert(marker);
});
Simples como a torta.
GEvent.addListener(marker, "click", function(o){
alert(o);
});