Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/wcf/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Google maps api 3 如何在用户单击地图上的(业务)地点时获取单击事件_Google Maps Api 3_Google Places Api - Fatal编程技术网

Google maps api 3 如何在用户单击地图上的(业务)地点时获取单击事件

Google maps api 3 如何在用户单击地图上的(业务)地点时获取单击事件,google-maps-api-3,google-places-api,Google Maps Api 3,Google Places Api,我知道如何在地图上设置单击事件,当单击随机位置时效果很好。但是,当我点击一个商业场所时,谷歌地图会显示包含商业信息的气球,但不会将点击事件提升到我的JavaScript 您可以在这个地理编码演示()中看到这种情况。浏览地图到某个城市,然后单击一个随机位置:地址显示在文本框中(万岁!)。现在找到一些商业场所并点击:地图弹出气球,但是没有点击事件被发送到JavaScript来更新文本框。讽刺的是:所需的地址信息可以在气球中找到 如何处理谷歌地图中商业场所的点击事件 截图: 编者按:这个答案在3.23

我知道如何在地图上设置单击事件,当单击随机位置时效果很好。但是,当我点击一个商业场所时,谷歌地图会显示包含商业信息的气球,但不会将点击事件提升到我的JavaScript

您可以在这个地理编码演示()中看到这种情况。浏览地图到某个城市,然后单击一个随机位置:地址显示在文本框中(万岁!)。现在找到一些商业场所并点击:地图弹出气球,但是没有点击事件被发送到JavaScript来更新文本框。讽刺的是:所需的地址信息可以在气球中找到

如何处理谷歌地图中商业场所的点击事件

截图: 编者按:这个答案在3.23版之前一直适用。自2016年3.24版发布以来,您可以使用地图选项


基本上没有选项来处理POI上的点击

当然,您可以通过样式简单地隐藏这些要素,但如果您想让它们在地图上保持可见,这里有一个解决方法(基于:):

当你点击一个POI时,一个信息窗口打开,你可以在那里获得访问权限

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

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

这是在中跟踪的问题#4797,最近已修复,并在3.26版中提供

从3.26版开始,您应该收听地图对象上的“单击”事件。如果用户单击POI,则会引发a。此类扩展了常规MouseEvent并包含名为placeId的属性。因此,您可以检查事件对象是否定义了placeId。placeId字段当然包含一个placeId,您可以将其与PlaceAPI一起使用,以获取有关所单击图标的更多信息

我准备了一个小演示:


单击地图时,将触发ClickHandler对象的handleClick方法。您可以看到它检查placeId。然后它路由到该地点(使用placeId),最后使用Maps API中的Places服务获取有关该地点的信息(在本例中为名称、图标和地址)。

谢谢,此解决方法非常有效。上面使用的地理编码演示的唯一缺点是,POI位置的地理编码地址并不总是与气球中列出的POI的官方地址匹配。我将尝试通过Google Maps API Places库进行另一次往返,以获取此信息…从气球中获取详细信息(地址)请参阅“我爱你”代码,您可以直接放入其中,它可以工作。我发现,如果您使用已登录的param@Ben_hawk:它似乎不受API版本的影响,对我来说,无论版本如何,它都可以工作(没有签名)。