首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >谷歌地图Api v3 -查找最近的标记

谷歌地图Api v3 -查找最近的标记
EN

Stack Overflow用户
提问于 2010-10-30 15:08:36
回答 6查看 126.8K关注 0票数 93

当我点击地图时,哪种方法是找到最近的一个或多个标记的最佳方式?api中有没有一些函数可以帮助我做到这一点?

这是谷歌地图应用程序接口v3。

EN

回答 6

Stack Overflow用户

回答已采纳

发布于 2010-10-31 05:17:28

首先,您必须添加eventlistener

代码语言:javascript
复制
google.maps.event.addListener(map, 'click', find_closest_marker);

然后创建一个遍历标记数组的函数,并使用haversine formula计算每个标记与单击之间的距离。

代码语言:javascript
复制
function rad(x) {return x*Math.PI/180;}
function find_closest_marker( event ) {
    var lat = event.latLng.lat();
    var lng = event.latLng.lng();
    var R = 6371; // radius of earth in km
    var distances = [];
    var closest = -1;
    for( i=0;i<map.markers.length; i++ ) {
        var mlat = map.markers[i].position.lat();
        var mlng = map.markers[i].position.lng();
        var dLat  = rad(mlat - lat);
        var dLong = rad(mlng - lng);
        var a = Math.sin(dLat/2) * Math.sin(dLat/2) +
            Math.cos(rad(lat)) * Math.cos(rad(lat)) * Math.sin(dLong/2) * Math.sin(dLong/2);
        var c = 2 * Math.atan2(Math.sqrt(a), Math.sqrt(1-a));
        var d = R * c;
        distances[i] = d;
        if ( closest == -1 || d < distances[closest] ) {
            closest = i;
        }
    }

    alert(map.markers[closest].title);
}

这将跟踪最近的标记并提醒其标题。

我在地图对象上将标记作为数组

票数 114
EN

Stack Overflow用户

发布于 2013-08-08 05:36:35

可以在google.maps.geometry.spherical命名空间中使用computeDistanceBetween()方法。

票数 79
EN

Stack Overflow用户

发布于 2016-06-21 21:06:59

我想扩展一下Leor的建议,并提供一个可行的解决方案:

我在markers数组中使用了标记,例如var markers = [];

然后让我们有一个类似于var location = new google.maps.LatLng(51.99, -0.74);的位置

然后,我们只需将标记减少到我们拥有的位置,如下所示:

代码语言:javascript
复制
markers.reduce(function (prev, curr) {

    var cpos = google.maps.geometry.spherical.computeDistanceBetween(location.position, curr.position);
    var ppos = google.maps.geometry.spherical.computeDistanceBetween(location.position, prev.position);

    return cpos < ppos ? curr : prev;

}).position

弹出的是最接近的标记LatLng对象。

票数 33
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4057665

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档