Calcular distancias

facebook-svg gplus-svg twitter-svg

Un poco de geografía

La latitud se mide en grados sexagesimales y puede representarse de dos formas:
1. Indicando a qué hemisferio (N o S) pertenece la coordenada.

La latitud de Barcelona es de  41.3833° N
La latitud de Melbourne es de  37.8136° S

2. Dejando las latitudes nórdicas como números positivos, y escribiendo las latitudes sureñas como números negativos.

La latitud de Barcelona es de  41.3833°
La latitud de Melbourne es de  -37.8136°

La longitud se mide también en grados sexagesimales y también puede representarse de dos formas:
1. Indicando a qué hemisferio (E o W) pertenece la coordenada.

La longitud de Barcelona es de 2.1833° E
La longitud de Madrid es de  3.6833° W

2. Dejando las longitudes al Este del meridiano de Greenwich como números positivos, y escribiendo las longitudes al Oeste del meridiano de Greenwich como números negativos.

La longitud de Barcelona es de 2.1833°
La longitud de Madrid es de  -3.6833°

Podemos conseguir fácilmente las coordenadas de un punto haciendo clic con el botón derecho del ratón en Google maps y escogiendo "que hay aquí"

Quiero las coordenadas en grados, minutos y segundos

Es verdad. El formato en el que aparecen las coordenadas en Google es por defecto es DDD ( Decimal degrees ), y es así como las necesitamos para poder calcular el valor del ángulo en radianes.
Es bastante fácil transformar las coordenadas de DMS ( grados ( degrees ) minutos y segundos ) a DDD

Ejemplo práctico: de DMS a DDD
La latitud de un punto en Barcelona es de  41º 24' 58''

var DDD = 41 + ( 24 / 60 ) + ( 58 / 3600 ) = 41.41611111111111

Es un poco más complicado transformar las coordenadas de DDD a DMS ( grados ( degrees ) minutos y segundos )

Ejemplo práctico: de DDD a DMS
La latitud de un punto en Barcelona es de  41.3827°


Grados:
Minutos:
Segundos:


function deDDDaDMS( lat ){
		var deg =  Math.floor( lat );
		var modulus = lat % 1;
		
		var minutes = Math.floor( modulus * 60 );
		if( minutes == 60){ deg +=1; minutes = 0;}
		
		var sec = Math.ceil( ( modulus*60 % 1 ) * 60 );
		if( sec == 60){ minutes +=1; sec = 0;}
		
		document.getElementById("deg").innerHTML=deg;
		document.getElementById("min").innerHTML=minutes;
		document.getElementById("sec").innerHTML=sec;
}
var lat = 41.3827;
//llama la función deDDDaDMS
deDDDaDMS(lat);

Grados:
Minutos:
Segundos:

Un poco de geometría

Para calcular la distancia entre dos puntos sobre una esfera hay que saber trigonometría esférica. O no.
El internet es una fuente ilimitada de recursos donde podemos encontrar de todo, incluso fórmulas que nos ayudan a calcular la distancia entre dos puntos sobre una esfera.

var distancia = Math.acos( Math.sin(lat1)*Math.sin(lat3) + 
                Math.cos(lat1)*Math.cos(lat3) * 
                Math.cos(long3-long1) ) * R;');

Donde
R = 6371 y es el radio de la tierra en km
lat1 y long1 son la latitud y la longitud del punto P1 en radianes
lat2 y long2 son la latitud y la longitud del punto P2 en radianes

Calcular la distancia entre dos puntos P1 y P2

Por alguna parte dentro del HTML pondremos un <span id="distancia"> que utilizaremos para sacar el resultado en pantalla.


Distancia entre Barcelona y Madrid es de

La función graRad() transforma grados en radianes.
La función calculaDistancia(desde, hasta) calcula la distancia entre dos puntos, en este caso entre Barcelona y Madrid.
Para esto la función transforma primero las latitudes y las longitudes de grados a radianes y después calcula la distancia y al final saca el resultado en pantalla.


function calculaDistancia(desde, hasta){
		// transforma grados en radianes
		var lat1 = graRad(desde.lat);
		var long1 = graRad(desde.long);
		
		var lat2 = graRad(hasta.lat);
		var long2 = graRad(hasta.long);
		// calcula la distancia
		var d = Math.acos( Math.sin(lat1)*Math.sin(lat2) +
							Math.cos(lat1)*Math.cos(lat2) * 
							Math.cos(long2-long1) ) * 6371;
		var distancia	= document.getElementById("distancia")																		
		distancia.innerHTML = d.toFixed(2)+"km";
		}
		
		function graRad(grados){
			var radianes = (grados * Math.PI)/180;
			return radianes;
}	

var Barcelona ={lat : 41.3833, long : 2.1833}
var Madrid ={lat : 40.4000, long : -3.6833}

calculaDistancia(Barcelona, Madrid);				

Distancia entre Barcelona y Madrid es de

La geolocalización parece no funcionar en Firefox para Mac o Linux. Este es un enlace que nos permite verificar si la geolocalización funciona en el navegador que utilizamos: http://html5demos.com/geo