Patrones de cobertura territorial con isocronas, mapas de calor y densidades de núcleo
## Warning: package 'rgdal' is not available for this version of R
##
## A version of this package for your version of R might be available elsewhere,
## see the ideas at
## https://cran.r-project.org/doc/manuals/r-patched/R-admin.html#Installing-packages
## Warning: 'BiocManager' not available. Could not check Bioconductor.
##
## Please use `install.packages('BiocManager')` and then retry.
## Warning in p_install(package, character.only = TRUE, ...):
## Warning in library(package, lib.loc = lib.loc, character.only = TRUE,
## logical.return = TRUE, : there is no package called 'rgdal'
## Warning in p_load("readr", "tidyverse", "DT", "prettydoc", "mapview", "rgdal", : Failed to install/load:
## rgdal
Taller presentado durante el 4º Coloquio de Estudiantes de Maestría en Ciencias en Arquitectura y Urbanismo de la ESIA Tecamachalco, del Instituto Politécnico Nacional.
Aprendizaje Al finalizar el taller, el participante podrá evaluar la cobertura de algún tipo de servicio, infraestructura o equipamiento, así como observar la distribución territorial de algún fenómeno particular que decida analizar.
Actividades Durante el taller se elaborarán mapas de calor basados en el Directorio Estadístico Nacional de Unidades Económicas (DENUE) con QGIS y se revisará la porosidad urbana por medio de isocronas generadas con una herramienta en línea. Finalmente se elaborarán densidades de núcleo con R Studio para determinar los patrones de distribución de un conjunto específico de datos espaciales.
Requerimientos Se hará uso de los softwares libres y de código abierto para análisis geo-espacial QGIS y R Studio. Es deseable contar con conocimientos sobre sistemas de información geográfica.
Sesión 1 (2hrs)
Minería de datos:
- Descarga e instalación de QGis desde (https://qgis.org/es/site/forusers/download.html) (saber si se usa Windows 32 o 64: https://support.microsoft.com/en-us/windows/32-bit-and-64-bit-windows-frequently-asked-questions-c6ca9541-8dce-4d48-0415-94a3faa2e13d)
- Descarga base de datos DENUE 2021 (SRC = 4326) por entidad desde (https://www.inegi.org.mx/app/descarga/)
- Descarga CGURA 2020 (SRC = 6372) por entidad desde (https://www.inegi.org.mx/app/biblioteca/ficha.html?upc=889463807469)
- Crear nueva capa con la selección (en una nueva proyección) con polígono de alcaldía/municipio
- Recorte de datos
Sesión 2 (2hrs)
Mapas de calor:
- Revisión de configuración y contenido del DENUE
- Representación de capas como mapas de calor
- Categorizar (Ponderar) mapas de calor por variable: “nombre_act” ilike ‘hospital%’)
Isocronas:
- Generación de isocronas desde (https://classic-maps.openrouteservice.org/)
- Exportación e importación a QGis
- Representación de capa
- Interpretación cartográfica
Densidades de núcleo:
- Descarga e instalación de R desde (https://cran.r-project.org)
- Descarga e instalación de RStudio desde (https://www.rstudio.com) - Tutorial (https://www.youtube.com/watch?v=mQ1ySyFVttk)
- Normalización de capa DENUE
- Básicos de R
Tener un encabezado:
####################################################################################
# Titulo : Densidades de núcleo (kernel) #
# #
# Autor : Maria Carolina Quintana Noriega #
# Fecha : 29 de junio de 2021 #
######################################################################################### Instalar los paquetes de herramientas que se van a utilizar (PACMAN, RGDAL, RGEOS y GGSpatial):
install.packages("pacman")
install.packages("rgdal")
install.packages("rgeos")
install.packages("ggspatial")##### Cargar SHP con polígono de municipio o alcaldía y proyección en grados (4326)
NAUCALPAN <- st_read("MPIO_NAUCALPAN.shp")
NAUCALPAN %>%
ggplot() +
geom_sf()- Revisión del código para densidades de núcleo
##### Cargar CSV con centroides (puntos) de equipamientos
NAUCALPAN_TORTILLERIAS <- read_csv("TORTILL_NAUCALPAN.csv")## Rows: 542 Columns: 42
## ── Column specification ────────────────────────────────────────────────────────
## Delimiter: ","
## chr (31): clee, nom_estab, raz_social, nombre_act, per_ocu, tipo_vial, nom_v...
## dbl (10): id, codigo_act, numero_ext, edificio_e, numero_int, cod_postal, cv...
## lgl (1): www
##
## ℹ Use `spec()` to retrieve the full column specification for this data.
## ℹ Specify the column types or set `show_col_types = FALSE` to quiet this message.
##### Representar los puntos sobre el polígono
NAUCALPAN %>%
ggplot() +
geom_sf() +
geom_point(data = NAUCALPAN_TORTILLERIAS,
aes(x = longitud,
y = latitud))##### Generar polígonos de densidad de núcleo (kernel)
NAUCALPAN %>%
ggplot() +
geom_sf(fill = "grey95",
size = 0.4) +
geom_density2d(data = NAUCALPAN_TORTILLERIAS,
aes(x = longitud, y = latitud),
adjust = 1/3, # Para modificar la densidad (ancho de banda)
size = 0.6, color = "#673059") +
scale_x_continuous(minor_breaks=0, limits=c(-99.42,-99.2)) + # Para no cortar las curvas
scale_y_continuous(minor_breaks=0, limits=c(19.4,19.54)) + # Fuente: https://stackoverflow.com/questions/35974805/ggplot2-automatic-scaling-to-include-complete-contour-lines-in-geom-density-2d
theme_void() +
labs(title = "Densidades de núcleo (kernel)",
subtitle = "CDMX, 29 de junio de 2021.",
caption = "Elaboración propia con base en carpetas DENUE.") ##### Para crear densidades de núcleo (kernel) con relleno
NAUCALPAN %>% #####
ggplot() + # Esto representa el SHP de la CDMX en el mapa
geom_sf(fill = "grey95", #
size = 0.4)+ #####
geom_density2d(data = NAUCALPAN_TORTILLERIAS, # Esto representa los polígonos de densidad de
aes(x = longitud, y = latitud), # núcleo (kernel) sobre el mapa
size = 0.6, color = "#673059") + #####
stat_density2d(data = NAUCALPAN_TORTILLERIAS, #
aes(x = longitud, y = latitud, #
fill = ..level.. , #
alpha = ..level..), # Y todo esto representa los rellenos de la
geom = "polygon", # densidad de núcleo (kernel) sobre el mapa
size = 0.01, bins = 10) + #
scale_fill_viridis(option = "inferno") + #
guides(fill=FALSE, alpha = F) + #####
theme_void() +
labs(title = "Densidades de núcleo (kernel)",
subtitle = "CDMX, 29 de junio de 2021.",
caption = "Elaboración propia con base en DENUE") - Exportación de capa
##### Para guardar el resultado en un archivo SHP
# Esta es una opción de StackOverflow del Sep 16 '17 at 9:48 por usuario=Z.Lin
# Se puede consultar en el siguiente enlace:
# https://stackoverflow.com/questions/46248061/save-a-ggplot2-coord-map-chart-in-shapefile
library(ggplot2)
# Paso 0: crear el objeto de densidades de núcleo como en el código
dens_nuc <- ggplot() +
stat_density2d(data = NAUCALPAN_TORTILLERIAS,
aes(x = longitud, y = latitud,
fill = ..level.. ,
alpha = ..level..),
geom = "polygon",
adjust = 1/3, # Para modificar la densidad (ancho de banda)
size = 0.01, bins = 10) +
scale_x_continuous(minor_breaks=0, limits=c(-99.42,-99.2)) + # Para no cortar las curvas
scale_y_continuous(minor_breaks=0, limits=c(19.4,19.54)) # Fuente: https://stackoverflow.com/questions/35974805/ggplot2-automatic-scaling-to-include-complete-contour-lines-in-geom-density-2d # Paso 1: Extraer los datos relevantes del objeto ggplot:
library(dplyr)
# Devolver una lista de marcos de datos (cada marco de datos contiene coordenadas para un contorno);
# Tener en cuenta que puede haber varios contornos en el mismo alfa / color / relleno,
# de ahí la necesidad de dividir por grupos en lugar de por parámetros estéticos.
dg <- layer_data(dens_nuc) %>%
select(group, x, y) %>%
split(.$group) %>%
lapply(function(d){d[,-1]}) # Paso 2: Convertir los marcos de datos en un objeto SpatialPolygonsDataFrame,
# que se pasará a writeOGR:
library(sp)
# Convertir cada marco de datos en un objeto de clase Polygon.
polygons <- lapply(dg, Polygon)
# Convertir cada objeto de la clase Polygon en un objeto de la clase Polygons.
polygons <- lapply(seq_along(polygons),
function(i){
Polygons(list(polygons[[i]]),
ID = names(dg)[i])
})
# Convertir la lista de objetos de la clase Polygons en un objeto SpatialPolygons
polygons <- SpatialPolygons(polygons)
# Convertir el objeto SpatialPolygons en un objeto SpatialPolygonsDataFrame
polygons <- SpatialPolygonsDataFrame(polygons,
data = layer_data(dens_nuc) %>%
select(group, alpha, colour, fill) %>%
unique(),
match.ID = "group") # Paso 3: Guardar el objeto SpatialPolygonsDataFrame como un shapefile.
rgeos::createSPComment(polygons) # Este comando lo requirió writeOGR. Implicó instalar un nuevo paquete
rgdal::writeOGR(obj = polygons,
dsn = 'Library/CloudStorage/OneDrive-InstitutoTecnologicoydeEstudiosSuperioresdeMonterrey/UTILERIA/IPN_TALLER_PCT_2021/',
layer = "DENS_NUC_NAUCALPAN_TORTILLERIAS",
driver = "ESRI Shapefile")- Representación en QGis.
- Interpretación cartográfica
¡Gracias por participar en el Taller!