如何在用户单击地图上的(业务)位置时获取单击事件

时间:2014-06-15 21:04:54

标签: google-maps-api-3 google-places-api

我知道如何在地图上设置点击事件,点击随机位置时效果很好。但是,当我点击营业地点时,Google地图会显示包含有关商家信息的气球,但会将点击事件提升为我的JavaScript。

您可以在此地理编码演示(http://rjshade.com/projects/gmaps-autocomplete/)上看到这种情况。浏览地图到某个城市并单击随机位置:地址显示在文本框中(华友世纪!)。现在找到一些营业场所并点击:地图会弹出气球,但不会向JavaScript发送任何点击事件来更新文本框。具有讽刺意味的是:气球中提供了所需的地址信息

如何处理Google地图中商家位置的点击事件?

截图: clicking the 'ZOO' place pops up the balloon, but does not give the address in the search box, because no click event was received

2 个答案:

答案 0 :(得分:15)

编者注:此答案适用于版本3.23。自2016年发布的3.24版以来,您可以使用clickableIcons地图选项。 See this answer


基本上没有办法处理POI上的点击。

当然,你可以通过样式隐藏这些功能,但是当你想让它们在地图上可见时,这里有一个解决方法(基于:click event listener on styled map icons and labels):

当您点击信息窗口打开信息窗口时,您可以访问该信息。

覆盖setPosition - 原型的InfoWindow - 方法,以便触发点击地图。

//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);
};

演示:http://jsfiddle.net/doktormolle/aSz2r/

答案 1 :(得分:7)

这是Google Maps API issue tracker中跟踪的问题#4797,最近修复了,并且在3.26版中提供。

从版本3.26开始,你应该听到"点击" Map对象上的事件。如果用户点击POI,则会引发IconMouseEvent。此类扩展了Regular MouseEvent,并包含一个名为placeId的属性。因此,您可以检查事件对象是否已定义placeId。 placeId字段当然包含Place Id,您可以使用Places API获取有关所点击图标的更多信息。

我准备了一个小型演示:http://jsbin.com/parapex/10/edit?html,output

单击地图时,会触发ClickHandler对象的handleClick方法。你可以看到它检查placeId。然后它路由到该地点(使用placeId),最后使用Maps API中的Places服务获取有关该地点的信息(在这种情况下是名称,图标和地址)。

相关问题