【问题标题】:Google Maps API Notify if Marker is Near Another如果标记靠近另一个,Google Maps API 通知
【发布时间】:2013-03-09 01:57:39
【问题描述】:

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

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

【问题讨论】:

    标签: javascript google-maps google-maps-api-3


    【解决方案1】:

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

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

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

    【讨论】:

    • 这是完美的解决方案。我实现了它使圆圈可见,因此用户有一个视觉提示,该区域已经被占用并且它工作得非常好。谢谢。
    【解决方案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');
    }
    

    【讨论】:

    • 您的代码中有一个错误,您将 lat 与 maxLon 进行比较:preExistingMarkersArray[i].lat
    • thnx,进行了更改
    【解决方案3】:

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

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

    【讨论】:

    • 我想我的意思是我试图避免自己在客户端维护这种复杂性(如果它已经内置)。我现在正在检查您的解决方案(如果我可以让它工作,将标记答案)。谢谢。
    猜你喜欢
    • 2017-10-10
    • 1970-01-01
    • 2015-03-10
    • 2011-05-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多