0. Introducción al análisis espacial

El presente estudio utilizó técnicas de análisis espacial para evaluar los patrones de movilidad urbana en el municipio de Santiago de Cali, a partir de una encuesta de origen y destino. Mediante la vinculación de datos tabulados con información geográfica vectorial de las comunas de la ciudad, se generaron mapas catastrales y temáticos que permiten identificar zonas generadoras y receptoras de viajes, así como la distribución espacial según el tipo de vehículo utilizado.

1. Carga y limpieza de datos

# Cargar datos
origen_destino <-read_excel("C:/Users/User/Documents/Erika/U/Segundo/SIG/Unidad 1/Casos/EncuestaOrigenDestino.xlsx", sheet = "Hoja1") %>% clean_names()
comunas <- st_read("C:/Users/User/Documents/Erika/U/Segundo/SIG/Unidad 1/Casos/cali/Comunas.shp")
## Reading layer `Comunas' from data source 
##   `C:\Users\User\Documents\Erika\U\Segundo\SIG\Unidad 1\Casos\cali\Comunas.shp' 
##   using driver `ESRI Shapefile'
## Simple feature collection with 22 features and 4 fields
## Geometry type: POLYGON
## Dimension:     XY
## Bounding box:  xmin: 1053868 ymin: 860190.2 xmax: 1068492 ymax: 879441.5
## Projected CRS: MAGNA_Colombia_Cali
# Revisar datos faltantes
summary(origen_destino)
##      fecha                         id_estacion     estacion        
##  Min.   :2015-05-04 00:00:00.00   Min.   : 1.0   Length:35054      
##  1st Qu.:2015-05-25 00:00:00.00   1st Qu.: 9.0   Class :character  
##  Median :2015-05-28 00:00:00.00   Median :14.0   Mode  :character  
##  Mean   :2015-05-28 16:56:47.95   Mean   :14.7                     
##  3rd Qu.:2015-06-03 00:00:00.00   3rd Qu.:22.0                     
##  Max.   :2015-06-09 00:00:00.00   Max.   :30.0                     
##                                                                    
##     acceso           movimiento        hora_de_encuesta                
##  Length:35054       Length:35054       Min.   :1899-12-31 00:00:00.00  
##  Class :character   Class :character   1st Qu.:1899-12-31 07:36:00.00  
##  Mode  :character   Mode  :character   Median :1899-12-31 09:07:00.00  
##                                        Mean   :1899-12-31 09:06:10.05  
##                                        3rd Qu.:1899-12-31 10:39:00.00  
##                                        Max.   :1899-12-31 12:29:00.00  
##                                                                        
##  municipio_7       
##  Length:35054      
##  Class :character  
##  Mode  :character  
##                    
##                    
##                    
##                    
##  departamento_localidad_comuna_distrito_barrio_vereda_hito_direccion_8
##  Length:35054                                                         
##  Class :character                                                     
##  Mode  :character                                                     
##                                                                       
##                                                                       
##                                                                       
##                                                                       
##  codigo_origen_sdg  que_estaba_haciendo_en_ese_lugar municipio_11      
##  Length:35054       Min.   : 1.000                   Length:35054      
##  Class :character   1st Qu.: 2.000                   Class :character  
##  Mode  :character   Median : 6.000                   Mode  :character  
##                     Mean   : 5.561                                     
##                     3rd Qu.: 6.000                                     
##                     Max.   :77.000                                     
##                     NA's   :383                                        
##  departamento_localidad_comuna_distrito_barrio_vereda_hito_direccion_12
##  Length:35054                                                          
##  Class :character                                                      
##  Mode  :character                                                      
##                                                                        
##                                                                        
##                                                                        
##                                                                        
##  codigo_destino_sdg que_va_hacer_a_ese_lugar estrato_en_su_vivienda
##  Length:35054       Min.   : 1.000           Min.   :1.000         
##  Class :character   1st Qu.: 1.000           1st Qu.:2.000         
##  Mode  :character   Median : 2.000           Median :3.000         
##                     Mean   : 4.682           Mean   :2.835         
##                     3rd Qu.: 6.000           3rd Qu.:3.000         
##                     Max.   :77.000           Max.   :6.000         
##                     NA's   :154              NA's   :1231          
##  disponia_de_un_vehiculo_para_realizar_este_desplazamiento otro_cual_17  
##  Min.   :0.000                                             Mode:logical  
##  1st Qu.:0.000                                             NA's:35054    
##  Median :0.000                                                           
##  Mean   :0.247                                                           
##  3rd Qu.:0.000                                                           
##  Max.   :5.000                                                           
##  NA's   :18189                                                           
##      antes       despues             edad            sexo      
##  Min.   : 1.00   Mode:logical   Min.   :12.00   Min.   :1.000  
##  1st Qu.: 2.00   TRUE:53        1st Qu.:29.00   1st Qu.:2.000  
##  Median : 3.00   NA's:35001     Median :37.00   Median :2.000  
##  Mean   : 3.78                  Mean   :38.02   Mean   :1.795  
##  3rd Qu.: 4.00                  3rd Qu.:45.00   3rd Qu.:2.000  
##  Max.   :18.00                  Max.   :91.00   Max.   :2.000  
##  NA's   :34919                  NA's   :479     NA's   :731    
##  personas_en_el_vehiculo tipo_de_vehiculo otro_cual_24   tipo_de_viajero   
##  Min.   : 1.000          Min.   : 1.000   Mode:logical   Length:35054      
##  1st Qu.: 1.000          1st Qu.: 2.000   NA's:35054     Class :character  
##  Median : 1.000          Median : 2.000                  Mode  :character  
##  Mean   : 1.677          Mean   : 2.786                                    
##  3rd Qu.: 2.000          3rd Qu.: 3.000                                    
##  Max.   :76.000          Max.   :77.000                                    
##  NA's   :118             NA's   :115                                       
##  comuna_origen      comuna_destino     intracomuna       
##  Length:35054       Length:35054       Length:35054      
##  Class :character   Class :character   Class :character  
##  Mode  :character   Mode  :character   Mode  :character  
##                                                          
##                                                          
##                                                          
## 
# Asegurar tipos de columnas y limpieza de ceros
origen_destino <- origen_destino %>%
  mutate(
    comuna_origen = str_remove_all(as.character(comuna_origen), "^0+"),
    comuna_destino = str_remove_all(as.character(comuna_destino), "^0+"),
    tipo_de_vehiculo = as.character(tipo_de_vehiculo)
  ) %>%
  mutate(across(c(comuna_origen, comuna_destino, tipo_de_vehiculo), ~replace_na(., "No especificado")))

