Este cuaderno ilustra cómo elaborar un mapa temático que muestre la participación municipal en la producción de un grupo importante de cultivos dentro de un departamento. Utilizaremos dos fuentes principales que hemos obtenido previamente: (i) un archivo CSV con la producción agrícola por municipio, tal como se obtuvo en la última clase; y (ii) un archivo GeoPackage que contiene los municipios de nuestro departamento. Además, incorporaremos un conjunto de datos adicional que incluye la red vial.
Primero, Cargamos las librerias necesarias
# run the following line from the console:
#install.packages("tmap")
#install.packages("sf")
#install.packages(readr)
#install.pacjages (dplyr)
library(readr)
library(dplyr)
library(sf)
Trabajaré con el departamento del Tolima. Dado que utilizas un equipo distinto y te interesa un departamento diferente, es posible que debas realizar algunos ajustes en las rutas de los archivos, los nombres de los archivos o los nombres de las variables.
Antes de comenzar, asegúrate de haber guardado los siguientes archivos en tu carpeta GB2/Proyecto6/data: un archivo GeoPackage con los municipios de tu departamento y un archivo CSV con las estadísticas EVA 2020 para un conjunto de cultivos.
Comencemos listando los archivos disponibles:
list.files("Datos")
[1] "EVA_Tolima.csv.csv" "Mun_Tolima.gpkg" "nroads.zip"
[4] "Tolima_Frutales.csv.csv"
Ahora, procedemos a leer los archivos y a mostrar el objeto resultante
library(readr)
(frutales=read_csv("Datos/Tolima_Frutales.csv.csv",show_col_types = FALSE))
Ten en cuenta que COD_MUN es de tipo double. A continuación, leamos los municipios que nos interesan:
library(readr)
(municipios = st_read('Datos/Mun_Tolima.gpkg'))
Reading layer `municipios' from data source
`C:\Users\angie\OneDrive\Documentos\Geomatica Practica\GB02\PROYECTO8\Datos\Mun_Tolima.gpkg'
using driver `GPKG'
Simple feature collection with 46 features and 11 fields
Geometry type: MULTIPOLYGON
Dimension: XY
Bounding box: xmin: -76.1007 ymin: 2.9669 xmax: -74.5033 ymax: 5.2915
Geodetic CRS: WGS 84
Simple feature collection with 46 features and 11 fields
Geometry type: MULTIPOLYGON
Dimension: XY
Bounding box: xmin: -76.1007 ymin: 2.9669 xmax: -74.5033 ymax: 5.2915
Geodetic CRS: WGS 84
First 10 features:
ID_0 ISO NAME_0 ID_1 NAME_1 ID_2 NAME_2
1 53 COL Colombia 29 Tolima 966 Alpujarra
2 53 COL Colombia 29 Tolima 967 Alvarado
3 53 COL Colombia 29 Tolima 968 Ambalema
4 53 COL Colombia 29 Tolima 969 Anzoátegui
5 53 COL Colombia 29 Tolima 970 Armero
6 53 COL Colombia 29 Tolima 971 Ataco
7 53 COL Colombia 29 Tolima 972 Cajamarca
8 53 COL Colombia 29 Tolima 973 Carmen de Apicalá
9 53 COL Colombia 29 Tolima 974 Casabianca
10 53 COL Colombia 29 Tolima 975 Chaparral
TYPE_2 ENGTYPE_2 NL_NAME_2 VARNAME_2
1 Municipio Municipality <NA> <NA>
2 Municipio Municipality <NA> <NA>
3 Municipio Municipality <NA> <NA>
4 Municipio Municipality <NA> <NA>
5 Municipio Municipality <NA> <NA>
6 Municipio Municipality <NA> <NA>
7 Municipio Municipality <NA> <NA>
8 Municipio Municipality <NA> <NA>
9 Municipio Municipality <NA> <NA>
10 Municipio Municipality <NA> <NA>
geom
1 MULTIPOLYGON (((-75.06009 3...
2 MULTIPOLYGON (((-74.899 4.6...
3 MULTIPOLYGON (((-74.8501 4....
4 MULTIPOLYGON (((-75.0961 4....
5 MULTIPOLYGON (((-74.7626 4....
6 MULTIPOLYGON (((-75.5969 3....
7 MULTIPOLYGON (((-75.6177 4....
8 MULTIPOLYGON (((-74.803 4.0...
9 MULTIPOLYGON (((-75.36208 4...
10 MULTIPOLYGON (((-75.2738 3....
stder.crs <- sf::st_crs(municipios)
A continuación, realizaremos los siguientes pasos: - Descargar un
geopackage de las carreteras de Colombia desde HDX - Descomprimir el
archivo hotosm_col_roads_osm_gpkg.zip dentro de la carpeta «data» en tu
directorio de trabajo - Leer el geopackage descomprimido utilizando la
función sf::st_read - Filtrar las carreteras de Colombia
para obtener las correspondientes a nuestro departamento.
list.files('Datos/nroads')
[1] "config.yaml" "metadata.json" "README.txt" "roads.gpkg"
library(readr)
(sf.roads = st_read('Datos/nroads/roads.gpkg'))
Reading layer `roads' from data source
`C:\Users\angie\OneDrive\Documentos\Geomatica Practica\GB02\PROYECTO8\Datos\nroads\roads.gpkg'
using driver `GPKG'
Simple feature collection with 1238606 features and 24 fields
Geometry type: GEOMETRY
Dimension: XY
Bounding box: xmin: -81.73539 ymin: -4.258755 xmax: -66.83066 ymax: 13.38636
Geodetic CRS: WGS 84
Simple feature collection with 1238606 features and 24 fields
Geometry type: GEOMETRY
Dimension: XY
Bounding box: xmin: -81.73539 ymin: -4.258755 xmax: -66.83066 ymax: 13.38636
Geodetic CRS: WGS 84
First 10 features:
id name name_en name_es highway surface smoothness width lanes oneway bridge
1 way/332900376 <NA> <NA> <NA> service <NA> <NA> <NA> <NA> <NA> <NA>
2 way/180388997 Carrera 17 <NA> <NA> residential unpaved <NA> <NA> <NA> <NA> <NA>
3 way/822292471 <NA> <NA> <NA> service unpaved <NA> 3 <NA> <NA> <NA>
4 way/835847133 Carrera 7 <NA> <NA> residential unpaved <NA> <NA> <NA> <NA> <NA>
5 way/76531894 Calle 24 <NA> <NA> residential unpaved <NA> <NA> <NA> yes <NA>
6 way/180781725 <NA> <NA> <NA> footway <NA> <NA> <NA> <NA> <NA> <NA>
7 way/180380289 Carrera 18 <NA> <NA> residential <NA> <NA> <NA> <NA> yes <NA>
8 way/574904069 Carrera 12 <NA> <NA> residential asphalt <NA> <NA> <NA> yes <NA>
9 way/1431563600 <NA> <NA> <NA> service <NA> <NA> <NA> <NA> <NA> <NA>
10 way/233980193 <NA> <NA> <NA> track <NA> <NA> <NA> <NA> <NA> <NA>
layer source adm0_pcode adm0_name adm1_pcode adm1_name adm2_pcode adm2_name adm3_pcode adm3_name
1 <NA> <NA> COL Colombia CO81 Arauca CO81001 Arauca <NA> <NA>
2 <NA> <NA> COL Colombia CO81 Arauca CO81736 Saravena <NA> <NA>
3 <NA> <NA> COL Colombia CO81 Arauca CO81736 Saravena <NA> <NA>
4 <NA> <NA> COL Colombia CO81 Arauca CO81736 Saravena <NA> <NA>
5 <NA> <NA> COL Colombia CO81 Arauca CO81736 Saravena <NA> <NA>
6 <NA> <NA> COL Colombia CO81 Arauca CO81736 Saravena <NA> <NA>
7 <NA> <NA> COL Colombia CO81 Arauca CO81736 Saravena <NA> <NA>
8 <NA> <NA> COL Colombia CO81 Arauca CO81736 Saravena <NA> <NA>
9 <NA> <NA> COL Colombia CO81 Arauca CO81736 Saravena <NA> <NA>
10 <NA> <NA> COL Colombia CO81 Arauca CO81065 Arauquita <NA> <NA>
adm4_pcode adm4_name name_latin geom
1 <NA> <NA> <NA> LINESTRING (-71.09269 6.957...
2 <NA> <NA> Carrera 17 LINESTRING (-71.87846 6.956...
3 <NA> <NA> <NA> LINESTRING (-71.83405 6.955...
4 <NA> <NA> Carrera 7 LINESTRING (-71.86707 6.955...
5 <NA> <NA> Calle 24 LINESTRING (-71.86982 6.957...
6 <NA> <NA> <NA> LINESTRING (-71.87532 6.956...
7 <NA> <NA> Carrera 18 LINESTRING (-71.87999 6.956...
8 <NA> <NA> Carrera 12 LINESTRING (-71.87189 6.955...
9 <NA> <NA> <NA> LINESTRING (-71.87497 6.956...
10 <NA> <NA> <NA> LINESTRING (-71.16664 6.963...
Ten en cuenta que st.roads es una colección de entidades
(feature collection) compuesta por líneas (linestrings). En tu cuaderno
(notebook), responde a estas preguntas: -
#¿Cuáles son los tipos de geometría de las entidades?
El tipo de geometria principal es GEOMETRY Contiene elementos de tipo linea y punto indicados como way y node
#¿Cuántas entidades hay en la colección?
Hay 1.238.606 entidades (Features)
st_read('datos/nroads/roads.gpkg')
Reading layer `roads' from data source
`C:\Users\angie\OneDrive\Documentos\Geomatica Practica\GB02\PROYECTO8\Datos\nroads\roads.gpkg' using driver `GPKG'
Simple feature collection with 1238606 features and 24 fields
Geometry type: GEOMETRY
Dimension: XY
Bounding box: xmin: -81.73539 ymin: -4.258755 xmax: -66.83066 ymax: 13.38636
Geodetic CRS: WGS 84
Ahora, asegurémonos de que tanto las carreteras como los municipios tengan el mismo sistema de referencia de coordenadas (CRS):
nroads <- st_transform(sf.roads, crs= stder.crs)
nroads <- st_transform(sf.roads, crs = stder.crs)
head(nroads)
Simple feature collection with 6 features and 24 fields
Geometry type: LINESTRING
Dimension: XY
Bounding box: xmin: -71.87922 ymin: 6.955888 xmax: -71.08969 ymax: 6.957709
Geodetic CRS: WGS 84
id name name_en name_es highway surface
1 way/332900376 <NA> <NA> <NA> service <NA>
2 way/180388997 Carrera 17 <NA> <NA> residential unpaved
3 way/822292471 <NA> <NA> <NA> service unpaved
4 way/835847133 Carrera 7 <NA> <NA> residential unpaved
5 way/76531894 Calle 24 <NA> <NA> residential unpaved
6 way/180781725 <NA> <NA> <NA> footway <NA>
smoothness width lanes oneway bridge layer source adm0_pcode
1 <NA> <NA> <NA> <NA> <NA> <NA> <NA> COL
2 <NA> <NA> <NA> <NA> <NA> <NA> <NA> COL
3 <NA> 3 <NA> <NA> <NA> <NA> <NA> COL
4 <NA> <NA> <NA> <NA> <NA> <NA> <NA> COL
5 <NA> <NA> <NA> yes <NA> <NA> <NA> COL
6 <NA> <NA> <NA> <NA> <NA> <NA> <NA> COL
adm0_name adm1_pcode adm1_name adm2_pcode adm2_name
1 Colombia CO81 Arauca CO81001 Arauca
2 Colombia CO81 Arauca CO81736 Saravena
3 Colombia CO81 Arauca CO81736 Saravena
4 Colombia CO81 Arauca CO81736 Saravena
5 Colombia CO81 Arauca CO81736 Saravena
6 Colombia CO81 Arauca CO81736 Saravena
adm3_pcode adm3_name adm4_pcode adm4_name name_latin
1 <NA> <NA> <NA> <NA> <NA>
2 <NA> <NA> <NA> <NA> Carrera 17
3 <NA> <NA> <NA> <NA> <NA>
4 <NA> <NA> <NA> <NA> Carrera 7
5 <NA> <NA> <NA> <NA> Calle 24
6 <NA> <NA> <NA> <NA> <NA>
geom
1 LINESTRING (-71.09269 6.957...
2 LINESTRING (-71.87846 6.956...
3 LINESTRING (-71.83405 6.955...
4 LINESTRING (-71.86707 6.955...
5 LINESTRING (-71.86982 6.957...
6 LINESTRING (-71.87532 6.956...
Ahora vamos a crear un filtro para seleccionar las carreteras de nuestro departamento
(stder.roads.tmp = dplyr::filter(nroads, adm1_pcode=="CO73"))
Simple feature collection with 40858 features and 24 fields
Geometry type: GEOMETRY
Dimension: XY
Bounding box: xmin: -76.0521 ymin: 2.992607 xmax: -74.47657 ymax: 5.320654
Geodetic CRS: WGS 84
First 10 features:
id name name_en name_es
1 way/1047823472 <NA> <NA> <NA>
2 way/1013194198 <NA> <NA> <NA>
3 way/587756852 <NA> <NA> <NA>
4 way/1047823471 <NA> <NA> <NA>
5 way/1013194210 <NA> <NA> <NA>
6 way/203142620 Vía Ibagué-Gualanday <NA> <NA>
7 way/588179600 <NA> <NA> <NA>
8 way/660053110 <NA> <NA> <NA>
9 way/74060015 <NA> <NA> <NA>
10 way/1013194209 <NA> <NA> <NA>
highway surface smoothness width lanes oneway bridge
1 service <NA> <NA> <NA> <NA> yes <NA>
2 service <NA> <NA> <NA> <NA> <NA> <NA>
3 footway <NA> <NA> <NA> <NA> <NA> <NA>
4 service <NA> <NA> <NA> <NA> yes <NA>
5 service <NA> <NA> <NA> <NA> <NA> <NA>
6 trunk asphalt <NA> <NA> 2 yes <NA>
7 footway <NA> <NA> <NA> <NA> <NA> <NA>
8 service <NA> <NA> <NA> <NA> <NA> <NA>
9 unclassified <NA> <NA> <NA> <NA> <NA> <NA>
10 service <NA> <NA> <NA> <NA> <NA> <NA>
layer source adm0_pcode adm0_name adm1_pcode adm1_name
1 <NA> <NA> COL Colombia CO73 Tolima
2 <NA> <NA> COL Colombia CO73 Tolima
3 <NA> <NA> COL Colombia CO73 Tolima
4 <NA> <NA> COL Colombia CO73 Tolima
5 <NA> <NA> COL Colombia CO73 Tolima
6 <NA> <NA> COL Colombia CO73 Tolima
7 <NA> <NA> COL Colombia CO73 Tolima
8 <NA> <NA> COL Colombia CO73 Tolima
9 <NA> <NA> COL Colombia CO73 Tolima
10 <NA> <NA> COL Colombia CO73 Tolima
adm2_pcode adm2_name adm3_pcode adm3_name adm4_pcode
1 CO73001 Ibagué <NA> <NA> <NA>
2 CO73001 Ibagué <NA> <NA> <NA>
3 CO73624 Rovira <NA> <NA> <NA>
4 CO73001 Ibagué <NA> <NA> <NA>
5 CO73001 Ibagué <NA> <NA> <NA>
6 CO73001 Ibagué <NA> <NA> <NA>
7 CO73624 Rovira <NA> <NA> <NA>
8 CO73001 Ibagué <NA> <NA> <NA>
9 CO73001 Ibagué <NA> <NA> <NA>
10 CO73001 Ibagué <NA> <NA> <NA>
adm4_name name_latin
1 <NA> <NA>
2 <NA> <NA>
3 <NA> <NA>
4 <NA> <NA>
5 <NA> <NA>
6 <NA> Via Ibague-Gualanday
7 <NA> <NA>
8 <NA> <NA>
9 <NA> <NA>
10 <NA> <NA>
geom
1 LINESTRING (-75.10139 4.315...
2 LINESTRING (-75.10173 4.314...
3 LINESTRING (-75.28695 4.311...
4 LINESTRING (-75.10173 4.314...
5 LINESTRING (-75.10169 4.314...
6 LINESTRING (-75.0703 4.3218...
7 LINESTRING (-75.28603 4.311...
8 LINESTRING (-75.06461 4.313...
9 LINESTRING (-75.20785 4.311...
10 LINESTRING (-75.10202 4.313...
Ahora las columnas relevantes
stder.roads.tmp %>% select('id', 'name', 'highway', 'adm2_pcode', 'adm2_name') -> stder.roads
¿Que tenemos?
stder.roads
Simple feature collection with 40858 features and 5 fields
Geometry type: GEOMETRY
Dimension: XY
Bounding box: xmin: -76.0521 ymin: 2.992607 xmax: -74.47657 ymax: 5.320654
Geodetic CRS: WGS 84
First 10 features:
id name highway adm2_pcode
1 way/1047823472 <NA> service CO73001
2 way/1013194198 <NA> service CO73001
3 way/587756852 <NA> footway CO73624
4 way/1047823471 <NA> service CO73001
5 way/1013194210 <NA> service CO73001
6 way/203142620 Vía Ibagué-Gualanday trunk CO73001
7 way/588179600 <NA> footway CO73624
8 way/660053110 <NA> service CO73001
9 way/74060015 <NA> unclassified CO73001
10 way/1013194209 <NA> service CO73001
adm2_name geom
1 Ibagué LINESTRING (-75.10139 4.315...
2 Ibagué LINESTRING (-75.10173 4.314...
3 Rovira LINESTRING (-75.28695 4.311...
4 Ibagué LINESTRING (-75.10173 4.314...
5 Ibagué LINESTRING (-75.10169 4.314...
6 Ibagué LINESTRING (-75.0703 4.3218...
7 Rovira LINESTRING (-75.28603 4.311...
8 Ibagué LINESTRING (-75.06461 4.313...
9 Ibagué LINESTRING (-75.20785 4.311...
10 Ibagué LINESTRING (-75.10202 4.313...
Comencemos añadiendo a frutales un nuevo atributo,
COD_MUN, cuyo tipo de dato se convierte de numérico
(double) a carácter
Ahora, unamos los datos de producción a nuestros municipios:
A continuación, debemos definir las capas del mapa y los componentes de la leyenda. Utilizaremos la técnica de cuantiles y una paleta de colores naranja-verde.
library(tmap)
tmap_mode("view")
frutales_map2 <- tm_shape(munic_frutales2) +
tm_polygons(
fill = "Produccion",
fill.scale = tm_scale_continuous(), # Cambiamos a escala continua para evitar el error de rango único
fill.legend = tm_legend(title = "Producción (t)"),
popup = tm_popup(vars = c("Municipio" = "NAME_2", "Producción (t)" = "Produccion"))
) +
tm_text(
text = "NAME_2",
size = 0.55,
col = "#222222"
) +
tm_credits("Fuente: UPRA (2022)", fontface = "bold") +
tm_title("Producción de frutales en Tolima", fontface = "bold.italic")
tmap_leaflet(frutales_map2)