10.1 Funciones de ggmap

ggmap incluye muchas funciones que pueden clasificarse en tres categorías amplias:

  • Funciones para obtener mapas (de diversos tipos y de distintos orígenes: Google, Stamen, OpenStreetMap)
  • Funciones que utilizan APIs de Google y otros. Por ejemplo, geocode, revgeocode y route consultan la información que tienen distintos proveedores de servicios vía API sobre las coordenadas de un determinado lugar; indican el lugar al que se refieren unas coordenadas y, finalmente, encuentran rutas entre dos puntos. Es conveniente recordar que las consultas a los servicios de Google Maps exige la aceptación de las condiciones de uso y que existe un límite diario en el número de consultas gratuitas.
  • Funciones que pintan mapas y que representan determinados elementos adicionales (puntos, segmentos, etc.) en mapas.

En esta sección se van a presentar los tres tipos de funciones de ggmap.

10.1.1 Funciones para obtener mapas

ggmap obtiene sus mapas, por defecto, de GoogleMaps. Sin embargo hay otros proveedores de mapas libres, como OpenStreetMap (OSM) o Stamen. Cada proveedor exige una serie de parámetros distintos y, por ejemplo, un zoom de 8 puede significar una escala distinta en GoogleMaps que en OSM. Sin embargo, los autores de ggmap se han tomado la molestia de homogeneizar los argumentos de llamada para que sean aproximadamente equivalentes en todos los proveedores.

ggmap incluye funciones específicas para cada proveedor, como get_googlemap o get_stamenmap, pero salvo para usos avanzados, es recomendable usar la función get_map, que ofrece un punto de entrada único y homogéneo para el resto.

El gráfico siguiente muestra cuatro mapas obtenidos de diversos proveedores y con diversas opciones. En la fila superior, una capa de Google en modo imagen de satélite y otra estándar. En la inferior, dos mapas de Stamen, uno en modo toner y otro en modo watercolor o acuarela. Son solo cuatro de los muchos a los que la función get_map puede acceder.

Representa la ubicación de la universidad de Zaragoza (u otra que prefieras) con otros tipos de mapas, otros zums, etc.

10.1.2 Funciones para consultar APIs cartográficas

Muchos servicios de información cartográfica proporcionan APIs para realizar consultas. Las APIs se consultan, típicamente, con URLs convenientemente construidas. Por ejemplo, la URL

http://maps.googleapis.com/maps/api/geocode/json?address=Universidad+de+Zaragoza

consulta el servicio de geolocalización de GoogleMaps y devuelve las coordenadas de la Universidad de Zaragoza (así como otra información relevante en formato JSON). La función geolocate de ggmap facilita la consulta a dicho servicio: toma su argumento (el nombre de un lugar), construye internamente la URL, realiza la consulta (para lo que es necesario conexión a internet), lee la respuesta y le da un formato conveniente (en este caso, un data.frame de R).

La de geolocalización no es la única API que permite consultar ggmap. También permite invertir la geolocalización, es decir, dadas unas coordenadas, devolver el nombre del lugar al que se refieren:

revgeocode(as.numeric(unizar))
## [1] "Historia Moderna y Contemporánea, 50009 Zaragoza, Spain"

Finalmente, route permite obtener la ruta entre dos puntos distintos:

mapa <- get_map("Madrid", source = "stamen", maptype = "toner", zoom = 12)
ruta <- route(from = "Puerta del Sol, Madrid", to = "Plaza de Castilla, Madrid")
ggmap(mapa) + 
  geom_path(aes(x = startLon, y = startLat, xend = endLon, yend = endLat),
            colour = "red", size = 2, data = ruta)

En el mapa anterior la ruta elegida por GoogleMaps para ir de la Puerta del Sol hasta la plaza de Castilla (dos plazas de Madrid) está marcado en rojo sobre un mapa de Stamen de tipo toner.

10.1.3 Funciones para representar elementos sobre mapas

Como se ha visto en las secciones anteriores, la función ggmap permite representar un mapa descargado previamente. Además, a esa capa subyacente se le pueden añadir elementos (puntos, segmentos, densidades etc.) usando las funciones ya conocidas de ggplot2: geom_point, etc.

En ggplot2 existe una función, geom_path que dibuja caminos (secuencias de segmentos). Se puede utilizar en ggmap para dibujar rutas, aunque este paquete proporciona una función especial, geom_leg que tiene la misma finalidad aunque con algunas diferencias menores: por ejemplo, los segmentos tienen las puntas redondeadas, para mejorar el resultado gráfico.