comunas <- comunas %>%
  mutate(COMUNA = str_remove_all(as.character(comuna), "^0+"))

2. Mapa base de comunas de Cali

Mapa cartográfico con nombre de comuna

class(comunas)
## [1] "sf"         "data.frame"
mapview(comunas)
tm_shape(comunas) +
  tm_polygons(border.col = "black", lwd = 1, fill_alpha = 0.4) +
  tm_text("COMUNA", size = 0.8, col = "black",
          options = opt_tm_text(point.label = TRUE, shadow = TRUE)) +
  tm_title("Mapa Cartografico del Municipio de Cali (por Comunas)") +  
  tm_layout(frame = FALSE, legend.outside = TRUE)

3. Mapa catastral: viajes por comuna de origen (general)

origen_general <- origen_destino %>%
  count(comuna_origen, name = "viajes") %>%
  mutate(comuna_origen = as.character(comuna_origen))

comunas_origen <- comunas %>%
  mutate(comuna = as.character(comuna)) %>%
  left_join(origen_general, by = c("comuna" = "comuna_origen"))


tmap_mode("plot")

tm_shape(comunas_origen) +
  tm_polygons(
    fill = "viajes",
    fill.scale = tm_scale_intervals(style = "quantile", values = "viridis"),
    fill.legend = tm_legend(title = "Numero de viajes")    ) +
  tm_title("Mapa Catastral: Comuna de Origen (General)")

En esta mapa se reveló que ciertas comunas actúan como zonas generadoras de una proporción significativa de los desplazamientos urbanos. Estas comunas se caracterizan por una alta densidad residencial, presencia de nodos de conectividad (como estaciones de transporte masivo), o condiciones socioeconómicas que favorecen la movilidad cotidiana. Este patrón es consistente con el modelo de ciudad radial, donde los flujos se originan en la periferia hacia centros urbanos consolidados.

4. Mapa temático: viajes por tipo de vehículo y comuna de origen

# Leer datos de viajes
origen_destino <- origen_destino %>%
  rename(
    tipo_de_vehiculo = `tipo_de_vehiculo`,
    comuna_origen = `comuna_origen`,
    comuna_destino = `comuna_destino`
  ) %>%
  filter(!is.na(comuna_origen), !is.na(comuna_destino), !is.na(tipo_de_vehiculo))

# Normalizar comunas (convertir a número si es posible)
origen_destino <- origen_destino %>%
  mutate(
    comuna_origen = as.character(comuna_origen),
    comuna_destino = as.character(comuna_destino),
    tipo_de_vehiculo = as.integer(tipo_de_vehiculo)
  )


# Supuestos basados en los datos
vehiculos <- c("Bicicleta" = 1, "Moto" = 2, "Automovil" = 3)


