Modulo Geoestadística-Estadística Espacial Big data e inteligencia territorial - 2020

Trabajo Práctico de elaboración de polígonos Voronoi en Espacios Verdes de la CABA

Librerias

El objetivo del presente trabajo es la estimación de poligonos voronoi e identificación de zonas de priorización de creación de nuevos espacios verdes en la Ciudad de Buenos Aires.

Preparación de los datos

espacios_verdes <- st_read('../Modulo_5_Estadistica_Espacial/espacio-verde-publico.shp')%>% 
  st_transform(3857)  
## Reading layer `espacio-verde-publico' from data source `C:\Users\danie\Documents\Big Data e Inteligencia Territorial 2020\Modulo_5_Estadistica_Espacial\espacio-verde-publico.shp' using driver `ESRI Shapefile'
## Warning in CPL_read_ogr(dsn, layer, query, as.character(options), quiet, : GDAL
## Message 1: One or several characters couldn't be converted correctly from CP1252
## to UTF-8. This warning will not be emitted anymore
## Simple feature collection with 1736 features and 36 fields
## geometry type:  MULTIPOLYGON
## dimension:      XY
## bbox:           xmin: -58.53175 ymin: -34.70557 xmax: -58.33983 ymax: -34.52657
## geographic CRS: WGS 84
barrios <- st_read('../Modulo_5_Estadistica_Espacial/barrios_badata.shp') %>% 
  st_transform(4326)
## Reading layer `barrios_badata' from data source `C:\Users\danie\Documents\Big Data e Inteligencia Territorial 2020\Modulo_5_Estadistica_Espacial\barrios_badata.shp' using driver `ESRI Shapefile'
## Simple feature collection with 48 features and 5 fields
## geometry type:  POLYGON
## dimension:      XY
## bbox:           xmin: 93743.42 ymin: 91566.42 xmax: 111751.4 ymax: 111401.7
## projected CRS:  Argentina_GKBsAs
radios_caba <- st_read('../TP/Nacional_Radios_wgs84.shp') %>% 
  filter(Provincia=='CABA')%>% 
  st_transform(3857)  
## Reading layer `Nacional_Radios_wgs84' from data source `C:\Users\danie\Documents\Big Data e Inteligencia Territorial 2020\TP\Nacional_Radios_wgs84.shp' using driver `ESRI Shapefile'
## Simple feature collection with 52408 features and 14 fields
## geometry type:  MULTIPOLYGON
## dimension:      XY
## bbox:           xmin: -73.5708 ymin: -55.05562 xmax: -53.6372 ymax: -21.78078
## geographic CRS: WGS 84

Preprocesamiento

