Objetivo

La Delimitación de Colonias y otros Asentamientos Humanos (DCAH) constituye una iniciativa del Instituto Nacional de Estadística y Geografía (INEGI) que tiene como propósito esencial la generación y mantenimiento de un sistema integral de información geográfica sobre los asentamientos humanos en el territorio mexicano. Este proyecto se desarrolló mediante un marco de colaboración estratégica con las autoridades municipales, quienes desempeñan un papel crucial en la delimitación precisa de estos espacios territoriales.

La implementación del DCAH se sustenta en cuatro pilares fundamentales que garantizan su efectividad y relevancia institucional.

  1. Generación de información geográfica precisa: El programa se centra en la generación de información geográfica de alta precisión, estableciendo un riguroso sistema de datos espaciales que refleja fielmente la realidad territorial de los asentamientos humanos en México. Este compromiso con la exactitud y la calidad de los datos representa la base sobre la cual se construyen todas las demás funciones del programa.

  2. Análisis y la toma de decisiones: Capacidad para facilitar procesos de análisis y toma de decisiones en múltiples ámbitos. La información generada por el DCAH se ha convertido en un recurso indispensable para la planificación urbana estratégica, la optimización en la gestión de servicios públicos, el desarrollo de investigaciones sociodemográficas y la formulación de políticas públicas basadas en evidencia. Esta versatilidad en su aplicación demuestra el valor multidimensional del programa.

  3. Promover la colaboración interinstitucional: Enfoque en la promoción de la colaboración interinstitucional. Se ha establecido mecanismos efectivos de cooperación con las autoridades municipales, creando sinergias que aseguran tanto la calidad como la actualización continua de la información recopilada. Esta colaboración representa un modelo ejemplar de coordinación entre diferentes niveles de gobierno para el beneficio público.

  4. Poner a disposición de la sociedad información relevante: La democratización del acceso a la información. Se ha implementado una política de transparencia y accesibilidad, poniendo a disposición del público general los datos del DCAH a través de su plataforma digital. Esta iniciativa no solo cumple con los principios de gobierno abierto, sino que también facilita el acceso a información valiosa para investigadores, planificadores urbanos y ciudadanos interesados.

Proposito

Proporcionar a las Unidades de Estado (UE) y a la sociedad en general un insumo que permita el análisis y estudios referidos a esta delimitación de colonias y otros asentamientos humanos, en temas geográficos, sociales, demográficos, económicos, culturales, históricos, políticos, entre otros.

Se encuentran en formatos digitales, cabe aclarar que aún no se cuenta con la cobertura a nivel nacional, pero se cuenta con Delimitaciones de colonias y otros asentamientos humanos y conjuntos de datos vectoriales con los que se tiene el aval del Ayuntamiento municipal.

Los archivos vectoriales se encuentran disponibles en formato Shape (.shp), los cuales pueden ser incorporados en sistemas de información geográfica (SIG). Mismo que se encuentran disponibles en la página oficial del INEGI

Asentamiento humano: Es el establecimiento de un conglomerado demográfico, con el conjunto de sus sistemas de convivencia, en un área físicamente localizada considerando dentro de la misma los elementos naturales y las obras materiales que lo integran. También es un componente de referencia del domicilio geográfico.

Delimitación de los asentamientos humanos

La delimitación o actualización de los asentamientos humanos conforman a las localidades amanzanadas de la siguiente manera:

  • Localidades con 50 000 habitantes o más y ciudades capitales.
  • Conglomerados de localidades contiguas.
  • Localidades cabeceras municipales.
  • El resto de las localidades urbanas.
  • El resto de las localidades rurales amanzanadas.

Integración del conjunto de datos vectoriales de la capa de asentamientos humanos

Conjunto de datos vectoriales de la capa de asentamientos humanos
Insituto Nacional de Estadística y Geografía
Campo Tipo Longuitud Descripción Contenido
CVEGEO Carácter 9 Clave geoestadística Compuesta por nueve caracteres; dos para la clave del AGEE, tres para la clave del AGEM y cuatro para la clave de localidad geoestadística
CVE_ENT Carácter 2 Clave de la entidad federativa {01, 02, …, 32}
CVE_MUN Carácter 3 Clave del municipio {001, 002, …, 999}
CVE_LOC Carácter 4 Clave de la localidad {0001, 0002, …, 9999}
CVE_ASEN Carácter 4 Clave del asentamiento humano {0001, 0002, …, 9999}
CP Carácter 5 Código postal {00000, …, 99999}
FECHA_ACT Carácter 7 Fecha de actualización MM/AAAA
INSTITUCION Carácter 254 Institución que da el visto bueno Tipo Texto
NOM_ASEN Carácter 254 Nombre del asentamiento humano Tipo Texto
TIPO Carácter 50 Tió de asentamiento humano Conforme al Anexo
Fuente: INEGI. Delimitación de colonias y otros asentamientos humanos, 2024

