1

我正在使用 Google 地图 API 允许用户通过单击地图来设置位置。无论用户单击何处,都会放置标记并且效果很好。我的问题是,我的用户正在向我的应用程序添加重复的位置,尽管他们可以直观地看到该位置已经有一个标记(我正在从我的数据库中加载现有位置的标记)。

如果标记放置在地图上已有标记的 X 距离内,是否有办法在 Google Maps API 中触发事件?我知道我可能会以某种方式在javascript中使用haversine算法,但如果可以的话,我想避免在客户端出现这种复杂性。

4

3 回答 3

2

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

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');
}
于 2013-03-20T06:10:38.177 回答
2

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

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

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

于 2013-03-20T08:54:37.463 回答
0

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

因此,在您在地图上放置新标记之前,只需获取当前标记与新请求标记之间的距离即可。请记住,即使 Google Maps API 提供了执行此操作的方法,它仍将位于客户端,因此无论如何您都不会避免“客户端的复杂性”。

于 2013-03-20T05:01:39.873 回答