Por todos es sabido que la Tierra es “redonda”, así que la distancia que separa 2 puntos en la Tierra describe un arco.
Hay que decir que google nos facilita enormemente la faena para calcular distancias, pero vamos por partes: cómo lo tendríamos que hacer manualmente y cómo hacerlo de manera rápida con google maps.

Para calcular la distancia entre 2 puntos en una esfera se utiliza la fórmula de Haversine. Tened en cuenta que esta fórmula asume que la Tierra es completamente esférica.

Una implementación en Javascript de ésta fórmula (sacada de stackoverflow) es la siguiente:

Vamos a probarla con un mapa.
Primero definimos las 2 posiciones con las que calcularemos la distancia:

Le pasamos los dos puntos a la fórmula y obtenemos:

8_2

*El resultado de ésta fórmula es en metros, porqué el diámetro de la tierra lo hemos puesto en metros.

Bueno, pero es que, como de costumbre, Google dispone de una librería para el cálculo con coordenadas.
Para poder cargar la librería al llamar la API de google maps, agregamos el parámetro libraries=geometry:

Ahora ya podemos operar con coordenadas. ¿Y qué cálculos podemos hacer?:
Calcular la distancia entre 2 coordenadas, calcular el punto medio entre 2 coordenadas, saber qué ángulo hay entre una coordenada y otra (dirección a la que nos tendríamos que dirigir) y más cosas.

Veamos cómo calcular la distancia que hay entre las 2 posiciones que teníamos con la función que nos proporciona google.
La funció : computeDistanceBetween()

Tenemos las 2 posiciones:

para calcular:

8_3

Vamos a probarlo con un ejemplo gráfico, con nuestros marcadores.
Creamos un mapa, con un marcador fijo (A) y otro que se pueda arrastrar (B). Al soltar (B), queremos que nos diga la distancia a la que se encuentra de (A).

Vemos como hemos cambiado el icono de marcador B para poderlo diferenciar. Los iconos básicos de colorines de google los tenéis en las siguientes url:

http://maps.google.com/mapfiles/ms/icons/blue-dot.png
http://maps.google.com/mapfiles/ms/icons/red-dot.png
http://maps.google.com/mapfiles/ms/icons/purple-dot.png
http://maps.google.com/mapfiles/ms/icons/yellow-dot.png
http://maps.google.com/mapfiles/ms/icons/green-dot.png

Bueno, a parte de los colorines, los marcadores, el dragable y todo lo que hemos visto, lo que nos interesa es el evento que le hemos colocado a marcador B: al dejar de arrastrarlo, calculamos la distancia entre pos_A (que es fija) y la posición en la que se encuentre en ese momento el marcador B.

8_4

8_5

Os dejo un ejemplo
Descarga

Vamos a modificar el primer ejemplo para calcular la distancia en base a 2 marcadores dragables.
En este caso, crearemos una función que calcule la distancia entre los 2 puntos, que será llamada con el evento ‘dragend’ de ambos.

Ejemplo:
Descarga

Otro ejemplo más completo sería tener 2 marcadores, que al moverlos calcule el punto medio entre ambos marcándolo con un 3r marcador no dragable.
El punto medio entre 2 coordenadas lo sacamos con la función interpolate(), que recibe como parámetros LatLng origen, LatLng destino y fracción a calcular.
En nuestro caso, para calcular el punto medio, la fracción será de 0.5
Veamos:

8_6

Ejemplo
Descarga

En la función calculaPuntoMedio(), primero miramos si la variable marcador_medio existe, si es el caso se borra del mapa y se pone a null.

Luego calculamos el punto medio de las posiciones de los marcadores que hemos pasado como parámetro con una fracción de 0.5.

Y finalmente creamos el marcador, guardándolo en una variable global.

Si hay algo que no quede suficientemente claro o tenéis otra manera de hacerlo… ¡comentad! 😉

Si te gusta, compártelo :)<br>Share on Facebook
Facebook
0Tweet about this on Twitter
Twitter
Share on Google+
Google+
0Share on LinkedIn
Linkedin
Pin on Pinterest
Pinterest
0Email this to someone
email