我使用this question中的公式找到地圖上距當前位置最近的標記。我想修改這個公式,以便找到最近的5個位置,最近的10個位置等最近的位置數量(n
),我不確定如何完成此操作。Google Maps API - 最近的標記函數更改爲最接近的n個標記
下面是修改的公式我使用:
function rad(x) {return x*Math.PI/180;}
function find_closest_marker(center, map) {
var lat = center.lat();
var lng = center.lng();
var R = 6371; // radius of earth in km
var distances = [];
var closest = -1;
for(i=0;i<markers.length; i++) {
var mlat = markers[i].position.lat();
var mlng = 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;
}
}
//Log title of closest marker
console.log(markers[closest].title);
}
這裏是我正在加載標記:
// Add markers to the map
function setMarkers(center, map) {
var json = (function() {
var json = null;
$.ajax({
'async': false,
'global': false,
'url': "js/data.json",
'dataType': "json",
'success': function (data) {
json = data;
}
});
return json;
})();
// Loop over each of the json elements
for (var i = 0, length = json.length; i < length; i++) {
var data = json[i],
latLng = new google.maps.LatLng(data.lat, data.lon);
// Create a marker and place it on the map
var icon = 'assets/marker.png';
var marker = new google.maps.Marker({
position: latLng,
map: map,
icon: icon,
title: data.loc
});
markers.push(marker);
infoBox(map, marker, data);
}
}
我怎樣才能進一步修改公式,以便找到最接近的n
標記數量而不是最接近的一個?
@MrUpsidown這不是一個副本(我在這個問題中引用該帖子)。在那裏發佈的公式只能找到最接近的單個標記,我希望它找到最接近的「n」個標記。 – user13286
[Google Maps API - 獲取最接近郵政編碼的點]的可能重複(http://stackoverflow.com/questions/17280787/google-maps-api-getting-closest-points-to-zipcode),請參閱findClosestN( pt,numberOfResults)'函數。 – geocodezip
@geocodezip感謝您的回覆,我之前看到過你的帖子,但對我來說有點太複雜。是否有任何方法可以將上述公式轉換爲最接近的n個位置(因爲我已經以此方式運行)?再次感謝! – user13286