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.
# 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+"))
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)
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.
# 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.
# 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.
# 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.
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.