with trigger setcenter google eventos event addlistener google-maps-api-3 google-places-api

google-maps-api-3 - trigger - marker with label google maps v3



Cómo obtener un evento de clic cuando un usuario hace clic en un lugar(comercial) en el mapa (2)

Sé cómo configurar un evento click en un mapa, y funciona bien al hacer clic en ubicaciones aleatorias. Pero cuando hago clic en un lugar de negocios, Google Maps mostrará el globo que contiene la información sobre el negocio, pero no elevará el evento de clic a mi JavaScript.

Puede ver este happing en esta demo de geocodificación ( http://rjshade.com/projects/gmaps-autocomplete/ ). Examine el mapa a alguna ciudad y haga clic en una ubicación aleatoria: la dirección se muestra en el cuadro de texto (¡Hurra!). Ahora encuentre un lugar de negocios y haga clic en eso: el mapa muestra el globo, pero no se envía ningún evento de clic al JavaScript para actualizar el cuadro de texto. Irónicamente: ¡la información de la dirección requerida está disponible en el globo!

¿Cómo se manejan los eventos de clics en lugares comerciales en Google Maps?

Captura de pantalla:


Este es el problema # 4797 rastreado en el rastreador de problemas de la API de Google Maps , y fue corregido recientemente, y está disponible en la versión 3.26.

Comenzando con la versión 3.26, debe escuchar el evento "click" en el objeto Map. Si el usuario hace clic en un PDI, se genera IconMouseEvent . Esta clase extiende el Regular MouseEvent y contiene una propiedad llamada placeId. Entonces puede verificar si el objeto del evento ha definido placeId. El campo placeId contiene, por supuesto, un ID de lugar, que puedes utilizar con la API de Places para obtener más información sobre el ícono en el que se hizo clic.

Preparé una pequeña demostración: http://jsbin.com/parapex/10/edit?html,output

Al hacer clic en el mapa, se desencadena el método handleClick del objeto ClickHandler. Puedes ver que verifique el ID de lugar. Y luego se dirige al lugar (usando placeId) y finalmente utiliza el servicio de Places en Maps API para obtener información sobre el lugar (en este caso, el nombre, un ícono y la dirección).


Nota del editor: esta respuesta fue aplicable hasta la versión 3.23. Desde la versión 3.24 lanzada en 2016, puede usar la opción de mapa clickableIcons . Vea esta respuesta .

Básicamente, no hay ninguna opción para manejar los clics en los PDI.

Por supuesto, puede simplemente ocultar estas características a través de estilos, pero cuando quiera mantenerlas visibles en el mapa, aquí hay una solución (basada en: click listener de eventos en íconos y etiquetas de mapas con estilo ):

Cuando hace clic en un PDI se abre InfoWindow, es ahí donde puede obtener acceso.

Reemplace el setPosition del setPosition de InfoWindow para que active un clic en el mapa.

//keep a reference to the original setPosition-function var fx = google.maps.InfoWindow.prototype.setPosition; //override the built-in setPosition-method google.maps.InfoWindow.prototype.setPosition = function () { //logAsInternal isn''t documented, but as it seems //it''s only defined for InfoWindows opened on POI''s if (this.logAsInternal) { google.maps.event.addListenerOnce(this, ''map_changed'',function () { var map = this.getMap(); //the infoWindow will be opened, usually after a click on a POI if (map) { //trigger the click google.maps.event.trigger(map, ''click'', {latLng: this.getPosition()}); } }); } //call the original setPosition-method fx.apply(this, arguments); };

Demostración: http://jsfiddle.net/doktormolle/aSz2r/