Este es el segundo R Markdown Notebook para el curso Geomatica Basica 2022. Ilustra cómo hacer mapas temáticos que muestren la participación municipal de los dos grupos de cultivos más importantes para el departamento del Casanare, los cuales son en primer lugar el grupo de los cereales y en segunda instancia el grupo de las oleaginosas. Se usan como fuente principal los archivos csv guardados en la libreta EVA, así como un shapefile de municipios obtenido en clase.
En este paso, se instalan y cargan las bibliotecas R requeridas.
#install.packages('tidyverse')
#install.packages('sf')
Se corren las librerias previamente instaladas
library(tidyverse)
## ── Attaching packages ─────────────────────────────────────── tidyverse 1.3.2 ──
## ✔ ggplot2 3.3.6 ✔ purrr 0.3.4
## ✔ tibble 3.1.8 ✔ dplyr 1.0.10
## ✔ tidyr 1.2.1 ✔ stringr 1.4.1
## ✔ readr 2.1.2 ✔ forcats 0.5.2
## ── Conflicts ────────────────────────────────────────── tidyverse_conflicts() ──
## ✖ dplyr::filter() masks stats::filter()
## ✖ dplyr::lag() masks stats::lag()
library(sf)
## Linking to GEOS 3.9.1, GDAL 3.4.3, PROJ 7.2.1; sf_use_s2() is TRUE
Como ya se ha mencionado se trabajara el departamento del Casanare Para iniciar se debe chequear que se tengan los siguientes archivos: -Municipios -Ciudades -Archivos obtenidos durante el desarrollo del Notebook N°1 relacionados a los grupos de cultivos mas importantes del departamento
Además, es necesario tener un archivo con las principales ciudades de Colombia. Puede descargarlo desde este enlace
Se iniciara enumerando los archivos de los cuales se va a disponer:
list.files()
## [1] "BORRADOR.html" "BORRADOR.nb.html"
## [3] "BORRADOR.Rmd" "casanare_cereales_2021.csv"
## [5] "casanare_oleag_2021.csv" "EVA2020_Casanare.html"
## [7] "EVA2020_Casanare.nb.html" "EVA2020_Casanare.Rmd"
## [9] "inputs" "MapasCasanare.html"
## [11] "MapasCasanare.nb.html" "MapasCasanare.Rmd"
## [13] "MapasCasanare_files" "rsconnect"
Ahora se enumeran los archivos previamente guardados en la carpeta inputs
list.files('./inputs')
## [1] "BaseEVA_Agrícola2021.xlsx" "casanare_oleag_2021.csv"
## [3] "CIUDADES.csv" "COLOMBIACITIES.csv"
## [5] "EVA2021.xlsx" "MCasanare.geojson"
## [7] "munic_cereales.dbf" "munic_cereales.prj"
## [9] "munic_cereales.shp" "munic_cereales.shx"
## [11] "munic_oleag.dbf" "munic_oleag.prj"
## [13] "munic_oleag.shp" "munic_oleag.shx"
Se lee el archivo geojson previamente descargado que contiene los municipios de Casanare
municipios = st_read('./inputs/MCasanare.geojson')
## Reading layer `MCasanare' from data source
## `C:\Users\USER\OneDrive\Documentos\GEOMATICA\GB\P5\inputs\MCasanare.geojson'
## using driver `GeoJSON'
## Simple feature collection with 19 features and 12 fields
## Geometry type: MULTIPOLYGON
## Dimension: XY
## Bounding box: xmin: -73.07777 ymin: 4.287476 xmax: -69.83591 ymax: 6.346111
## Geodetic CRS: MAGNA-SIRGAS
Se obtiene la tabla que relaciona los municipios de Casanare que tienen produccion del grupo de cereales y se clasifican teniendo en cuenta el criterio de mayor produccion
(cereales = read_csv("casanare_cereales_2021.csv",show_col_types = FALSE))
Aqui se visualizan los municipios del departamento
(municipios = st_read('./inputs/MCasanare.geojson'))
## Reading layer `MCasanare' from data source
## `C:\Users\USER\OneDrive\Documentos\GEOMATICA\GB\P5\inputs\MCasanare.geojson'
## using driver `GeoJSON'
## Simple feature collection with 19 features and 12 fields
## Geometry type: MULTIPOLYGON
## Dimension: XY
## Bounding box: xmin: -73.07777 ymin: 4.287476 xmax: -69.83591 ymax: 6.346111
## Geodetic CRS: MAGNA-SIRGAS
Listar los archivos que existen en el directorio de trabajo:
list.files()
## [1] "BORRADOR.html" "BORRADOR.nb.html"
## [3] "BORRADOR.Rmd" "casanare_cereales_2021.csv"
## [5] "casanare_oleag_2021.csv" "EVA2020_Casanare.html"
## [7] "EVA2020_Casanare.nb.html" "EVA2020_Casanare.Rmd"
## [9] "inputs" "MapasCasanare.html"
## [11] "MapasCasanare.nb.html" "MapasCasanare.Rmd"
## [13] "MapasCasanare_files" "rsconnect"
Se observan los archivos existentes, incluyendo los municipios de Colombia.
Para leer el archivo de ciudades de Colombia, que está delimitado por puntos y comas, se usa el siguiente código:
(cities = read_delim("./inputs/CIUDADES.csv",col_names = FALSE,delim = ';', show_col_types = FALSE))
Mediante este codigo se logra seleccionar las columnas x3 y x4 que corresponden a latitud y longitud
#cities %>%
# select(X3, X4) %>%
# mutate(across(X3:X4, as.numeric))
A la anterior seleccion se le denomina como “cities” y aqui se corre
#cities
Ahora se convierten los datos en objetos simples
# Convert data frame to simple feature object
sf.cities <- st_as_sf(x = cities,
coords = c("X4", "X3"))
Se visualizan los datos como objetos simples
sf.cities
#st_crs(municipios)
Se agrega el CRS usando el código EPSG
st_crs(sf.cities) <- 4686
Como solo nos interesa el departamento del Casanare, se debe crear una unión espacial:
# find points within polygons
sf.cities.joined <- st_join(sf.cities, municipios, join = st_covered_by)
Se visualiza la union espacial
sf.cities.joined
Ahora se seleccionan las filas cuyos DPTO_CCDGO se corresponden
casanare.cities = dplyr::filter(sf.cities.joined, DPTO_CCDGO=='85')
Se visualizan las filas seleccionadas
casanare.cities
A partir de este punto se empezara a estructurar un mapa del departamento para el grupo de cereales Se deben instalar las librerias
# run the following lines from the command window:
#install.packages("tmap")
#install.packages("ggplot2")
#install.packages("classInt")
library(tmap)
Se intalan las siguientes librerias haciendo enfasis en la libreria tmap, la cual nos permitira la visualizacion del mapa trabajado
library(ggplot2)
library(ggrepel)
library(classInt)
library(dplyr)
library(sf)
library(ggplot2)
library(tmap)
Nuestra próxima tarea es unir el objeto de estadísticas a los objetos espaciales para tener los datos relevantes en un solo objeto.
Para poder realizar la unión, necesitamos una clave compartida, es decir, un atributo común. En este caso, lo tenemos en ambos objetos. Sin embargo, sus tipos de datos son diferentes.
class(cereales$COD_MUN)
## [1] "numeric"
class(municipios$MPIO_CDPMP)
## [1] "character"
Se debe arreglar “COD_MUN” a una caracter
cereales$COD_MUN = as.character(cereales$COD_MUN)
Se visualiza los dos objetos como caracteres
cereales
Se visualiza municipios
municipios
Ahora se realiza una union entre municipios y cereales teniendo en cuenta los codigos de los municipios que deben corresponder
munic_cereales = dplyr::left_join(municipios, cereales, by = c("MPIO_CDPMP" = "COD_MUN"))
Se visualiza la anterior union
munic_cereales
#sf::st_write(munic_cereales, "./inputs/munic_cereales.shp")
#(otros_mun_cereales = sf::st_read("./inputs/munic_cereales.shp"))
Mediante este codigo se puede personalizar el color de los poligonos y el numero de intervalos en los que se clasificara la produccion del departamento
breaks <- classIntervals(munic_cereales$max_prod, n = 6, style = 'fisher')
#label breaks
lab_vec <- vector(length = length(breaks$brks)-1)
rounded_breaks <- round(breaks$brks,2)
lab_vec[1] <- paste0('[', rounded_breaks[1],' - ', rounded_breaks[2],']')
for(i in 2:(length(breaks$brks) - 1)){
lab_vec[i] <- paste0('(',rounded_breaks[i], ' - ', rounded_breaks[i+1], ']')
}
Ahora se empieza a estructurar los intervales de la produccion del cultivo de cereales
munic_cereales <- munic_cereales %>%
dplyr::mutate(faktor_class = factor(cut(max_prod, breaks$brks, include.lowest = T), labels = lab_vec))
# change attribute name
munic_cereales$Produccion = munic_cereales$faktor_class
(munic_cereales$mid <- sf::st_centroid(munic_cereales$geometry))
## Geometry set for 19 features
## Geometry type: POINT
## Dimension: XY
## Bounding box: xmin: -72.9958 ymin: 4.528296 xmax: -70.86954 ymax: 6.178277
## Geodetic CRS: MAGNA-SIRGAS
## First 5 geometries:
## POINT (-72.25799 5.242718)
## POINT (-72.5482 5.126111)
## POINT (-72.86609 5.229233)
## POINT (-72.34693 6.178277)
## POINT (-72.21278 4.675762)
LONG = st_coordinates(munic_cereales$mid)[,1]
LAT = st_coordinates(munic_cereales$mid)[,2]
ggplot(data = munic_cereales) +
geom_sf(aes(fill = Produccion)) +
geom_label_repel(aes(x = LONG, y = LAT, label = MPIO_CNMBR),
label.padding = unit(0.05,"lines"),
label.r = unit(0.025, "lines"),
label.size = 0.05)
read_csv("casanare_oleag_2021.csv",show_col_types = FALSE)
(oleag = read_csv("casanare_oleag_2021.csv",show_col_types = FALSE))
oleag
munic_oleag = dplyr::left_join(municipios, cereales, by = c("MPIO_CDPMP" = "COD_MUN"))
munic_oleag
#sf::st_write(munic_oleag, "./inputs/munic_oleag.shp")
breaks <- classIntervals(munic_oleag$max_prod, n = 6, style = 'fisher')
#label breaks
lab_vec <- vector(length = length(breaks$brks)-1)
rounded_breaks <- round(breaks$brks,2)
lab_vec[1] <- paste0('[', rounded_breaks[1],' - ', rounded_breaks[2],']')
for(i in 2:(length(breaks$brks) - 1)){
lab_vec[i] <- paste0('(',rounded_breaks[i], ' - ', rounded_breaks[i+1], ']')
}
munic_oleag <- munic_oleag %>%
dplyr::mutate(faktor_class = factor(cut(max_prod, breaks$brks, include.lowest = T), labels = lab_vec))
# change attribute name
munic_oleag$Produccion = munic_oleag$faktor_class
(munic_oleag$mid <- sf::st_centroid(munic_oleag$geometry))
## Geometry set for 19 features
## Geometry type: POINT
## Dimension: XY
## Bounding box: xmin: -72.9958 ymin: 4.528296 xmax: -70.86954 ymax: 6.178277
## Geodetic CRS: MAGNA-SIRGAS
## First 5 geometries:
## POINT (-72.25799 5.242718)
## POINT (-72.5482 5.126111)
## POINT (-72.86609 5.229233)
## POINT (-72.34693 6.178277)
## POINT (-72.21278 4.675762)
LONG = st_coordinates(munic_oleag$mid)[,1]
LAT = st_coordinates(munic_oleag$mid)[,2]
ggplot(data = munic_oleag) +
geom_sf(aes(fill = Produccion)) +
geom_label_repel(aes(x = LONG, y = LAT, label = MPIO_CNMBR),
label.padding = unit(0.05,"lines"),
label.r = unit(0.025, "lines"),
label.size = 0.05)
(cereales = read_csv("casanare_cereales_2021.csv",show_col_types = FALSE))
cereales$COD_MUN = as.character(cereales$COD_MUN)
munic_cereales = dplyr::left_join(municipios, cereales, by = c("MPIO_CDPMP" = "COD_MUN"))
munic_cereales
facet = "max_prod"
cereales_map =
tm_shape(munic_cereales) + tm_polygons(facet) + tm_text(text = "MPIO_CDPMP", size = 0.5, fontfamily = "sans") +
tm_shape(casanare.cities) + tm_symbols(shape = 2, col = "red", size = 0.25) +
tm_credits("Data source: UPRA (2021)", fontface = "bold") +
tm_layout(main.title = "Produccion de cereales en 2021",
main.title.fontface = "bold.italic",
legend.title.fontfamily = "monospace") +
tm_scale_bar(position = c("left", "bottom"))
tmap_mode("view")
## tmap mode set to interactive viewing
#cereales_map
Citar como Lopez, A., 2022.
sessionInfo()
## R version 4.2.1 (2022-06-23 ucrt)
## Platform: x86_64-w64-mingw32/x64 (64-bit)
## Running under: Windows 10 x64 (build 19044)
##
## Matrix products: default
##
## locale:
## [1] LC_COLLATE=Spanish_Colombia.utf8 LC_CTYPE=Spanish_Colombia.utf8
## [3] LC_MONETARY=Spanish_Colombia.utf8 LC_NUMERIC=C
## [5] LC_TIME=Spanish_Colombia.utf8
##
## attached base packages:
## [1] stats graphics grDevices utils datasets methods base
##
## other attached packages:
## [1] classInt_0.4-8 ggrepel_0.9.1 tmap_3.3-3 sf_1.0-8
## [5] forcats_0.5.2 stringr_1.4.1 dplyr_1.0.10 purrr_0.3.4
## [9] readr_2.1.2 tidyr_1.2.1 tibble_3.1.8 ggplot2_3.3.6
## [13] tidyverse_1.3.2
##
## loaded via a namespace (and not attached):
## [1] fs_1.5.2 lubridate_1.8.0 bit64_4.0.5
## [4] RColorBrewer_1.1-3 httr_1.4.4 tools_4.2.1
## [7] backports_1.4.1 bslib_0.4.0 utf8_1.2.2
## [10] R6_2.5.1 KernSmooth_2.23-20 DBI_1.1.3
## [13] colorspace_2.0-3 raster_3.6-3 sp_1.5-0
## [16] withr_2.5.0 tidyselect_1.1.2 leaflet_2.1.1
## [19] bit_4.0.4 compiler_4.2.1 leafem_0.2.0
## [22] cli_3.4.0 rvest_1.0.3 xml2_1.3.3
## [25] sass_0.4.2 scales_1.2.1 proxy_0.4-27
## [28] digest_0.6.29 rmarkdown_2.16 base64enc_0.1-3
## [31] dichromat_2.0-0.1 pkgconfig_2.0.3 htmltools_0.5.3
## [34] highr_0.9 dbplyr_2.2.1 fastmap_1.1.0
## [37] htmlwidgets_1.5.4 rlang_1.0.5 readxl_1.4.1
## [40] rstudioapi_0.14 farver_2.1.1 jquerylib_0.1.4
## [43] generics_0.1.3 jsonlite_1.8.0 crosstalk_1.2.0
## [46] vroom_1.5.7 googlesheets4_1.0.1 magrittr_2.0.3
## [49] s2_1.1.0 Rcpp_1.0.9 munsell_0.5.0
## [52] fansi_1.0.3 abind_1.4-5 terra_1.6-17
## [55] lifecycle_1.0.2 stringi_1.7.8 leafsync_0.1.0
## [58] yaml_2.3.5 tmaptools_3.1-1 grid_4.2.1
## [61] parallel_4.2.1 crayon_1.5.1 lattice_0.20-45
## [64] haven_2.5.1 stars_0.5-6 hms_1.1.2
## [67] knitr_1.40 pillar_1.8.1 codetools_0.2-18
## [70] wk_0.6.0 reprex_2.0.2 XML_3.99-0.11
## [73] glue_1.6.2 evaluate_0.16 modelr_0.1.9
## [76] png_0.1-7 vctrs_0.4.1 tzdb_0.3.0
## [79] cellranger_1.1.0 gtable_0.3.1 assertthat_0.2.1
## [82] cachem_1.0.6 xfun_0.33 lwgeom_0.2-9
## [85] broom_1.0.1 e1071_1.7-11 viridisLite_0.4.1
## [88] class_7.3-20 googledrive_2.0.0 gargle_1.2.1
## [91] units_0.8-0 ellipsis_0.3.2