Estoy creando un sitio web que localiza tu dispositivo y te muestra 4 de los parquímetros más cercanos.
Para los parquímetros, estoy usando una API para recuperar la latitud y la longitud y estoy usando la API de direcciones de Google para establecer las coordenadas de inicio y destino y generar una ruta. Todos los parquímetros están en un radio de ~2,5 km.
Ahora, para encontrar los 4 parquímetros más cercanos, estaba pensando en ejecutar una fórmula y revisar cada registro de la API para encontrar los 4 más cercanos. Pero (creo) eso llevaría demasiado tiempo de procesamiento para cargarlo en un sitio web, por lo que lento. Hay casi 1200 registros en la API.
Para calcular la ruta a través de coordenadas lat/lng estoy usando el siguiente código:
fetch('https://data.stad.gent/api/records/1.0/search/?dataset=locaties-parkeerautomaten-gent&q=&rows=\ 1200&facet=parkeertariefzone&facet=bewonerszone&facet=betaalmodus&facet=status&facet=categorie') .then(response => response.json()) .then(json => { let start = new google.maps.LatLng(51.053788, 3.730767); let end1 = new google.maps.LatLng(json.records[0].geometry.coordinates[1], json.records[0].geometry.coordinates[0]); let request = { origin: start, destination: end1, travelMode: 'WALKING' }; let display = new google.maps.DirectionsRenderer(); let services = new google.maps.DirectionsService(); services.route(request, function (result, status) { if (status == 'OK') { display.setDirections(result); } }) let map1 = new google.maps.Map(document.getElementById("map1")); display.setMap(map1); });PREGUNTA: ¿Cuál es, en su opinión, la mejor manera de calcular y devolver los 4 puntos de latitud/longitud más cercanos en una API con casi 1200 registros con un radio de ~2,5 km usando JavaScript?
No estoy muy seguro de cómo abordar este desafío, cualquier respuesta sería apreciada.
NOTA: Es mi primera pregunta/publicación, así que si me perdí algo o hice algo estúpido, házmelo saber, gracias de antemano :)
En caso de que alguien venga aquí buscando una solución, cómo lo resolví es mediante el siguiente código:
for (let i = 0; i < json.length; i++) { if ((Math.abs(json[i].coordinates[1] - start.lat)) + ((Math.abs(json.[i].coordinates[0] - start.lng))) < sumLatLng) { closest = json[i]; sumLatLng = (Math.abs(json.[i].coordinates[1] - start.lat)) + ((Math.abs(json.[i].coordinates[0] - start.lng))) } else { console.log("error"); } }Básicamente, lo que hago es tomar la suma de la latitud y longitud iniciales, restar la latitud y longitud de cada registro de la API y tomar el absoluto del resultado. Si el resultado es más pequeño que el resultado anterior, eso significa que está más cerca.