Google Maps Api v3

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

它是谷歌地图api v3。


首先你必须添加eventlistener

google.maps.event.addListener(map, 'click', find_closest_marker);

然后创建一个循环遍历标记数组的函数,并使用hasrsine公式计算每次标记与点击之间的距离。

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

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

我的地图对象上有我的标记作为数组


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


我想对Leor的建议进行扩展,让任何人对如何计算最近的位置感到困惑,并实际提供一个工作解决方案:

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

然后让我们把我们的位置定义为var location = new google.maps.LatLng(51.99, -0.74);

然后我们简单地将我们的标记减少到我们喜欢的位置:

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对象。

链接地址: http://www.djcxy.com/p/81499.html

上一篇: Google Maps Api v3

下一篇: How to trigger the onclick event of a marker on a Google Maps V3?