Shapefile

La función readOGR del paquete rgdal, extrae automáticamente la información utilizada por otros paquetes SIG de código abierto como QGIS y permite a R manejar una gama más amplia de formatos de datos espaciales. Esta función lee datos OGR y datos vectoriales, pero solamente permite manejar capas con características geométricas (no mezcla puntos, líneas o polígonos en una sola capa) y a su vez establecerá un sistema de referencia espacial si la capa tiene dichos metadatos.
Para leer un archivo shapefile, se establecen los siguientes argumentos, como dsn, en donde se indica el directorio que contiene los shapes y layer que es el nombre explícito de la capa a trabajar y dichas capas deben de ir sin la extensión .shp.

A continuación, se lee el archivo .shp que contiene de manera integrada la división de el área geoestadística de asentamientos as.

shape_asentamientos <- readOGR(dsn ="D:/Colonias y Asentamientos/DCAH 2024/conjunto_de_datos", 
                               layer = "00as",
                                encoding = "UTF-8",
                                 use_iconv = TRUE)

shape_asentamientos <- shape_asentamientos %>% 
                        spTransform(., CRS('+proj=longlat +ellps=WGS84 +datum=WGS84 +no_defs'))

Marco Geoestadístico Nacional

El Instituto Nacional de Estadística, Geografía e Informática (INEGI) tiene puestos a disposición del público los shapefiles con los distintos niveles de información geográfica. Estos archivos digitales se encuentran disponibles en el Marco Geoestadístico Nacional (MGN), el cual es un sistema único y se presenta la división del territorio nacional en diferentes niveles de desagregación para referir geográficamente la información estadística de los censos y encuestas. Se integra al Sistema Nacional de Información Estadística y Geográfica (SNIEG).

Este producto integra información vectorial, tablas de atributos y catálogos. Muestra la división geoestadística del territorio nacional en sucesivos niveles del territorio. Esta división está dada por los llamados límites estadísticos, que pueden coincidir con los límites político-administrativos oficiales, los cuales tienen sustento legal.

A continuación, se lee el archivo .shp que contiene de manera integrada la división de el área geoestadística municipal agem.

shape_estados <- readOGR(dsn ="D:/MGN/MGN 2024/conjunto_de_datos", 
                             layer = "00ent",
                              encoding = "UTF-8",
                               use_iconv = TRUE) 

shape_estados <- shape_estados %>% 
                  spTransform(., CRS('+proj=longlat +ellps=WGS84 +datum=WGS84 +no_defs'))
shape_municipios <- readOGR(dsn ="D:/MGN/MGN 2024/conjunto_de_datos", 
                             layer = "00mun",
                              encoding = "UTF-8",
                               use_iconv = TRUE)

shape_municipios <- shape_municipios %>% 
                     spTransform(., CRS('+proj=longlat +ellps=WGS84 +datum=WGS84 +no_defs'))

Delimitación de colonias y otros asentamientos humanos (DCAH)

Se usa ggplot2 y otros paquetes para visualizar shapefiles geoespaciales y se exportan la figura como un PDF.

  • RColorBrewer: Paletas de colores.

  • ggspatial: Herramientas para mapas en ggplot2.

  • ggpubr: Funciones adicionales para ggplot2, como exportar gráficos.

# Paleta de colores 
require(RColorBrewer)
require(ggspatial)
require(ggpubr)

p <- ggplot() + 
      layer_spatial(shape_asentamientos, aes(fill = CVE_ENT), color = "transparent") +
       layer_spatial(shape_estados, fill = "transparent", color = "black") + 
        theme_bw() + 
         theme(plot.title = element_text(size = 22, hjust = 0.15, family = "Montserrat", face = "bold"),
               plot.caption = element_text(size = 11, hjust = 0.2, vjust = 1, family = "Montserrat"), 
               legend.key.size = unit(0.5, "cm"),
               legend.text = element_text(size = 12, family = "Montserrat"), 
               legend.title = element_text(size = 10, hjust = 0.5, family = "Montserrat", face = "bold"),
               legend.position = "none"
               ) + 
          scale_fill_viridis_d(option = "A", begin = 0.3, end = 1) +
           scale_color_viridis_d(option = "A", begin = 0.3, end = 1) +
            guides(color = 'none') +
     labs(title = "Delimitación de colonias y otros asentamientos humanos (DCAH)",
          fill = "",
          color = "",
          caption = expression(paste("Fuente: INEGI. Delimitación de colonias y otros asentamientos humanos, 2024")))
