如何通过叠加层检测谷歌地图上的点击事件?
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&v=2&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
参数包含被点击叠加层的坐标 (Source: API Reference)。
【讨论】:
以上是关于如何通过叠加层检测谷歌地图上的点击事件?的主要内容,如果未能解决你的问题,请参考以下文章
为啥不从谷歌地图标记上的点击事件中调用 navigator.getCurrentPosition (function (position) )