str(espacios_verdes)
## Classes 'sf' and 'data.frame':   1736 obs. of  37 variables:
##  $ nombre    : chr  "Escuela Scalabrini Ortiz" NA "Polideportivo Colegiales" NA ...
##  $ nombre_ev : chr  "ESCUELA Nº 13 D.E. 09 SCALABRINI ORTIZ" "SIN NOMBRE" "POLIDEPORTIVO COLEGIALES" "SIN NOMBRE" ...
##  $ clasificac: chr  "PLAZOLETA" "PLAZOLETA" "PARQUE" "PLAZOLETA" ...
##  $ patio_de_j: chr  "NO" "NO" "NO" "NO" ...
##  $ apadrinada: chr  NA NA NA NA ...
##  $ observacio: chr  "Redigitalización en Agosto de 2017. Unión de sectores y asignación de nombre" "ESPACIOS VERDES" "Redigitalización por USIG en Agosto de 2017. Unión de sectores y asignación de nombre. Categoría de parque toma"| __truncated__ "ESPACIOS VERDES" ...
##  $ fuente_geo: chr  "USIG" "USIG" "USIG" "USIG" ...
##  $ fuente_ins: chr  "USIG" "USIG" "USIG" "USIG" ...
##  $ ubicacion : chr  "CONDE - MATIENZO, BENJAMIN, TTE. - FREIRE, RAMON, CAP. GRAL." "CONDE - MATIENZO, BENJAMIN, TTE. - FREIRE, RAMON, CAP. GRAL." "CONDE - MATIENZO, BENJAMIN, TTE. - FREIRE, RAMON, CAP. GRAL." "GUIRALDES, INTENDENTE - ESTACIONAMIENTO - PARQUE BALNEARIO NORTE - ESTACIONAMIENTO" ...
##  $ decreto   : chr  NA NA NA NA ...
##  $ fecha_decr: chr  NA NA NA NA ...
##  $ ordenanza_: chr  NA NA NA NA ...
##  $ fecha_orde: chr  NA NA NA NA ...
##  $ boletin_of: chr  NA NA NA NA ...
##  $ fecha_bole: chr  NA NA NA NA ...
##  $ BARRIO    : chr  "COLEGIALES" "COLEGIALES" "COLEGIALES" "BELGRANO" ...
##  $ COMUNA    : num  13 13 13 13 13 13 14 14 14 12 ...
##  $ Fech_padri: chr  NA NA NA NA ...
##  $ Vig_padri : chr  NA NA NA NA ...
##  $ Alc_conven: chr  NA NA NA NA ...
##  $ nom_mapa  : chr  "Esc. Scalabrini Ortiz" NA "Polidep. Colegiales" NA ...
##  $ id_ev_pub : int  2 5 6 8 9 10 11 12 13 15 ...
##  $ area      : num  1658.27 3.98 4686.06 3746.97 558.99 ...
##  $ perimeter : num  0 0 0 100 9990 ...
##  $ DGEV_Padri: chr  NA NA NA NA ...
##  $ Mant_2017 : chr  NA NA NA NA ...
##  $ TAREAS    : chr  NA NA NA NA ...
##  $ ESTADO    : chr  NA NA NA NA ...
##  $ SUP_TOTAL : num  0 0 0 0 0 ...
##  $ Canil     : chr  NA NA NA NA ...
##  $ Posta_aero: chr  NA NA NA NA ...
##  $ Etiqueta  : chr  NA NA "NO" NA ...
##  $ REJA      : chr  NA NA NA NA ...
##  $ Hor_invier: chr  NA NA NA NA ...
##  $ Hor_verano: chr  NA NA NA NA ...
##  $ Obs_reja  : chr  NA NA NA NA ...
##  $ geometry  :sfc_MULTIPOLYGON of length 1736; first list element: List of 3
##   ..$ :List of 1
##   .. ..$ : num [1:9, 1:2] -6506107 -6506055 -6506076 -6506083 -6506065 ...
##   ..$ :List of 1
##   .. ..$ : num [1:81, 1:2] -6506085 -6506032 -6506038 -6506039 -6506039 ...
##   ..$ :List of 1
##   .. ..$ : num [1:79, 1:2] -6506117 -6506099 -6506100 -6506100 -6506100 ...
##   ..- attr(*, "class")= chr [1:3] "XY" "MULTIPOLYGON" "sfg"
##  - attr(*, "sf_column")= chr "geometry"
##  - attr(*, "agr")= Factor w/ 3 levels "constant","aggregate",..: NA NA NA NA NA NA NA NA NA NA ...
##   ..- attr(*, "names")= chr [1:36] "nombre" "nombre_ev" "clasificac" "patio_de_j" ...
clasificacion <- espacios_verdes %>% 
  group_by(clasificac) %>% 
  summarise(total=n())

## Clasificación de Espacios Verdes para análisis

EV_analisis <- c('PARQUE',
                 'PLAZA')

espacios_verdes_uso <- espacios_verdes %>% 
  filter(clasificac %in% EV_analisis)

espacios_verdes_uso_centroides <- st_centroid(espacios_verdes_uso)
## Warning in st_centroid.sf(espacios_verdes_uso): st_centroid assumes attributes
## are constant over geometries of x

Visualización de los Datos

tmap_mode("view")
## tmap mode set to interactive viewing
qtm(barrios,fill = NULL, borders="blue")+
  qtm(espacios_verdes_uso,fill = 'clasificac')
tmap_mode("view")
## tmap mode set to interactive viewing
qtm(barrios,fill = NULL, borders="blue")+
  qtm(espacios_verdes_uso_centroides,fill = 'clasificac')

Áreas de interés (AOI)

Cración de áreas de interés (aoi) con el objetivo de definir la extensión de un análisis espacial.

Bounding box del dataset

bb <- st_as_sfc(st_bbox(espacios_verdes_uso_centroides))
bb
## Geometry set for 1 feature 
## geometry type:  POLYGON
## dimension:      XY
## bbox:           xmin: -6515415 ymin: -4122837 xmax: -6495682 ymax: -4100329
## projected CRS:  WGS 84 / Pseudo-Mercator
## POLYGON ((-6515415 -4122837, -6495682 -4122837,...

