2013-03-20 62 views
1

我使用Google地图API来允许用户通过单击地图来设置位置。无论用户点击什么,标记都被放置并且工作得很好。我的问题是,我的用户正在向我的应用程序添加重复的位置,尽管他们可以直观地看到该位置已经有一个标记(我正在从我的数据库中为现有位置加载标记)。Google Maps API在标记靠近另一个时发出通知

在Google Maps API中,如果标记放置在已经在地图上的标记的X距离内,是否可以触发事件?我知道我可以在某些方面使用JavaScript中的hasrsine算法,但是如果可以的话,我想避免客户端的这种复杂性。

回答

2

的另一种方法,其不需要的距离或类似的任何进一步的计算:

对于放置在地图上还创建在相同位置的圆每标记。 通过将fillOpacity和strokeOpacity设置为0来隐藏圆,并应用符合您需要的半径。

结果:该圆圈不可见,但仍然存在。当用户点击隐藏的圈子时,地图不会响应点击事件。

+0

这是一个完美的解决方案。我实现了它,使圆圈可见,所以用户有一个视觉提示,该区域已被采用,它的工作非常好。谢谢。 – 2013-03-20 18:10:10

+0

+1在这种情况下,我发现这个答案比我的更有用 – 1Mayur 2013-03-21 05:53:40

0

我不认为有具体的功能。你会发现最接近的东西是google.maps.geometry.spherical其中包括一个功能computeDistanceBetween(from:LatLng, to:LatLng, radius?:number)

因此,在你的地图上放置一个新的标记之前,只需获取当前标记和新请求的标记之间的距离即可。请记住,即使Google Maps API提供了这种方式,它仍然会在客户端,所以您不会避免“客户端的复杂性”。

+0

我想我的意思是,我试图避免必须保持客户端上的复杂性(如果它已经内置)。我正在检查你的解决方案(将标记答案,如果我能得到它的工作)。谢谢。 – 2013-03-20 05:15:22

1

请尝试这种方法..这可能需要根据您的需要进行一些修改,这将是客户端,但逻辑可以实现服务器端也。

function CheckIFMarkersAreNearBy(preExistingMarkersArray, milesToCheck, lat, lon){ 
    var range = milesToCheck/70; 

    var minLat = lat - range; 
    var maxLat = lat + range; 
    var minLon = lon - range; 
    var maxLon = lon + range; 

    var markersNearBy = 0; 

    for(var i = 0; i < preExistingMarkersArray.length; i++){ 
     if(preExistingMarkersArray[i].lat > minLat && preExistingMarkersArray[i].lat < maxLat && preExistingMarkersArray[i].lon > minLon && preExistingMarkersArray[i].lon < maxLon){ 
      markersNearBy++; 
     } 
    } 

    alert('you have ' + markersNearBy + 'markers near by you current selection'); 
} 
+1

您的代码中存在一个错误,您在此将lat与maxLon进行比较:preExistingMarkersArray [i] .lat larrydahooster 2014-03-14 15:13:10

+0

thnx,进行了更改 – 1Mayur 2014-03-14 17:30:26