¡Hola! Me parece que andas usando un bloqueador de anuncios =( ¿Nos desbloqueas? ¿Por qué?
F13

Funcion 13

Calculando distancias y áreas con Google Maps V3

Google Maps cuenta con algunas librerías que nos permiten aumentar sus funcionalidades “básicas”. Las librerías que ahora mismo hay disponible para Google Maps son:

  • Geometría
  • AdSense
  • Panoramio
  • Places
  • Dibujo
  • Tiempo
  • Visualización

En este artículo vamos a ver cómo podemos medir la distancia entre varios puntos de un mapa de Google Maps (o marcadores) e incluso la distancia entre esas zonas, usando la librería de Geometría.

Cabe destacar que los cálculos geométricos para calcular, por ejemplo, la distancia entre dos puntos de la tierra son bastante complejos. Cuando calculas distancias y áreas tienes que tener en cuenta que la tierra es redonda. No nos sirven las fórmulas normales que aprendimos en el instituto. Recuerda que un mapa es plano mientras que la tierra es una esfera.

Para realizar semejantes cálculos de distancias y áreas, necesitas matemáticas algo avanzadas para conseguirlo. Por si os interesa, la fórmula para hacerlo se conoce como Fórmula del Haversine.

Incluye la librería

Antes de poder trabajar con la librería tenemos que decirle al APi de Google Maps que queremos usarla. Para hacer esto tenemos que añadir un parámetro extra a la cadena de consulta al incluir el API de Google Maps en la web.

Una vez que lo hayas hecho, tendrás a tu disponibilidad un gran número de funciones adicionales que puedes usar. Todas residen en dos espacios principalmente:

  • google.maps.geometry.encoding
  • google.maps.geometry.spherical

El primero, encoding, contiene funciones para codificar y decodificar rutas para polígonos y polilíneas. Son útiles cuando tienes grandes cantidades de datos para mostrar polígonos y/o polilíneas que necesites optimizar. No nos centraremos en este apartado mucho más aunque puede que en el futuro lo toquemos.

Por otro lado, spherical, incluye las funciones para calcular ángulos, distancias y áreas usando latitudes y longitudes. Como ya habrás imaginado, estas son las funciones que vamos a estar viendo en este artículo.

Ten en cuenta que la librería no añade ninguna clase. Tan solo funciones estáticas.

Calculando la distancia con Google Maps

Calcular la distancia entre dos puntos de la tierra es realmente sencillo con la librería de geometría. Todo lo que tienes que hacer es llamar a la función computeDistanceBetween() y pasarle dos objetos LatLng. Por ejemplo:

var sevilla = new google.maps.LatLng(37.377222, -5.986944);  
var buenos_aires = new google.maps.LatLng(-34.608333, -58.371944);  
var distancia = google.maps.geometry.spherical.computeDistanceBetween(sevilla, buenos_aires);  

La función devuelve la distancia en metros. En este caso nos dirá que hay 9 671 548.65 metros entre Sevilla y Buenos Aires.

Calculando el ángulo

Si también quieres saber cual es el ángulo entre dos puntos, puedes usar la función computeHeading(). Recibe los mismos parámetros que la función anterior y calcula el ángulo del primero al segundo.

var sevilla = new google.maps.LatLng(37.377222, -5.986944);  
var buenos_aires = new google.maps.LatLng(-34.608333, -58.371944);  
var angulo = google.maps.geometry.spherical.computeHeading(sevilla, buenos_aires);  

El ángulo se obtiene en grados desde el norte verdadero. El ángulo desde Sevilla a Buenos Aires son -139.23691930949616 grados.

Calculando un área

Para calcular el tamaño de un área, tenemos la función computeArea(). Al contrario que las dos anteriores, recibe una matriz de objetos LatLng como parámetro. Esta matriz representa un polígono y debe ser cerrado. Esto significa que cerrará el polígono automáticamente entre el primer y el último LatLng.

var sevilla = new google.maps.LatLng(37.377222, -5.986944);  
var buenos_aires = new google.maps.LatLng(-34.608333, -58.371944);  
var nueva_york = new google.maps.LatLng(40.715, -74.002);  
var area = google.maps.geometry.spherical.computeArea([nueva_york, sevilla, buenos_aires]);  

El código nos calculará el área de un triángulo entre Nueva York, Sevilla y Buenos Aires, que es de 30 764 427 343 176.59` m2.

Calculando ubicación de fin

Si por ejemplo sabes el punto de inicio, la distancia y el ángulo, puedes obtener la ubicación final usando la función computeOffset(). Recibe los parámetros comentados y devuelve un objeto LatLng.

Si cogemos los valores de los anteriores ejemplo, podríamos calcular la ubicación de Buenos Aires, la distancia a Sevilla y el ángulo hacia Sevilla y los usamos como entrada…

computeDistanceBetween()

Obtendremos un objeto LatLng que, en nuestro caso, indica la posición de Buenos Aires.

Calculando un punto intermedio

Otra función útil es interpolate(), que determina un punto entre dos ubicaciones basándonos en una fracción entre 0 y 1. La fracción representa lo lejos que estamos de un punto. Para hacernos a una idea, si usáramos 0.5 nos daría el punto medio exacto entre el punto de inicio y el punto de fin:

var sevilla = new google.maps.LatLng(37.377222, -5.986944);  
var buenos_aires = new google.maps.LatLng(-34.608333, -58.371944);  
var intermedio = google.maps.geometry.spherical.interpolate(sevilla, buenos_aires, 0.5);  
var marcador = new google.maps.Marker({  
  position: intermedio,
  map: map
});

Este código nos devuelve un marcador que se encuentra justo entre Sevilla y Buenos Aires.

Conclusión

El cálculo de áreas y distancias en el planeta puede ser algo complejo, pero con la ayuda de la librería de Geometría es realmente simple. Podrías usar estas funciones para ofrecer a un usuario la distancia entre varios marcadores o incluso ordenarlos por distancia para ayudar al usuario a llegar al destino más cercano.

Si el artículo te pareció interesante, útil o incluso equivocado, por favor considera el dejar un comentario. ¡Lo apreciaré mucho!

Programador Front-end en First + Third y Potato. Trabajando con JavaScript y HTML5 desde el corazón de Sevilla.

Comentarios ¡Únete a la conversación!