我正在使用 Google 地图 API 允许用户通过单击地图来设置位置。无论用户单击何处,都会放置标记并且效果很好。我的问题是,我的用户正在向我的应用程序添加重复的位置,尽管他们可以直观地看到该位置已经有一个标记(我正在从我的数据库中加载现有位置的标记)。
如果标记放置在地图上已有标记的 X 距离内,是否有办法在 Google Maps API 中触发事件?我知道我可能会以某种方式在javascript中使用haversine算法,但如果可以的话,我想避免在客户端出现这种复杂性。
我正在使用 Google 地图 API 允许用户通过单击地图来设置位置。无论用户单击何处,都会放置标记并且效果很好。我的问题是,我的用户正在向我的应用程序添加重复的位置,尽管他们可以直观地看到该位置已经有一个标记(我正在从我的数据库中加载现有位置的标记)。
如果标记放置在地图上已有标记的 X 距离内,是否有办法在 Google Maps API 中触发事件?我知道我可能会以某种方式在javascript中使用haversine算法,但如果可以的话,我想避免在客户端出现这种复杂性。
请尝试这种方法..这可能需要根据您的需要进行一些修改,这将是客户端,但逻辑也可以在服务器端实现。
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');
}
另一种方法,不需要进一步计算距离或类似的:
对于放置在地图上的每个标记,还要在同一位置创建一个圆圈。通过将 fillOpacity 和 strokeOpacity 设置为隐藏圆圈0
并应用适合您需要的半径。
结果:圆圈不可见,但仍然存在。当用户点击隐藏的圆圈时,地图不会响应点击事件。
我认为没有特定的功能。你会发现最接近的东西是google.maps.geometry.spherical,其中包括一个函数computeDistanceBetween(from:LatLng, to:LatLng, radius?:number)
因此,在您在地图上放置新标记之前,只需获取当前标记与新请求标记之间的距离即可。请记住,即使 Google Maps API 提供了执行此操作的方法,它仍将位于客户端,因此无论如何您都不会避免“客户端的复杂性”。