---
title: "Infraestructura de Transporte en el Perú"
output: rmarkdown::html_vignette
vignette: >
  %\VignetteIndexEntry{Infraestructura de Transporte en el Perú}
  %\VignetteEngine{knitr::rmarkdown}
  %\VignetteEncoding{UTF-8}
---
```{r, include = FALSE}
knitr::opts_chunk$set(
  collapse = TRUE,
  comment = "#>",
  fig.width = 8,
  fig.height = 6,
  warning = FALSE,
  message = FALSE
)
```

## Introducción

El paquete `rsdot` proporciona acceso a datos de infraestructura de transporte del Perú a través del [Visor SDOT](https://geosdot.servicios.gob.pe/geoportal/). Esta viñeta muestra cómo acceder y analizar información sobre:

- **Red Vial Nacional**: Carreteras principales que conectan el país
- **Red Vial Departamental**: Vías que conectan provincias dentro de cada departamento
- **Red Vial Vecinal**: Carreteras rurales que conectan centros poblados menores
- **Aeródromos**: Aeropuertos, aeródromos y helipuertos

Todos los datos provienen de PROVÍAS NACIONAL y PROVÍAS DESCENTRALIZADO, actualizados a julio 2022 según el Clasificador de Rutas (DS 011-2016-MTC).

```{r setup}
library(rsdot)
library(sf)
library(dplyr)
library(ggplot2)
```

## Red Vial Nacional

La Red Vial Nacional comprende las principales carreteras que conectan el territorio peruano, incluyendo las longitudinales de la costa, sierra y selva, así como las carreteras transversales.

### Carga de datos

```{r red_nacional}
# Cargar red vial nacional de Cusco
vias_nac_cusco <- get_red_vial_nacional(departamento = "CUSCO")

# Ver estructura de los datos
head(vias_nac_cusco)
```

### Análisis básico

```{r analisis_nacional}
# Estadísticas generales
vias_nac_cusco |>
  st_drop_geometry() |>
  summarise(
    longitud_total_km = sum(longitud, na.rm = TRUE),
    n_rutas = n_distinct(codruta),
    n_tramos = n(),
    km_pavimentado = sum(longitud[superfic_l == "Pavimentado"], na.rm = TRUE),
    pct_pavimentado = (km_pavimentado / longitud_total_km) * 100
  )

# Análisis por eje de clasificación
vias_nac_cusco |>
  st_drop_geometry() |>
  group_by(ejeclas) |>
  summarise(
    longitud_km = sum(longitud, na.rm = TRUE),
    .groups = "drop"
  ) |>
  arrange(desc(longitud_km))
```

### Visualización
```{r viz_nacional}
# Mapa de red vial nacional por código de ruta
ggplot(vias_nac_cusco) +
  geom_sf(aes(color = codruta), linewidth = 1.2) +
  labs(
    title = "Red Vial Nacional - Departamento de Cusco",
    subtitle = "Códigos de Ruta",
    color = "Código",
    caption = "Fuente: PROVÍAS NACIONAL - MTC 2022"
  ) +
  theme_minimal() +
  theme(
    legend.position = "right",
    plot.title = element_text(face = "bold", size = 14),
    plot.subtitle = element_text(size = 11)
  )

# Mapa por estado de conservación
ggplot(vias_nac_cusco) +
  geom_sf(aes(color = estado_l, linewidth = estado_l)) +
  scale_color_manual(
    values = c(
      "Bueno" = "#2ecc71",
      "Regular" = "#f39c12",
      "Malo" = "#e74c3c"
    ),
    name = "Estado"
  ) +
  scale_linewidth_manual(
    values = c("Bueno" = 1.2, "Regular" = 0.9, "Malo" = 0.6),
    guide = "none"
  ) +
  labs(
    title = "Estado de Conservación - Red Vial Nacional",
    subtitle = "Cusco",
    caption = "Fuente: PROVÍAS NACIONAL - MTC 2022"
  ) +
  theme_minimal()
```

## Red Vial Departamental

Las carreteras departamentales conectan las capitales provinciales y centros poblados importantes dentro de cada departamento.

### Carga y análisis
```{r red_departamental}
# Cargar red vial departamental
vias_dep_cusco <- get_red_vial_departamental(departamento = "CUSCO")

# Análisis por provincia
analisis_prov <- vias_dep_cusco |>
  st_drop_geometry() |>
  group_by(nombprov) |>
  summarise(
    longitud_total = sum(longitud, na.rm = TRUE),
    n_rutas = n_distinct(codruta),
    km_pavimentado = sum(longitud[superfic_l == "PAVIMENTADO"], na.rm = TRUE),
    pct_pavimentado = (km_pavimentado / longitud_total) * 100,
    .groups = "drop"
  ) |>
  arrange(desc(longitud_total))

print(analisis_prov)
```

### Visualización por tipo de superficie
```{r viz_departamental}
# Mapa por tipo de superficie
ggplot(vias_dep_cusco) +
  geom_sf(aes(color = superfic_l), linewidth = 0.8) +
  scale_color_manual(
    values = c(
      "PAVIMENTADO" = "#3498db",
      "AFIRMADO" = "#27ae60",
      "SIN AFIRMAR" = "#e67e22",
      "TROCHA" = "#95a5a6"
    ),
    name = "Superficie"
  ) +
  labs(
    title = "Red Vial Departamental por Tipo de Superficie",
    subtitle = "Departamento de Cusco",
    caption = "Fuente: PROVÍAS NACIONAL - MTC 2022"
  ) +
  theme_minimal()
```

### Filtrado por provincia
```{r filtro_provincia}
# Cargar solo una provincia específica
vias_prov_cusco <- get_red_vial_departamental(
  departamento = "CUSCO",
  provincia = "CUSCO"
)

# Visualizar
ggplot(vias_prov_cusco) +
  geom_sf(aes(color = estado_l), linewidth = 1) +
  scale_color_manual(
    values = c("BUENO" = "darkgreen", "REGULAR" = "orange", "MALO" = "red")
  ) +
  labs(
    title = "Red Vial Departamental - Provincia de Cusco",
    color = "Estado"
  ) +
  theme_minimal()
```

## Red Vial Vecinal

La Red Vial Vecinal o Rural conecta centros poblados menores, caseríos y zonas de producción. Es administrada por los gobiernos locales.

### Características de la red vecinal

```{r red_vecinal}
# Cargar red vial vecinal
vias_vec_cusco <- get_red_vial_vecinal(departamento = "CUSCO")

# Análisis de superficie
vias_vec_cusco |>
  st_drop_geometry() |>
  group_by(superfic_l) |>
  summarise(
    longitud_km = sum(longitud, na.rm = TRUE),
    n_tramos = n(),
    porcentaje = (longitud_km / sum(vias_vec_cusco$longitud, na.rm = TRUE)) * 100,
    .groups = "drop"
  ) |>
  arrange(desc(longitud_km))

# Análisis de estado
vias_vec_cusco |>
  st_drop_geometry() |>
  group_by(estado_l) |>
  summarise(
    longitud_km = sum(longitud, na.rm = TRUE),
    porcentaje = (longitud_km / sum(vias_vec_cusco$longitud, na.rm = TRUE)) * 100,
    .groups = "drop"
  )
```

### Identificación de prioridades

```{r prioridades_vecinal}
# Identificar vías en mal estado por provincia
vias_mal_estado <- vias_vec_cusco |>
  filter(estado_l == "Malo") |>
  st_drop_geometry() |>
  group_by(nombprov) |>
  summarise(
    km_mal_estado = sum(longitud, na.rm = TRUE),
    n_vias = n(),
    .groups = "drop"
  ) |>
  arrange(desc(km_mal_estado))

print(vias_mal_estado)
```

### Visualización

```{r viz_vecinal}
# Mapa de red vecinal por estado
ggplot(vias_vec_cusco) +
  geom_sf(aes(color = estado_l), linewidth = 0.6, alpha = 0.7) +
  scale_color_manual(
    values = c(
      "Bueno" = "#27ae60",
      "Regular" = "#f39c12",
      "Malo" = "#c0392b"
    ),
    name = "Estado"
  ) +
  labs(
    title = "Red Vial Vecinal - Departamento de Cusco",
    subtitle = "Estado de Conservación",
    caption = "Fuente: PROVÍAS DESCENTRALIZADO - MTC 2022"
  ) +
  theme_minimal()
```

## Aeródromos

Los datos de aeródromos incluyen aeropuertos, aeródromos y helipuertos en todo el Perú.

### Carga y exploración

```{r aerodromos}
# Cargar aeródromos de Cusco
aero_cusco <- get_aerodromos(departamento = "CUSCO")

# Ver tipos de instalaciones
table(aero_cusco$tipo)

# Análisis por tipo y titularidad
aero_cusco |>
  st_drop_geometry() |>
  group_by(tipo, titular) |>
  summarise(n = n(), .groups = "drop") |>
  arrange(tipo, desc(n))
```

### Visualización
```{r viz_aerodromos}
# Mapa de aeródromos
ggplot(aero_cusco) +
  geom_sf(aes(color = tipo, shape = tipo), size = 4) +
  scale_color_manual(
    values = c(
      "AEROPUERTO INTERNACIONAL" = "#e74c3c",
      "AERODROMO" = "#3498db",
      "HELIPUERTO" = "#2ecc71"
    ),
    name = "Tipo"
  ) +
  scale_shape_manual(
    values = c(
      "AEROPUERTO INTERNACIONAL" = 17,
      "AERODROMO" = 16,
      "HELIPUERTO" = 15
    ),
    name = "Tipo"
  ) +
  labs(
    title = "Aeródromos del Departamento de Cusco",
    subtitle = "Actualizado 2022 - MTC",
    caption = "Fuente: MTC | Visor SDOT"
  ) +
  theme_minimal()

# Mapa con etiquetas
ggplot(aero_cusco) +
  geom_sf(aes(color = tipo), size = 3) +
  geom_sf_text(
    aes(label = nombre),
    size = 2.5,
    nudge_y = 0.1,
    check_overlap = TRUE
  ) +
  scale_color_brewer(palette = "Set1", name = "Tipo") +
  labs(
    title = "Aeródromos de Cusco con Nombres",
    caption = "Fuente: MTC 2022"
  ) +
  theme_minimal()
```

## Análisis Integrado

### Comparación entre redes viales

```{r comparacion_redes}
# Cargar las tres redes
vias_nacional <- get_red_vial_nacional(departamento = "CUSCO")
vias_departamental <- get_red_vial_departamental(departamento = "CUSCO")
vias_vecinal <- get_red_vial_vecinal(departamento = "CUSCO")

# Crear resumen comparativo
comparacion <- data.frame(
  Red = c("Nacional", "Departamental", "Vecinal"),
  Longitud_km = c(
    sum(vias_nacional$longitud, na.rm = TRUE),
    sum(vias_departamental$longitud, na.rm = TRUE),
    sum(vias_vecinal$longitud, na.rm = TRUE)
  ),
  N_tramos = c(
    nrow(vias_nacional),
    nrow(vias_departamental),
    nrow(vias_vecinal)
  )
)

comparacion <- comparacion |>
  mutate(
    Porcentaje = (Longitud_km / sum(Longitud_km)) * 100,
    Km_promedio_tramo = Longitud_km / N_tramos
  )

print(comparacion)
```

### Visualización comparativa

```{r viz_comparacion}
# Gráfico de barras comparativo
ggplot(comparacion, aes(x = Red, y = Longitud_km, fill = Red)) +
  geom_col() +
  geom_text(
    aes(label = paste0(round(Longitud_km, 0), " km\n",
                       round(Porcentaje, 1), "%")),
    vjust = -0.5,
    size = 3.5
  ) +
  scale_fill_manual(
    values = c(
      "Nacional" = "#e74c3c",
      "Departamental" = "#3498db",
      "Vecinal" = "#2ecc71"
    )
  ) +
  labs(
    title = "Comparación de Redes Viales en Cusco",
    subtitle = "Longitud total por tipo de red",
    x = "Tipo de Red Vial",
    y = "Longitud Total (km)",
    caption = "Fuente: PROVÍAS NACIONAL/DESCENTRALIZADO - MTC 2022"
  ) +
  theme_minimal() +
  theme(legend.position = "none")
```

### Mapa integrado de infraestructura

```{r mapa_integrado}
# Mapa con todas las redes y aeródromos
ggplot() +
  # Red Nacional (base)
  geom_sf(
    data = vias_nacional,
    aes(color = "Nacional"),
    linewidth = 1.2
  ) +
  # Red Departamental
  geom_sf(
    data = vias_departamental,
    aes(color = "Departamental"),
    linewidth = 0.8
  ) +
  # Red Vecinal
  geom_sf(
    data = vias_vecinal,
    aes(color = "Vecinal"),
    linewidth = 0.4,
    alpha = 0.5
  ) +
  # Aeródromos
  geom_sf(
    data = aero_cusco,
    aes(shape = tipo),
    size = 3,
    color = "black",
    fill = "yellow"
  ) +
  scale_color_manual(
    values = c(
      "Nacional" = "#e74c3c",
      "Departamental" = "#3498db",
      "Vecinal" = "#95a5a6"
    ),
    name = "Red Vial"
  ) +
  scale_shape_manual(
    values = c(
      "AEROPUERTO INTERNACIONAL" = 24,
      "AERODROMO" = 22,
      "HELIPUERTO" = 23
    ),
    name = "Aeródromo"
  ) +
  labs(
    title = "Infraestructura de Transporte - Departamento de Cusco",
    subtitle = "Redes Viales y Aeródromos",
    caption = "Fuente: PROVÍAS NACIONAL/DESCENTRALIZADO, MTC 2022"
  ) +
  theme_minimal() +
  theme(
    legend.position = "right",
    plot.title = element_text(face = "bold")
  )
```

## Análisis Multidepartamental

### Comparación entre departamentos del sur
```{r multi_departamento}
# Cargar red nacional de varios departamentos
vias_sur <- get_red_vial_nacional(
  departamento = c("PUNO", "APURIMAC")
)

# Análisis por departamento
resumen_sur <- vias_sur |>
  st_drop_geometry() |>
  group_by(nombdep) |>
  summarise(
    longitud_total = sum(longitud, na.rm = TRUE),
    n_rutas = n_distinct(codruta),
    km_pavimentado = sum(longitud[superfic_l == "Pavimentado"], na.rm = TRUE),
    pct_pavimentado = (km_pavimentado / longitud_total) * 100,
    km_buen_estado = sum(longitud[estado_l == "Bueno"], na.rm = TRUE),
    pct_buen_estado = (km_buen_estado / longitud_total) * 100,
    .groups = "drop"
  ) |>
  arrange(desc(longitud_total))

print(resumen_sur)
```

### Visualización regional
```{r viz_regional}
# Mapa regional
ggplot(vias_sur) +
  geom_sf(aes(color = nombdep), linewidth = 1) +
  scale_color_brewer(palette = "Set1", name = "Departamento") +
  labs(
    title = "Red Vial Nacional - Región Sur del Perú",
    subtitle = "Puno y Apurímac",
    caption = "Fuente: PROVÍAS NACIONAL - MTC 2022"
  ) +
  theme_minimal()

# Gráfico comparativo de estado
vias_sur |>
  st_drop_geometry() |>
  group_by(nombdep, estado_l) |>
  summarise(km = sum(longitud, na.rm = TRUE), .groups = "drop") |>
  ggplot(aes(x = nombdep, y = km, fill = estado_l)) +
  geom_col(position = "fill") +
  scale_fill_manual(
    values = c("Bueno" = "#2ecc71", "Regular" = "#f39c12", "Malo" = "#e74c3c"),
    name = "Estado"
  ) +
  scale_y_continuous(labels = scales::percent) +
  labs(
    title = "Proporción de Estado de Vías por Departamento",
    subtitle = "Red Vial Nacional - Sur del Perú",
    x = "Departamento",
    y = "Porcentaje",
    caption = "Fuente: PROVÍAS NACIONAL"
  ) +
  theme_minimal() +
  theme(axis.text.x = element_text(angle = 45, hjust = 1))
```

## Análisis de Accesibilidad

### Conectividad aérea

```{r conectividad_aerea}
# Cargar aeródromos de múltiples departamentos
aero_sur <- get_aerodromos(
  departamento = c("PUNO", "AREQUIPA", "APURIMAC")
)

# Resumen por departamento
aero_sur |>
  st_drop_geometry() |>
  group_by(nombdep, tipo) |>
  summarise(n = n(), .groups = "drop") |>
  tidyr::pivot_wider(names_from = tipo, values_from = n, values_fill = 0)

# Aeródromos operativos públicos
aero_publicos <- aero_sur |>
  filter(titular == "PUBLICA", estado == "OPERATIVO")

nrow(aero_publicos)
```

## Casos de Uso Prácticos

### Caso 1: Planificación de rutas

```{r caso_ruta}
# Identificar la ruta principal entre Cusco y Lima
# PE-3S es la carretera principal

ruta_principal <- vias_nacional |>
  filter(codruta == "PE-3S")

# Análisis de la ruta
ruta_principal |>
  st_drop_geometry() |>
  summarise(
    longitud_total = sum(longitud, na.rm = TRUE),
    km_pavimentado = sum(longitud[superfic_l == "Pavimentado"], na.rm = TRUE),
    km_afirmado = sum(longitud[superfic_l == "Afirmado"], na.rm = TRUE)
  )
```

### Caso 2: Evaluación de necesidades de mantenimiento

```{r caso_mantenimiento}
# Identificar tramos que requieren intervención urgente
# (mal estado y alta importancia)

vias_prioritarias <- vias_departamental |>
  filter(
    estado_l == "MALO",
    superfic_l %in% c("PAVIMENTADO", "AFIRMADO")
  ) |>
  arrange(desc(longitud))

# Resumen por provincia
vias_prioritarias |>
  st_drop_geometry() |>
  group_by(nombprov) |>
  summarise(
    km_requiere_atencion = sum(longitud, na.rm = TRUE),
    n_tramos = n(),
    .groups = "drop"
  ) |>
  arrange(desc(km_requiere_atencion))
```

### Caso 3: Análisis de inversión rural

```{r caso_rural}
# Analizar el estado de la red vecinal
# para priorizar inversiones

analisis_rural <- vias_vecinal |>
  st_drop_geometry() |>
  group_by(nombprov) |>
  summarise(
    km_total = sum(longitud, na.rm = TRUE),
    km_trocha = sum(longitud[superfic_l == "Trocha"], na.rm = TRUE),
    pct_trocha = (km_trocha / km_total) * 100,
    km_malo = sum(longitud[estado_l == "Malo"], na.rm = TRUE),
    pct_malo = (km_malo / km_total) * 100,
    .groups = "drop"
  ) |>
  arrange(desc(pct_trocha))

# Provincias con mayor necesidad de mejoramiento
print(head(analisis_rural, 10))
```

## Exportación de Datos

### Guardar en formatos estándar

```{r exportacion, eval=FALSE}
# Exportar a GeoPackage
st_write(
  vias_nacional,
  "red_vial_nacional_cusco.gpkg",
  delete_dsn = TRUE
)

# Exportar a Shapefile
st_write(
  aero_cusco,
  "aerodromos_cusco.shp",
  delete_dsn = TRUE
)

# Exportar datos tabulares a CSV
vias_nacional |>
  st_drop_geometry() |>
  write.csv("red_nacional_cusco_datos.csv", row.names = FALSE)
```

## Recursos Adicionales

### Fuentes de datos

- **Visor SDOT**: https://geosdot.servicios.gob.pe/visor/


### Normativa relevante

- Decreto Supremo 011-2016-MTC: Clasificador de Rutas del SINAC
- Ley 27181: Ley General de Transporte y Tránsito Terrestre


