javascript - una - marcar puntos en google maps api
API de Google Maps: la función de marcador más cercana cambia a n marcadores más cercanos (1)
Podrías usar la función findClosestN
(ligeramente modificada) de esta pregunta (cambiaste gmarkers
por markers
, cambiaste la función para devolver la matriz closest
limitada a los elementos de numberOfResults)
function findClosestN(pt, numberOfResults) {
var closest = [];
for (var i = 0; i < markers.length; i++) {
markers[i].distance = google.maps.geometry.spherical.computeDistanceBetween(pt, markers[i].getPosition());
markers[i].setMap(null);
closest.push(markers[i]);
}
closest.sort(sortByDist);
return closest.splice(0,numberOfResults);
}
function sortByDist(a, b) {
return (a.distance - b.distance)
}
Estoy usando la fórmula que se encuentra en esta pregunta para encontrar el marcador más cercano en el mapa a la posición actual. Me gustaría modificar esta fórmula para que encuentre el número de ubicaciones en el armario n
(las 5 ubicaciones más cercanas, las 10 ubicaciones más cercanas, etc.) y no estoy seguro de cómo lograr esto.
Aquí está la fórmula modificada que estoy usando:
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);
}
Así es como estoy cargando los marcadores:
// 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);
}
}
¿Cómo puedo modificar la fórmula más para que encuentre el n
número más cercano de marcadores en lugar de solo el más cercano?