¿Hay una manera de identificar qué Google Map marcador se ha hecho click?
-
21-08-2019 - |
Pregunta
Los bucles de código follwoing sobre un objeto JSON para colocar el marcador en un mapa de Google. Que funciona muy bien.
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]);
});
}
}
El problema es que cada marcador responde siempre con el último valor de "i". Estoy atascado tratando de encontrar una manera de identificar el marcador que se ha hecho clic para obtener de alguna manera la información correcta del objeto de datos.
Estoy pensando en la creación de una serie de marcadores en la creación de bucle a través basado en la ubicación marcadores, pero que se siente muy ineficiente para mí.
Cualquier ayuda, como siempre, muy apreciada.
Solución
El rel="nofollow href="http://code.google.com/apis/maps/documentation/reference.html#GMap2.click" evento click para ver el mapa pasa tres elementos diferentes.
GEvent.addListener(map, "click", function(overlay, latlng, overlaylatlng) {
// overlay = GOverlay or null
// latlng = GLatLng
// overlaylatlng = GLatLng or null
});
Si el usuario no haga clic en una superposición, 'superposición' y 'overlaylatlng' será nulo.
Actualización: Hay que añadir que el oyente el mapa (no el marcador) si desea obtener una GOverlay fuera de él. Los href="http://code.google.com/apis/maps/documentation/reference.html#GMarker.click" haga clic en evento para un GMarker sólo devuelve el GLatLng .
Otros consejos
El Mapa soporta un evento Ontap, que pasa el índice del marcador que fue seleccionado, por favor referirse a este ejemplo:
Parece que las soluciones anteriores sólo devuelven las coordenadas del marcador, que no resuelve mi problema. Tal vez estoy haciendo algo mal.
Sin embargo, la forma en que resolvió que era simplemente añadir un alojamiento a la marca como esto
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;
}
ACTUALIZACIÓN: Los aboves resuelve de una manera, pero la forma más fácil es para unir el evento para el mapa como se ha mencionado en los comentarios
GEvent.addListener(map, "click", function(marker, point){
alert(marker);
});
simple como el pastel.
GEvent.addListener(marker, "click", function(o){
alert(o);
});