Calcular distancias
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