varios una studio puntos poner multiples marcar marcadores google ejemplos desde datos añadir agregar javascript google-maps-api-3 google-maps-markers

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

prueba de concepto violín

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?