Actualmente estoy usando la función a continuación y no funciona correctamente. Según Google Maps, la distancia entre estas coordenadas (de 59.3293371,13.4877472
a 59.3225525,13.4619422
) son 2.2
kilómetros, mientras que la función devuelve 1.6
kilómetros. ¿Cómo puedo hacer que esta función devuelva la distancia correcta?
function getDistanceFromLatLonInKm(lat1, lon1, lat2, lon2) {
var R = 6371; // Radius of the earth in km
var dLat = deg2rad(lat2-lat1); // deg2rad below
var dLon = deg2rad(lon2-lon1);
var a =
Math.sin(dLat/2) * Math.sin(dLat/2) +
Math.cos(deg2rad(lat1)) * Math.cos(deg2rad(lat2)) *
Math.sin(dLon/2) * Math.sin(dLon/2)
;
var c = 2 * Math.atan2(Math.sqrt(a), Math.sqrt(1-a));
var d = R * c; // Distance in km
return d;
}
function deg2rad(deg) {
return deg * (Math.PI/180)
}
jsFiddle: http://jsfiddle.net/edgren/gAHJB/
javascript
coordinates
distance
Airikr
fuente
fuente
Respuestas:
Lo que estás usando se llama fórmula de Haversine , que calcula la distancia entre dos puntos en una esfera medida que el cuervo vuela . El enlace de Google Maps que proporcionó muestra la distancia como 2.2 km porque no es una línea recta.
Wolphram Alpha es un gran recurso para hacer cálculos geográficos, y también muestra una distancia de 1.652 km entre estos dos puntos .
Si está buscando una distancia en línea recta (como los archivos crow), su función funciona correctamente. Si lo que desea es la distancia de conducción (o la distancia en bicicleta o la distancia de transporte público o la distancia a pie), tendrá que usar una API de mapeo ( Google o Bing son los más populares) para obtener la ruta adecuada, que incluirá la distancia.
Por cierto, la API de Google Maps proporciona un método empaquetado para la distancia esférica, en su
google.maps.geometry.spherical
espacio de nombres (buscarcomputeDistanceBetween
). Probablemente sea mejor que rodar el tuyo (para empezar, usa un valor más preciso para el radio de la Tierra).Para los exigentes entre nosotros, cuando digo "distancia en línea recta", me refiero a una "línea recta en una esfera", que en realidad es una línea curva (es decir, la distancia del gran círculo), por supuesto.
fuente
He escrito una ecuación similar antes, la probé y también obtuve 1,6 km.
Tus mapas de Google mostraban la distancia de CONDUCCIÓN.
Su función se calcula a medida que el cuervo vuela (distancia en línea recta).
fuente
La solución de Derek funcionó bien para mí, y simplemente la he convertido a PHP, ¡espero que ayude a alguien!
fuente
Prueba esto. Está en VB.net y necesita convertirlo a Javascript. Esta función acepta parámetros en minutos decimales.
Editar la función convertida en javascript
fuente
const earthsMajorAccess = 6378137.0;
eliminar la necesidad de comentarios útiles (ya que el nombre de la variable implica lo que es)Calcular la distancia entre dos puntos en javascript
Para más detalles, consulte esto: Enlace de referencia
fuente
Usando la fórmula de Haversine, fuente del código :
El código de muestra está licenciado bajo LGPLv3.
fuente
He escrito la función para encontrar la distancia entre dos coordenadas. Devolverá la distancia en metros.
fuente
Distancia del gran círculo: desde la longitud del acorde
Aquí hay una solución elegante que aplica el patrón de diseño de la estrategia; Espero que sea lo suficientemente legible.
TwoPointsDistanceCalculatorStrategy.js :
GreatCircleTwoPointsDistanceCalculatorStrategy.js:
convertir-grados-a-radianes.js:
Esto sigue la distancia del gran círculo: desde la longitud del acorde, documentado aquí .
fuente
Visita esta dirección. https://www.movable-type.co.uk/scripts/latlong.html Puede usar este código:
fuente