p
path = "Output/Delmitación de colonias.pdf"
ggexport(p, filename = path ,width = 10, height = 10, device = "cairo")

Ciudad de México

Dado que a nivel nacional la delimitación de colonias no es representativo. Se usa las librerías osmdata y sf para descargar y guardar datos de las vías de la Ciudad de México desde OpenStreetMap (OSM).

  • osmdata: Permite obtener datos de OpenStreetMap.
  • sf: Manejo de datos espaciales en formato sf (Simple Features).

Se obtiene las vías de OpenStreetMap. Utilizando la función opq(city), crea una consulta para la Ciudad de México en OSM.

OpenStreetMap

library(osmdata)
library(sf)

# Se establece Ciudad de México como el área de consulta.
city <- "Ciudad de México"

# Se obtienen datos de vías de OpenStreetMap  
viasosm <- opq(city) %>% ## Se crea una consulta para la Ciudad de México en OSM.
            add_osm_feature(key = "highway") %>% ## Filtra las entidades relacionadas con carreteras/calles.
             osmdata_sf() ##Se descarga los datos en formato sf.

#saveRDS(viasosm, file = paste0(here::here(), "/Output/viasosm_cdmx.RDS")) 
readRDS(file = paste0(here::here(), "/Output/viasosm_cdmx.RDS")) 

# Se extraen las líneas de las vías de OSM
viasosm_sf <- viasosm$osm_lines

# Se define el sistema de referencia espacial (CRS)
st_crs(viasosm_sf) <- 4326 ## sistema de coordenadas EPSG:4326

# Se filtra la Ciudad de México en shape_estados
cdmx <- shape_estados %>% 
         filter(CVEGEO %in% "09") 

# Transformar CRS a EPSG:4326 si no está en ese sistema
cdmx <- spTransform(cdmx, CRS("+init=epsg:4326")) 

#st_crs(viasosm_sf)  # Debe ser EPSG:4326
#st_crs(cdmx)        # Debe ser EPSG:4326 

# Se filtran solo las calles principales 
cdmx_sf <- st_as_sf(cdmx) ## Se convierte cdmx en formato sf

# Se recorta las calles dentro de la Ciudad de México
viasosm_sf <-viasosm_sf |> 
              st_intersection(cdmx_sf) 

# Se filtra solo calles principales
viasosm_sf <- viasosm_sf %>% 
               filter(highway %in% c("primary", "secondary", "tertiary"))
# Límites 
limites <- shape_estados %>%
            filter(CVEGEO %in% "09") %>% 
             bbox()

#paleta <- colorRampPalette(pals::kovesi.linear_bmw_5_95_c86(10))(5)
paleta <- c("#00024B", "#190ED1", "#FEEBFE", "#FC81FD", "#B621FE")

p <- ggplot() +
      layer_spatial(shape_asentamientos %>% filter(CVE_ENT %in% "09"), 
                    aes(fill = TIPO, color = "LINE1", linetype = "LINE1"),
                    linewidth = 0.005) + 
       layer_spatial(shape_municipios %>% filter(CVE_ENT %in% "09"), 
                     aes(color = "LINE2", linetype = "LINE2"), 
                     fill = "transparent",
                     linewidth = 0.5) + 
        layer_spatial(shape_estados %>% filter(CVE_ENT %in% "09"), 
                      aes(color = "LINE3", linetype = "LINE3"), 
                      fill = "transparent",
                      linewidth = 1) + 
         geom_sf(data = recorteviasosm_sf, fill = NA, linewidth = 0.2) +
          theme_bw() + 
           theme(plot.title = element_text(size = 22, hjust = 0.15, family = "Montserrat", face = "bold"),
                 plot.subtitle = element_text(size = 16, hjust = 0.15, family = "Montserrat", face = "bold"),
                 plot.caption = element_text(size = 11, hjust = 0.2, vjust = 1, family = "Montserrat"),
                 axis.text = element_text(family = "Montserrat"), 
                 legend.key.size = unit(0.5, "cm"),
                 legend.text = element_text(size = 10, family = "Montserrat"), 
                 legend.title = element_text(size = 12, hjust = 0.5, family = "Montserrat", face = "bold"),
                 legend.position = "right") + 
            scale_fill_manual(labels=c("Aeropuerto", "Barrio", "Colonia", "Pueblo", "Zona Federal"),
                              values = paleta) +
             scale_color_manual(values = c("LINE1" = "white", "LINE2" = "lightgrey", "LINE3" = "black")) +
              scale_linetype_manual(labels = c("Colonias", "Alcaldias", "Estado"),
                                    values = c("LINE1" = "solid", "LINE2" = "solid", "LINE3" = "solid")) +
               coord_sf(xlim = c(limites['x', 'min'], limites['x', 'max']),
                        ylim = c(limites['y', 'min'], limites['y', 'max'])) + 
                guides(color =  'none',
                       linetype = guide_legend(override.aes = list(fill = NA, 
                                                                   size = 1, 
                                                                   linetype = c(1, 1, 1)))) +
                 labs(title = "Colonias de la Ciudad de México", 
                      subtitle = "Delimitación de colonias y otros asentamientos humanos (DCAH)",
                      fill = "TIPO",
                      linetype = "Delimitación",
                      caption = expression(paste("Fuente: INEGI. Delimitación de colonias y otros asentamientos humanos, 2024")))
      
