当我单击 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/