Javascript – Obtener la distancia distancia en kilómetros entre dos puntos dados por su latitud y longitud.

Como colofón a esta serie de posts sobre la api de google maps, y a pesar de no tener necesariamente que utilizar google maps para utilizar esta función  vamos a crear una función que nos permita conocer la distancia en kilómetros entre dos puntos de un mapa.

Sin mas dilaciones a continuación os muestro la función en cuestión:

/**
 * \fn getKilometros().
 *
 * \Description: Devuelve la distancia en kilomegtros entre dos puntos dados por su latitud y longitud
 *
 * \param (integer) lat1 : Latitud del punto 1
 * \param (integer) long1 : Longitud del punto 1
 * \param (integer) lat2 : Latitud del punto 2
 * \param (integer) long2 : Longitud del punto 2
 *
 * \return (integer) Distancia en kilometros
 *
 **/

 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]);
   }
 }
}

 

Esto es todo por ahora, espero que os haya servido de ayuda.

No dudéis en dejar en los comentarios cualquier sugerencia.

Índice   –   <– Capítulo Anterior   –  Capitulo Siguiente –>

Un saludo, y si aún no lo has hecho no olvides suscribirte a mi blog para no perderte los próximos posts  :-),

También puedes seguirme en Twitter en ‎@revigames y no olvides que me ayudas mucho si compartes este post en las redes sociales.

9 comentarios en “Javascript – Obtener la distancia distancia en kilómetros entre dos puntos dados por su latitud y longitud.

    1. Hola Standley, solo tienes que multiplicar el resultado que te de por 1000, ya que 1 kilometro es igual a 1000 metros, también puedes convertir a metros la variable R de la función multiplicandola por 1000.

      Gracias por comentar.

      Un saludo

  1. Buenas Eduardo, de antemano muchisimas gracias, porque me has ayudado bastante. Pero quisiera ver si podría aclararme un poco la función de getKilometros porque hasta la variable “a” entiendo lo que haces, pero precisamente esa variable (“a”) no entiendo exactamente que almacena. Por lo poco que he podido entender, buscando por internet, ¿puede ser el radio de circunferencia sobre una localización? ya a partir de ahí la variable b, no la entiendo bien, y c tampoco. Tampoco es que sea muy ducho en Matemáticas en general jejeje.
    Aun así he sabido usarla para lo que necesitaba.
    Muchas gracias de nuevo Eduardo.

  2. En la funcion getKilometer trabaja con 2 parámetros de longitud y 2 de latitud; si quisieramos hacerlos para un gLatLng1 y otro como gLatLng2 como sería?
    Además considere que se debe restar entre ambas y el resto, intenté pero no me salio y por errores no me corre la aplicación. Gracias de antemano por su ayuda.

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.