Buffer de 2000 metros alrededor de todos los puntos

caba <- st_union(radios_caba) %>% 
  st_transform(., crs = st_crs(espacios_verdes_uso_centroides))

qtm(caba, fill = NULL, borders="blue") 

Polígono máximo convexo (convex hull)

ch <- espacios_verdes_uso_centroides %>% st_union()%>% st_convex_hull()
ch
## Geometry set for 1 feature 
## geometry type:  POLYGON
## dimension:      XY
## bbox:           xmin: -6515415 ymin: -4122837 xmax: -6495682 ymax: -4100329
## projected CRS:  WGS 84 / Pseudo-Mercator
## POLYGON ((-6508831 -4122837, -6514421 -4117397,...

Visualización de las áreas de interés

tmap_mode("view")
## tmap mode set to interactive viewing
qtm(espacios_verdes_uso_centroides)+
  qtm(bb, fill = NULL, borders="red")+
  qtm(caba, fill = NULL, borders = "blue")+
  qtm(ch, fill = NULL, borders = "black")

Polígonos de Voronoi o Thiessen

La función sf::st_voronoi requiere que esté instalado GEOS >3.5.0. Geos se instala con el paquete rgeos que es una dependencia de casi todos los paquetes que se usan menos tidyverse.

sf_extSoftVersion()["GEOS"] >= "3.5.0"
## GEOS 
## TRUE

Cálculo de polígonos de voronoi con la funcion sf::st_voronoi

** Voronoi1** con codigo basado basado en el post de Gabo Gaona aqui , sin usar envolvente.

voronoi1 <- st_voronoi(do.call(c, st_geometry(espacios_verdes_uso_centroides))) %>%
  st_collection_extract() %>%
  st_sfc(crs = st_crs(espacios_verdes_uso_centroides)) %>% 
  st_sf() %>% 
  st_join(espacios_verdes_uso_centroides)
  
qtm(voronoi1, fill = NULL)+
  qtm(espacios_verdes_uso_centroides)

voronoi2 Recorte de los polígonos voronoi a partir del límite de la Ciudad de Buenos Aires:

voronoi2 <- espacios_verdes_uso_centroides %>% 
          st_geometry() %>%
          st_union() %>%
          st_voronoi() %>%
          st_collection_extract()%>%
          st_sfc(crs = st_crs(espacios_verdes_uso_centroides)) %>% 
          st_sf() %>% 
          st_join(espacios_verdes_uso_centroides) %>%
          st_intersection(caba)
## Warning: attribute variables are assumed to be spatially constant throughout all
## geometries
qtm(voronoi2, fill=NULL)+
  qtm(caba,  fill=NULL)

Visualización los datos interpolados

Visualización de los valores “interpolados”, cada poligono toma el valor del atributo correspondiente.

Estimación de áres con déficir de EV y priorización:

voronoi2$area_voronoi <- as.numeric(st_area(voronoi2))

voronoi2 <-voronoi2 %>% 
  mutate(area_voronoi_Ha=(area_voronoi/10000)) %>% 
  mutate(area_Ha=(area/10000))

tm_shape(voronoi2) + 
  tm_fill(col = "area_Ha",
          style = "quantile") +
  tm_polygons(alpha = 0.8)+
tm_shape(barrios) +
    tm_borders(col = "blue", alpha = 0.5)+
    tm_text("BARRIO",scale=0.8)
## Warning: One tm layer group has duplicated layer types, which are omitted. To
## draw multiple layers of the same type, use multiple layer groups (i.e. specify
## tm_shape prior to each of them).

Conclusiones:

Teniendo en cuenta el análisis por medio de polígonos Voronoi y la superficie de cada espacio verde se presentan áreas de baja cobertura de EV en donde se debería priorizar la creación de nuevos espacios.

barrios_deficit_EV <- voronoi2 %>% 
  filter(area_Ha<=0.12 ) %>% 
   as.data.frame() %>% 
  group_by(BARRIO) %>% 
  summarise(total=n()) %>% 
  arrange(., desc(total)) %>% 
  slice(1:5) 

knitr::kable(
  barrios_deficit_EV, caption = 'Barrios y cantidad de áreas con déficit de EV'
)
Barrios y cantidad de áreas con déficit de EV
BARRIO total
RETIRO 18
BELGRANO 9
BARRACAS 7
NUEVA POMPEYA 4
RECOLETA 4