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.