google-maps - Google Maps Api v3 - 查找最近的标记

标签 google-maps google-maps-api-3

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

这是谷歌地图 API v3。

最佳答案

首先你必须添加事件监听器

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

然后创建一个循环标记数组并使用 haversine formula 的函数计算每个标记与点击的距离。

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

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

我的标记作为 map 对象上的数组

关于google-maps - Google Maps Api v3 - 查找最近的标记,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4057665/

相关文章:

Android 谷歌地图 API

javascript - 无法在phonegap中使用googlemaps进行地理定位

javascript - 自定义谷歌地图信息窗口

api - map API key 不起作用

jquery - MarkerClusterer 只能在 webkit(Chrome 和 Safari)中工作,在 Firefox 中工作正常吗?

objective-c - 在 React Native 自定义 UI 组件中使用 CocoaPods 模块

jquery - 关于css overflow和平移缩放的一些问题

ios - 如何更改 Google Place Autocomplete 中的取消按钮文本和字体?

iphone - Google api 方向 - 绘制路线无效

html - 在 html5 单页应用程序上使用谷歌地图时如何管理内存