generar_mapa <- function(data, comuna_col, tipo, titulo) {
  conteo <- data %>%
    filter(tipo_de_vehiculo == vehiculos[[(tipo)]]) %>%
    count(!!sym(comuna_col)) %>%
    rename(comuna = !!sym(comuna_col), origen_destino = n) %>%
    mutate(comuna = as.character(comuna))


  mapa_df <- comunas %>%
  mutate(comuna = as.character(comuna)) %>%
  left_join(conteo, by = "comuna") %>%
  mutate(origen_destino = ifelse(is.na(origen_destino), 0, origen_destino))

# Asegurar que siga siendo objeto sf
mapa_df <- st_as_sf(mapa_df)

  # Graficar
  ggplot(mapa_df) +
    geom_sf(aes(fill = origen_destino), color = "white") +
    scale_fill_viridis_c(option = "plasma", trans = "sqrt") +
    theme_minimal() +
    labs(
      title = titulo,
      fill = "Numero de Viajes"
    )
}

tipos <- c("Bicicleta", "Moto", "Automovil")

# Origen
mapas_origen <- lapply(tipos, function(t) {
  generar_mapa(origen_destino, "comuna_origen", t, paste("Viajes desde comuna -", t))
})

mapas_origen[[1]]

mapas_origen[[2]]

mapas_origen[[3]]

Al desagregar la información por modo de transporte, se observaron diferencias significativas en los patrones espaciales:

Bicicleta: Los viajes en bicicleta se concentran en comunas cercanas al centro de la ciudad, lo cual sugiere desplazamientos de corta distancia y una posible respuesta a condiciones de congestión vehicular. Además, podría indicar la existencia de infraestructura ciclística, o una adopción modal promovida por políticas públicas de movilidad sostenible.

Moto: Se registró una mayor dispersión de viajes originados en motocicleta, principalmente desde comunas periféricas. Esto se alinea con estudios previos que indican que la moto es un modo preferido en zonas con menor cobertura de transporte público, dadas su accesibilidad económica y flexibilidad de ruta.

Automóvil: Los viajes en automóvil tienden a originarse en comunas de estrato medio-alto, reflejando una distribución modal vinculada a ingresos, disponibilidad vehicular y patrones urbanos de segregación espacial.

5. Mapa catastral: viajes por comuna de destino (general)

# Calcular el total de viajes por comuna de destino
destino_general <- origen_destino %>%
  count(comuna_destino, name = "viajes") %>%
  mutate(comuna_destino = as.character(comuna_destino))

# Unir con geometría de comunas
comunas_destino <- comunas %>%
  mutate(comuna = as.character(comuna)) %>%
  left_join(destino_general, by = c("comuna" = "comuna_destino"))


ggplot(comunas_destino) +
  geom_sf(aes(fill = viajes), color = "white") +
  scale_fill_viridis_c(option = "quantile") +
  labs(title = "Viajes por Comuna de Destino (General)", fill = "Viajes") +
  theme_classic() 

El análisis de destinos mostró una fuerte concentración de viajes hacia comunas centrales y nodales, donde se encuentran ubicadas instituciones gubernamentales, centros educativos, parques tecnológicos, clínicas y zonas comerciales. Estas comunas, al actuar como atractoras de viajes, presentan retos en términos de accesibilidad, congestión y gestión del espacio público.

6. Mapa temático: viajes por tipo de vehículo y comuna de destino

# Destino
mapas_destino <- lapply(tipos, function(t) {
  generar_mapa(origen_destino, "comuna_destino", t, paste("Viajes hacia comuna -", t))
})

mapas_destino[[1]]

mapas_destino[[2]]

mapas_destino[[3]]

Los mapas de destino por tipo de vehículo permitieron identificar:

Bicicleta: Destinos predominantemente cercanos al origen, lo que reafirma el uso de este modo en distancias cortas. Se destaca la necesidad de continuidad en la red ciclorruta y seguridad vial.

Moto: Patrón más uniforme, con destino hacia múltiples comunas, tanto centrales como periféricas. Este comportamiento sugiere que la moto cumple una función de conectividad transversal que no depende estrictamente del eje centro-periferia.

Automóvil: Concentración hacia centros económicos y administrativos. Este patrón incrementa la presión sobre la infraestructura vial y el estacionamiento, demandando estrategias de gestión de demanda de viajes.

7. Conclusiones

El uso de herramientas GIS fue fundamental para integrar la base de datos tabular con información geoespacial. La aplicación de ggplot2, sf y tmap permitió no solo la visualización efectiva de patrones complejos, sino también la generación de insights reproducibles para la toma de decisiones.

Patrones definidos: La ciudad de Cali presenta patrones de movilidad claramente segmentados por tipo de vehículo, lo que debe ser considerado en la planificación multimodal.

Planificación focalizada: Las comunas con mayor carga de viajes, ya sea como origen o destino, requieren intervenciones diferenciadas en infraestructura, control del tráfico y servicios complementarios.

Enfoque multimodal: El fomento al uso de bicicleta y otros modos sostenibles debe ir acompañado de intervenciones en infraestructura, seguridad y cultura ciudadana.