Te traemos la solución a esta traba, al menos eso deseamos. Si sigues con alguna pregunta coméntalo, para nosotros será un placer responderte
Solución:
Aquí hay una función javascript:
function measure(lat1, lon1, lat2, lon2) // generally used geo measurement function
var R = 6378.137; // Radius of earth in KM
var dLat = lat2 * Math.PI / 180 - lat1 * Math.PI / 180;
var dLon = lon2 * Math.PI / 180 - lon1 * Math.PI / 180;
var a = Math.sin(dLat/2) * Math.sin(dLat/2) +
Math.cos(lat1 * Math.PI / 180) * Math.cos(lat2 * Math.PI / 180) *
Math.sin(dLon/2) * Math.sin(dLon/2);
var c = 2 * Math.atan2(Math.sqrt(a), Math.sqrt(1-a));
var d = R * c;
return d * 1000; // meters
Explicación: https://en.wikipedia.org/wiki/Haversine_formula
La fórmula haversine determina la distancia de círculo máximo entre dos puntos en una esfera dadas sus longitudes y latitudes.
Dado que está buscando una fórmula simple, esta es probablemente la forma más sencilla de hacerlo, suponiendo que la Tierra es una esfera con una circunferencia de 40075 km.
Longitud en metros de 1° de latitud = siempre 111,32 km
Longitud en metros de 1° de longitud = 40075 km * cos( latitud ) / 360
Para aproximar distancias cortas entre dos coordenadas, utilicé fórmulas de http://en.wikipedia.org/wiki/Lat-lon:
m_per_deg_lat = 111132.954 - 559.822 * cos( 2 * latMid ) + 1.175 * cos( 4 * latMid);
m_per_deg_lon = 111132.954 * cos ( latMid );
.
En el código a continuación, dejé los números sin procesar para mostrar su relación con la fórmula de wikipedia.
double latMid, m_per_deg_lat, m_per_deg_lon, deltaLat, deltaLon,dist_m;
latMid = (Lat1+Lat2 )/2.0; // or just use Lat1 for slightly less accurate estimate
m_per_deg_lat = 111132.954 - 559.822 * cos( 2.0 * latMid ) + 1.175 * cos( 4.0 * latMid);
m_per_deg_lon = (3.14159265359/180 ) * 6367449 * cos ( latMid );
deltaLat = fabs(Lat1 - Lat2);
deltaLon = fabs(Lon1 - Lon2);
dist_m = sqrt ( pow( deltaLat * m_per_deg_lat,2) + pow( deltaLon * m_per_deg_lon , 2) );
La entrada de wikipedia indica que los cálculos de distancia están dentro de 0,6 m para 100 km longitudinalmente y 1 cm para 100 km latitudinalmente, pero no he verificado esto, ya que en cualquier lugar cerca de esa precisión está bien para mi uso.
valoraciones y comentarios
Agradecemos que quieras patrocinar nuestra ocupación añadiendo un comentario y dejando una valoración te damos la bienvenida.