-1

I've created a Google Map using the Maps API and now I would like to find the closest n markers to a given location. I found this Fiddle which shows how to find the single closest marker, how can I adapt it so that it finds the closest n markers rather than just the single closest?

function find_closest_marker(event) {
    var distances = [];
    var closest = -1;
    for (i = 0; i < markers.length; i++) {
        var d = google.maps.geometry.spherical.computeDistanceBetween(markers[i].position, event.latLng);
        distances[i] = d;
        if (closest == -1 || d < distances[closest]) {
            closest = i;
        }
    }
    console.log('Closest marker is: ' + markers[closest].getTitle());
}
user13286
  • 3,027
  • 9
  • 45
  • 100

1 Answers1

0

Not the most elegant solution ever, but assuming the original source code, should be able to do the job.

function find_closest_markers(event, n) {
    var markers_distances = [];
    for (i = 0; i < markers.length; i++) {
        var d = google.maps.geometry.spherical.computeDistanceBetween(markers[i].position, event.latLng);
        markers_distances[i] = {
            distance: d, 
            marker: markers[i]
        }
    }
    var closest_markers = markers_distances.sort((a, b) => {return a.distance-b.distance}).slice(0,n)
    return closest_markers.map((item) => {return item.marker})
}
Joao Pereira
  • 573
  • 4
  • 16