如何通过叠加层检测谷歌地图上的点击事件?

Posted

技术标签:

【中文标题】如何通过叠加层检测谷歌地图上的点击事件?【英文标题】:How do I detect a click event on a google map through an overlay? 【发布时间】:2010-03-21 18:26:30 【问题描述】:

我的问题是我有一个圆形地图覆盖,但我希望能够通过单击地图来移动圆圈以设置新中心,实际问题是当我单击覆盖并调用我的方法'setCenter (overlay, latlng) ' ,我得到未定义的 latlang 和有效的叠加层。

这是一个可以说明问题的示例,如果单击地图,则会绘制一个多边形,如果单击多边形内部,则不会绘制新的多边形,如果单击地图上的其他任何位置,则会绘制一个多边形 http://code.google.com/apis/maps/documentation/examples/polygon-simple.html

我希望能够单击多边形并绘制一个使它们重叠的新多边形

谢谢

【问题讨论】:

【参考方案1】:

您需要做的就是在GPolygon 构造函数中设置clickable: false 选项,如下例(GPolygonOptions: API Reference):

<!DOCTYPE html>
<html> 
<head> 
   <meta http-equiv="content-type" content="text/html; charset=UTF-8"/> 
   <title>Google Maps Non Clickable Polygon Demo</title> 
   <script src="http://maps.google.com/maps?file=api&amp;v=2&amp;sensor=false" 
              type="text/javascript"></script>
</head> 
<body onunload="GUnload()">
   <div id="map" style="width: 450px; height: 300px"></div> 

   <script type="text/javascript"> 
      var map = new GMap2(document.getElementById("map"));
      map.setCenter(new GLatLng(37.4419, -122.1419), 13);

      GEvent.addListener(map, "click", function(overlay, latlng) 
         var lat = latlng.lat();
         var lon = latlng.lng();
         var latOffset = 0.01;
         var lonOffset = 0.01;
         var polygon = new GPolygon([
            new GLatLng(lat, lon - lonOffset),
            new GLatLng(lat + latOffset, lon),
            new GLatLng(lat, lon + lonOffset),
            new GLatLng(lat - latOffset, lon),
            new GLatLng(lat, lon - lonOffset)
         ], "#f33f00", 5, 1, "#ff0000", 0.2,  clickable: false );

         map.addOverlay(polygon);
      );
   </script> 
</body> 
</html>

证据截图:

请注意,click(overlay: GOverlay, latlng: GLatLng, overlaylatlng: GLatLng) 事件会根据点击的上下文传递不同的参数,以及点击是否发生在可点击的叠加层上。如果点击没有发生在可点击的覆盖上,overlay 参数是nulllatlng 参数包含被点击点的地理坐标。如果用户点击一个可点击的叠加层,overlay 参数包含叠加层对象,而overlaylatlng 参数包含被点击叠加层的坐标 (Source: API Reference)。

【讨论】:

以上是关于如何通过叠加层检测谷歌地图上的点击事件?的主要内容,如果未能解决你的问题,请参考以下文章

如何检测长点击谷歌地图标记

为啥不从谷歌地图标记上的点击事件中调用 navigator.getCurrentPosition (function (position) )

如何使点击事件通过tkinter窗口?

如何正确响应ArcGIS JavaScript API中图形的鼠标事件

我们如何在谷歌地图中添加带有点击事件的多个标记? [复制]

如何正确响应ArcGIS JavaScript API中图形的鼠标事件