如何通过覆盖层检测Google地图上的点击事件?

8
我的问题是,我有一个圆形地图覆盖层,但我想通过点击地图来移动圆形以设置新的中心点。实际的问题是,当我点击覆盖层并调用我的方法“setCenter(overlay,latlng)”时,我得到未定义的latlang和有效的覆盖层。
这里有一个示例可以说明问题,如果您单击地图,则绘制多边形,如果在多边形内部单击,则不会绘制新多边形,如果在地图上的任何其他位置单击,则会绘制多边形。 http://code.google.com/apis/maps/documentation/examples/polygon-simple.html 我希望能够单击多边形并绘制新的多边形,使它们重叠。
谢谢
1个回答

13

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

<!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参数为null,而latlng参数包含所点击点的地理坐标。如果用户单击可点击的叠加层,则overlay参数包含叠加层对象,而overlaylatlng参数包含所点击叠加层的坐标(来源:API参考)。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接