Cartografía
¿Por qué estudiar las representaciones cartográficas?
En los capítulos anteriores, en particular en el capítulo Complementos útiles, hemos esbozado la inferencia espacio-temporal usando kriging, series de tiempo, campos vectoriales y variogramas, donde la idea general era que las features que podemos asociar a una coordenada espacial en 2D o 3D muchas veces dependen de estas coordenadas, es decir, de los valores de determinadas features sobre otras coordenadas más o menos lejanas y del tiempo. Además, las formas o topologías aparecen o existen de manera previa, de la misma forma que en las imágenes habituales. Para convencerse de esto, intente imaginar la representación en un mapa de los elementos característicos de la formación y evolución de un huracán.
También hemos estudiado el filtrado de imágenes, que muchas veces permite que aparezcan topologías en ellas, como, por ejemplo, contornos significativos. Además, el capítulo anterior nos proporcionó las claves para la difusión de nuestros resultados.
Pero todavía nos falta un punto clave para poder expresar información geográfica: mapas básicos y sistemas de coordenadas realistas (normalmente con coordenadas terrestres). Estos mapas básicos pueden ser de diferente naturaleza semántica gracias a las features que incorporan: físicas...
Acceder a la información geográfica
Para utilizar la información geográfica, debe identificar la codificación de los datos asociados; en particular, el sistema geodésico en el que se codifican las posiciones y/o el sistema de proyección en el que se proyectarán las posiciones en su mapa. El sistema geodésico más conocido se llama WGS84 (World Geodetic System 1984). Es el que se corresponde con las coordenadas GPS, y suele estar asociado al sistema de proyección UTM (Universal Transverse Mercator), que los alemanes llaman Gauss-Krüger.
Existen muchos sistemas geodésicos y de proyección, pero céntrese en lo que viene a continuación, que le permitirá abordar otros sistemas con más seguridad. Tómese el tiempo necesario para comprender correctamente estas nociones, para que no se pierda con los parámetros y notaciones de los paquetes geográficos que podría estar utilizando.
Aquí hay un ejemplo de coordenadas WGS84 en la representación utilizada por Google.
longitude latitude
Lima, Perú -77.04275 -12.04637
París, Francia 2.352222 48.85661
New York, NY, USA -74.005973 40.71278
Tokio, Japón 139.691706 35.68949
Aquí se puede ver que las coordenadas están expresadas en grados decimales respecto al meridiano de Greenwich y el ecuador. París y Tokio están en el cuadrante noreste y los valores son positivos, Lima está en el cuadrante suroeste y los valores son negativos, Nueva York está en el cuadrante noroeste y su longitud es negativa.
Los grados decimales (DDD) son más fáciles de manipular que otras representaciones...
Creación de mapas estáticos con R
Hay muchos paquetes útiles para crear mapas usando R, por lo que nos vamos a centrar en algunos paquetes muy conocidos o fáciles de utilizar.
Después de descargar un archivo shape (.shp) del sitio de StatSilk, usaremos una función antigua (ahora en desuso) del paquete maptools para leerlo y visualizar el resultado.
library(maptools) # referencia para los mapas
s <- readShapeSpatial("map/map.shp") # lectura formato shape
summary(s) # no muy sencillo de leer...
plot(s) # Francia
Object of class SpatialPolygonsDataFrame
Coordinates:
min max
x -5.143751 9.560416
y 41.333752 51.093193
Is projected: NA
proj4string : [NA]
Data attributes:
MM_UID CODE NAME1 NAME2 DIVISION
FR.AB France Ain Region
...
Reconocemos las coordenadas GPS de Francia continental (Córcega incluida).
Área metropolitana de Francia por departamentos, en su forma más sencilla
Ahora vamos a leer los mismos datos con el paquete sf y visualizar este mapa de Francia en dos features diferentes (departamentos y antiguas regiones administrativas). Se invoca la función plot después de identificar la firma del objeto que se va a mostrar. Como esto proviene del paquete sf, el plot que se utiliza es el que se define en el paquete.
library(sf) # para tener sf::st_read
s_ <-sf::st_read("map/map.shp", stringsAsFactors = FALSE)
summary(s_)
plot(s_[,c("CODE","NAME1","geometry"), ]) # departamentos y regiones
Los polígonos están coloreados según los departamentos o las regiones.
Francia metropolitana...
Creación de mapas dinámicos con R
Ahora vamos a implementar mapas interactivos «raster» + «shape». Vamos a crear dos mapas que van a estar sincronizados, es decir, el movimiento en uno va a provocar el movimiento de un puntero sobre el otro.
library(mapview) # mapas interactivos
# lo más sencillo
# [NO IMPRESO EN EL LIBRO]
mapview(c_lorena,
zcol = c("Z_MOYEN"),
legend = TRUE)
mapview(s_lorena, # lectura shape
zcol = c("NAME2"),
legend = TRUE)
# [EJEMPLO INTERESANTE]
# mapas sincronizados
library(RColorBrewer) # gestión de colores
clrs <- colorRampPalette(brewer.pal(9, "Greens"))
mapview(c_lorena,
zcol = c("Z_MOYEN"),
...