p

#path = "Output/CDMX_OSM.pdf"
#ggexport(p, filename = path ,width = 10, height = 10, device = "cairo")

Leaflet

Título

Se define el estilo y el contenido de un título para un mapa Leaflet utilizando HTML y CSS dentro de R.

  • tags$style(HTML("...")): Esta función permite incluir estilos CSS en el documento.
  • .leaflet-control.map-title: Define una clase CSS que se aplicará al título del mapa.
  • tags$div(...): Crea un contenedor div en el cual se coloca el título del mapa.
  • tag.map.title: Aplica los estilos definidos anteriormente a este contenedor div.
# Estructura del título
tag.map.title <- tags$style(HTML("
  .leaflet-control.map-title { 
    transform: translate(-50%,20%);
    position: fixed !important;
    left: 50%;
    text-align: center;
    padding-left: 10px; 
    padding-right: 10px; 
    background: rgba(255,255,255,0.75);
    font-weight: bold;
    font-size: 28px;
  }
 ")) 

# Nota de página
title <- tags$div(
  tag.map.title, HTML("Fuente: INEGI. Delimitación de colonias y otros asentamientos humanos, 2024")
)  

Límites del mapa

Se calcula el cuadro delimitador que contiene las coordenadas de los límitesde un objeto espacial utilizando la función st_bbox() de la librería sf.

  • xmin: La coordenada mínima en el eje x (longitud mínima).
  • ymin: La coordenada mínima en el eje y (latitud mínima).
  • xmax: La coordenada máxima en el eje x (longitud máxima).
  • ymax: La coordenada máxima en el eje y (latitud máxima).
bounding_box <- st_bbox(shape_estados %>% filter(CVE_ENT %in% "09"))
bounding_box
paleta <- colorRampPalette(pals::kovesi.linear_bmw_5_95_c86(10))(5)
paleta <- c("#FEEBFE", "#FC81FD", "#B621FE", "#190ED1", "#00024B")

mypalette <- leaflet::colorFactor(palette = paleta, 
                                  domain = forcats::fct_relevel(shape_asentamientos@data$TIPO,
                                                                c("Aeropuerto", "Barrio", "Colonia", "Pueblo", "Zona Federal")),
                                  na.color = "transparent")

map <- leaflet(options = leafletOptions(minZoom = 7, maxZoom = 15, zoomControl = FALSE)) %>%
        addMapPane("estados", zIndex = 430) %>% # shown above ames_lines  
         addMapPane("layer1", zIndex = 420) %>% # shown below
          addMapPane("layer2", zIndex = 420) %>% # shown below
           addTiles() %>% 
            setView(lat = 19.355, lng = -99.2, zoom = 10) %>%
             setMaxBounds(lng1 = bounding_box[1],
                          lat1 = bounding_box[2],
                          lng2 = bounding_box[3],
                          lat2 = bounding_box[4]) %>%
             addProviderTiles(providers$OpenStreetMap, 
                              options = providerTileOptions(minZoom = 5, maxZoom = 5)) %>%
              addPolygons(data = shape_estados %>% filter(CVE_ENT %in% "09"),
                          fill = NA,
                          stroke = TRUE, # Dibujar los bordes del polígono
                          weight = 1.5,  # line thickness
                          dashArray = "1",
                          opacity = 1,
                          color = "black",  # line colour 
                          highlight = highlightOptions(weight = 2,
                                                       color = "red", # Color de selección
                                                       dashArray = "",
                                                       fillOpacity = 0.6,
                                                       bringToFront = TRUE),
                          options = pathOptions(pane = "layer1")) %>%
               addPolygons(data = shape_municipios %>% filter(CVE_ENT %in% "09"),
                           fill = NA,
                           popup = ~NOMGEO,
                           stroke = TRUE, # Dibujar los bordes del polígono
                           weight = 1,  # line thickness
                           dashArray = "1",
                           opacity = 1,
                           color = "grey",  # line colour 
                           highlight = highlightOptions(weight = 2,
                                                        color = "red", # Color de selección
                                                        dashArray = "",
                                                        fillOpacity = 0.6,
                                                        bringToFront = TRUE),
                           options = pathOptions(pane = "layer2")) %>%
               addPolygons(data = shape_asentamientos %>% filter(CVE_ENT %in% "09"),
                           fillColor = ~mypalette(TIPO),
                           fillOpacity = 0.6,
                           stroke = TRUE, # Dibujar los bordes del polígono
                           popup = ~NOM_ASEN,
                           weight = 0.005,  # line thicknes
                           dashArray = "1",
                           opacity = 1,
                           color = "black",  # line colour 
                           highlight = highlightOptions(weight = 2,
                                                        color = "red", # Color de selección
                                                        dashArray = "",
                                                        fillOpacity = 0.6,
                                                        bringToFront = TRUE),
                           options = pathOptions(pane = "layer1"))  %>%
                addControl(title, position = "bottomright") %>%
                 addLegend("bottomright", 
                           colors = paleta, 
                           labels = c("Aeropuerto", "Barrio", "Colonia", "Pueblo", "Zona Federal"),
                           values = ~forcats::fct_relevel(shape_asentamientos@data$TIPO, c("Aeropueto", "Barrio", "Colonia", "Pueblo", "Zona Federal")),
                           title = stringr::str_wrap("Tipo", 15), opacity = 0.7) 

map

Áreas de los polígonos

Se cálcula área en m² y se agrega al data.frame

require(rgeos)
#Nivel estatal 
shape_estados@data$area_m2 <- gArea(shape_estados, byid = TRUE) 

#Nivel municipal
shape_municipios@data$area_m2 <- gArea(shape_municipios, byid = TRUE) 

#Nivel asentamientos
shape_asentamientos@data$area_m2 <- gArea(shape_asentamientos, byid = TRUE) 

Se convierten en \(Km^2\)

#Nivel estatal 
shape_estados <- shape_estados %>% 
                  mutate(area_km2 = .$area_m2 / 1e6)

#Nivel municipal
shape_municipios <- shape_municipios %>% 
                     mutate(area_km2 = .$area_m2 / 1e6)

#Nivel Asentamientos
shape_asentamientos <- shape_asentamientos %>% 
                        mutate(area_km2 = .$area_m2 / 1e6)

Librerías

Librerías que se usaron en el trabajo

sesion_info <- devtools::session_info()
package loadedversion source
dplyr 1.1.3 CRAN (R 4.3.2)
extrafont 0.19 CRAN (R 4.3.0)
ggplot2 3.4.3 CRAN (R 4.3.1)
ggpubr 0.6.0 CRAN (R 4.3.1)
ggspatial 1.1.9 CRAN (R 4.3.2)
gt 0.10.0 CRAN (R 4.3.1)
htmltools 0.5.8.9000 Github ()
htmlwidgets 1.6.4 CRAN (R 4.3.3)
kableExtra 1.3.4 CRAN (R 4.3.1)
knitr 1.45 CRAN (R 4.3.2)
leafgl 0.1.1 CRAN (R 4.3.1)
leaflet 2.2.2 CRAN (R 4.3.3)
leaflet.extras 1.0.0 CRAN (R 4.3.1)
leaflet.providers 2.0.0 CRAN (R 4.3.3)
mapview 2.11.0 CRAN (R 4.3.1)
openxlsx 4.2.5.2 CRAN (R 4.3.1)
RColorBrewer 1.1-3 CRAN (R 4.3.0)
readxl 1.4.3 CRAN (R 4.3.1)
rgdal 1.6-7 CRAN (R 4.3.1)
sf 1.0-16 CRAN (R 4.3.3)
showtext 0.9-6 CRAN (R 4.3.1)
showtextdb 3.0 CRAN (R 4.3.1)
sp 2.2-0 CRAN (R 4.3.3)
spData 2.3.1 CRAN (R 4.3.3)
spdep 1.3-5 CRAN (R 4.3.3)
spdplyr 0.4.0 Github ()
sysfonts 0.8.8 CRAN (R 4.3.1)
unikn 0.9.0 CRAN (R 4.3.1)

Creative Commons Licence
This work by Diana Villasana Ocampo is licensed under a Creative Commons Attribution 4.0 International License.