Calcular distancia en kilómetros desde una condenada a otra. Longitud, latitud (google Map) en Javascript

 Vamos a crear una función que nos permita conocer la distancia en kilómetros entre dos puntos de un mapa. Dicha función nos puedes servir de mucho a la hora de calcular cuantos metros hay entre un punto a otro, o en caso de tener una aplicación que necesite calcular cuál es el lugar más cercano.

 getKilometros = function(lat1,lon1,lat2,lon2)
 {
    rad = function(x) {return x*Math.PI/180;}

    var R = 6378.137; //Radio de la tierra en km
    var dLat = rad( lat2 - lat1 );
    var dLong = rad( lon2 - lon1);
    
    var a = Math.sin(dLat/2) * Math.sin(dLat/2) + Math.cos(rad(lat1)) *                Math.cos(rad(lat2)) * Math.sin(dLong/2) * Math.sin(dLong/2);

    var c = 2 * Math.atan2(Math.sqrt(a), Math.sqrt(1-a));
    var d = R * c;

    return d.toFixed(3); //Retorna tres decimales
 }

Para utilizar esta función solo tenemos llamarla pasando como parámetros la latitud del primer punto, la longitud del primer punto, la latitud del segundo punto y la longitud del segundo punto.

Esta función puede ser muy útil, por ejemplo, si tenemos varios puntos con sus coordenadas que extraemos de una base de datos propia y queremos filtrar solo los que se encuentren a cierta distancia del punto que nos interesa, por ejemplo, los que se encuentren a 5 kilómetros a la redonda de las coordenadas actuales. En este caso podríamos recorrer un Array con todos los puntos y preguntar por los que se encuentran a menos de 5 kilómetros de la siguiente manera:

Imaginemos que tenemos un Array A con varios puntos y sus coordenadas y queremos meter en el Array B los puntos que se encuentran a menos de 5 kilómetros de las coordenadas actuales, podríamos hacer algo como esto:

navigator.geolocation.getCurrentPosition(function(pos) {
 var lat = pos.coords.latitude;
 var lon = pos.coords.longitude;
 for (var i=0; i<A.length; i++)
 {
   if(parseInt(getKilometros(lat,lon,A[i].laitude,A[i].lon))<= 5
   {
     B.push(A[i]);
   }
 }
}

Si te está preguntando de obtener la distancia en metros, solo vasta con cambiar la variable R (Radio de la tierra) a metros. Ej.

 var R = 6378137; //Radio de la tierra en Metros

De esta manera, el resultado de la función sería una distancia en kilómetros.

Ejemplos en TypeScript

const getLocationMetros = (location1: location, location2: location): number => {

    const rad = function (x: number) { return x * Math.PI / 180; }
    
    //const R = 6378.137; //Radio de la tierra en km

    const R = 6378137; //Radio de la tierra en Metros
    const dLat = rad(location2.lat - location1.lat);
    const dLong = rad(location1.lng - location2.lng);

    const a = Math.sin(dLat / 2) * Math.sin(dLat / 2) + Math.cos(rad(location1.lat)) * Math.cos(rad(location2.lat)) * Math.sin(dLong / 2) * Math.sin(dLong / 2);
    const c = 2 * Math.atan2(Math.sqrt(a), Math.sqrt(1 - a));
    const d = R * c;
    return parseInt(d.toFixed(3))
}

De esta manera obtenemos la distancia entre 2 puntos, en metros o kilómetros.

Deja un comentario

Crea tu cuenta

Spanish