谷歌地图API通知,如果标记是附近的另一个

Google Maps API Notify if Marker is Near Another

本文关键字:另一个 API 通知 如果 谷歌地图      更新时间:2023-09-26

我正在使用Google地图API,允许用户通过单击地图来设置位置。无论用户在哪里点击,标记就在哪里,而且效果很好。我的问题是,我的用户添加重复的位置到我的应用程序,尽管事实上,他们可以直观地看到已经有一个标记在那个位置(我正在加载标记从我的数据库中现有的位置)。

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

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

对于放置在地图上的每个标记也在相同位置创建一个圆圈。通过设置fillOpacity和stroke不透明度为0来隐藏圆圈,并应用适合您需要的半径。

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

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

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');
}

我不认为这有特定的功能。最接近的是google。maps。geometry。spherical其中包含一个computeDistanceBetween(from:LatLng, to:LatLng, radius?:number)

的函数

因此,在你在地图上放置一个新标记之前,只需获取当前标记与新请求标记之间的距离。请记住,即使Google Maps API提供了这样做的方法,它仍然是在客户端,所以无论如何您都不会避免"客户端的复杂性"。