Ya no tienes que investigar más en otras páginas ya que has llegado al lugar correcto, poseemos la solución que quieres pero sin problemas.
Solución:
Este enlace puede resultarle útil, ya que detalla el uso de la fórmula de Haversine para calcular la distancia.
Extracto:
este guion [in Javascript] calcula las distancias de círculo máximo entre los dos puntos, es decir, la distancia más corta sobre la superficie terrestre, utilizando la fórmula ‘Haversine’.
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)
Necesitaba calcular muchas distancias entre los puntos para mi proyecto, así que seguí adelante e intenté optimizar el código que encontré aquí. En promedio en diferentes navegadores mi nueva implementación corre 2 veces más rápido que la respuesta más votada.
function distance(lat1, lon1, lat2, lon2)
var p = 0.017453292519943295; // Math.PI / 180
var c = Math.cos;
var a = 0.5 - c((lat2 - lat1) * p)/2 +
c(lat1 * p) * c(lat2 * p) *
(1 - c((lon2 - lon1) * p))/2;
return 12742 * Math.asin(Math.sqrt(a)); // 2 * R; R = 6371 km
Puedes jugar con mi jsPerf y ver los resultados aquí.
Recientemente necesitaba hacer lo mismo en python, así que aquí hay un implementación de Python:
from math import cos, asin, sqrt, pi
def distance(lat1, lon1, lat2, lon2):
p = pi/180
a = 0.5 - cos((lat2-lat1)*p)/2 + cos(lat1*p) * cos(lat2*p) * (1-cos((lon2-lon1)*p))/2
return 12742 * asin(sqrt(a)) #2*R*asin...
Y en aras de la exhaustividad: Haversine en wiki.
Aquí hay una implementación de C#:
static class DistanceAlgorithm
const double PIx = 3.141592653589793;
const double RADIUS = 6378.16;
///
/// Convert degrees to Radians
///
/// Degrees
/// The equivalent in radians
public static double Radians(double x)
return x * PIx / 180;
///
/// Calculate the distance between two places.
///
///
///
///
///
///
public static double DistanceBetweenPlaces(
double lon1,
double lat1,
double lon2,
double lat2)
double dlon = Radians(lon2 - lon1);
double dlat = Radians(lat2 - lat1);
double a = (Math.Sin(dlat / 2) * Math.Sin(dlat / 2)) + Math.Cos(Radians(lat1)) * Math.Cos(Radians(lat2)) * (Math.Sin(dlon / 2) * Math.Sin(dlon / 2));
double angle = 2 * Math.Atan2(Math.Sqrt(a), Math.Sqrt(1 - a));
return angle * RADIUS;
Si entiendes que te ha resultado de utilidad este post, agradeceríamos que lo compartas con otros seniors de este modo contrubuyes a extender nuestro contenido.