Archivo de la etiqueta: distancia

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 –>