Documentos de Académico
Documentos de Profesional
Documentos de Cultura
septiembre 2023
Contents
1. Contexto 1
2. Librerias y datos. 2
2.1. Librerias. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2
2.2. Datos. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2
2.3. Asignación de CRS. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2
2.4. Clase. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2
2.5. Visualización. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2
2.6. Escala espacial. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3
2.7. Visualización. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3
2.8. Superposición de capas. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4
1. Contexto
En el presente documento, quiero mostrar cómo generar el geoprocesamiento buffer o área de influencia en R,
utilizando la libreria sf . En términos generales, las herramientas de geoprocesamiento son esenciales para
toda persona que realiza un análisis espacial, pues nos proporciona una marco de trabajo desde donde se
pueden realizar análisis sobre los datos geográficos. Por supuesto hay muchas más herramientas dentro de
este marco de geoproceso. Sin embargo, este documento se centrará en crear áreas de influencias.
¿Qué es un Buffer?
Un buffer es una herramienta que se enmarca dentro de lo que se conoce como estudios de proximidad. El
resultado de esta herramienta es la generación de un polígono que rodea una geometría como por ejemplo un
punto, en función a una distancia, fija o variable, definida por el analista.
1
2. Librerias y datos.
2.1. Librerias.
library(sf)
library(tidyverse)
library(openxlsx)
library(viridis)
library(viridisLite)
library(ggplot2)
library(ggspatial)
2.2. Datos.
Usaremos una base de datos en formato excel que cotiene información sobre los centros de salud de Chile.
salud_pais = readxl::read_excel("Establec_salud_mayo_2021.xls", sheet = 2)
head(salud_pais)
## # A tibble: 6 x 33
## C_ANT c_VIG C_MAD C_NMAD C_REG NOM_REG C_DEPEND DEPEN PERENEC TIPO AMBITO
## <chr> <dbl> <chr> <chr> <dbl> <chr> <dbl> <chr> <chr> <chr> <chr>
## 1 01-010 101010 No Apl~ No Ap~ 15 Región~ 1 Serv~ Perten~ Dire~ Unida~
## 2 01-011 101011 01-010 101010 15 Región~ 1 Serv~ Perten~ Prog~ Progr~
## 3 01-012 101012 01-010 101010 15 Región~ 1 Serv~ Perten~ Clín~ Estab~
## 4 01-030 101030 No Apl~ No Ap~ 15 Región~ 1 Serv~ Perten~ Unid~ Unida~
## 5 01-090 101090 No Apl~ No Ap~ 15 Región~ 15 SERE~ No Per~ Ofic~ Unida~
## 6 01-100 101100 No Apl~ No Ap~ 15 Región~ 1 Serv~ Perten~ Hosp~ Estab~
## # i 22 more variables: URGENCIA <chr>, CERTIFICA <chr>, DEPEN_A <chr>,
## # NIVEL <chr>, NOMBRE <chr>, C_COM <chr>, NOM_COM <chr>, VIA <chr>,
## # NUMERO <chr>, DIRECCION <chr>, FONO <chr>, F_INICIO <dbl>, F_REAPER <chr>,
## # SAPU <chr>, F_CAMBIO <chr>, TIPO_CAMB <chr>, LATITUD <dbl>, LONGITUD <dbl>,
## # PRESTADOR <chr>, ESTADO <chr>, NIVEL_COM <chr>, MODALIDAD <chr>
Como se pudo observar, la base tiene dos campos: Longitud y latitud. Podemos ocupar estos campos para
establecer su ubicación espacial. Para ello, debemos asignar el crs 4326, el cual corresponde al datum wgs84.
Para esta acción usaremos la función st_as_sf() de la libreria sf.
2.4. Clase.
Al ejecutar el código class(), nos devuelve la clase “sf” del objeto. Con esta acción, podemos visualizar los
puntos a través de la función geom_sf()
class(salud_pais_sf)
2.5. Visualización.
ggplot() +
geom_sf(data = salud_pais_sf)
2
20°S
25°S
30°S
35°S
40°S
45°S
50°S
55°S
Los “points” representan la localización espacial de un centro de salud. Recuerden, cada fila u observación
corresponde a un centro de salud con sus respectivas carcateristicas, “simple feature”.
## [1] 15 1 2 3 4 5 13 6 7 16 8 9 14 10 11 12
salud_rm_sf = salud_pais_sf[salud_pais_sf$C_REG == 13, ] # aplicamos este filtro.
2.7. Visualización.
Nuevamente visualziamos el objeto con los establecimientos de la R. Metropolitana.
ggplot() +
geom_sf( data = salud_rm_sf)
3
33.0°S
33.2°S
33.4°S
33.6°S
33.8°S
34.0°S
ggplot() +
geom_sf(data = shape_rm) +
geom_sf(data = salud_rm_sf, aes(color = "red")) +
scale_color_manual(name = "Centros de Salud RM",
values = c("red" = "red"))
4
33.0°S
33.2°S
33.4°S
Centros de Salud RM
33.6°S
red
33.8°S
34.0°S
34.2°S
5
## [18] "Centro Corporación para la Nutrición Infantil (CONIN)"
## [19] "Clínica Dental"
## [20] "Consultorio de Diagnóstico y Tratamiento (CDT)"
## [21] "Consultorio General Rural (CGR)"
## [22] "Unidad de Salud Mental"
## [23] "Hospital Digital"
## [24] "Centro de Regulación Médica de las Urgencias (SAMU)"
## [25] "Servicio Médico Legal"
## [26] "Dispositivo Incorporado por Crisis Sanitaria"
## [27] "Servicio de Urgencia Rural (SUR)"
## [28] "Centro de Diálisis"
## [29] "Centro Oftalmológico"
## [30] "Pendiente"
## [31] "Instituto de Seguridad Laboral"
33.0°S
33.2°S
33.4°S colour
red
33.6°S
fill
33.8°S TIPO
34.0°S
34.2°S
3.3. Buffer.
Determinemos en un objeto el área de influencia de los hospitales con la función st_buffer() de la libreria
“sf”. Los argumentos que necesita la función son: shape y distancia. Para este caso la distancia será de 1000
metros. El ajuste de la distancia será en función del análisis.
6
buffer_1000m <- st_buffer(salud_rm_sf , dist = 1000)
El buffer creado se realizó sobre todos los puntos que representan un establecimiento de salud. Sin embargo,
el análisis se centra solo en los hospitales de la R. Metropolitana. Generemos un objeto que contenga solo
los hospitales.
hospital_rm = salud_rm_sf[salud_rm_sf$TIPO == "Hospital" , ]
unique(hospital_rm$NOMBRE)
7
## [46] "Hospital Clínico Universidad de Los Andes"
Sobre el objeto, determinemos el buffer, ahora con una distancia de 5000 metros. Observación: El valor de
5000 metros es una referencia para este ejercicio. ## 3.4. Nuevo buffer.
buffer_hospital_rm = st_buffer(hospital_rm , dist = 5000)
33.0°S
33.2°S
33.4°S
33.6°S
33.8°S
34.0°S
34.2°S
3.6. Dissolve.
Una práctica recurrente en el geoprocesamiento es disolver los buffers. Visualmente nos entrega un área de
influencia, y no superoposiciones de estas como en el resultado anterior. Usaremos la función st_union() de
la librería “sf”.
buffer_disuelto_hospitales_rm = st_union(buffer_hospital_rm)
8
geom_sf(data = buffer_disuelto_hospitales_rm) +
geom_sf(data = hospital_rm)
33.0°S
33.2°S
33.4°S
33.6°S
33.8°S
34.0°S
34.2°S
head(shape_rm)
9
## 5 13105 13 131 Metropolitana de Santiago Santiago El Bosque
## 6 13106 13 131 Metropolitana de Santiago Santiago Estación Central
## SUPERFICIE comuna pob_total salario Ingreso_autonomohogar
## 1 23.18 Santiago 530528 778719.7 1593347
## 2 16.82 Cerrillos 89910 623417.8 1746356
## 3 11.05 Cerro Navia 141123 520039.3 1372611
## 4 10.94 Conchalí 138232 539800.1 1247555
## 5 14.25 El Bosque 170888 543356.3 1316436
## 6 14.38 Estación Central 218526 625655.3 1597498
## pobre_extrema pobre_no_extrema no_pobre no_sabe sistema_público_FONASA isapre
## 1 13964 18795 497769 5606 362971 112228
## 2 3838 1829 84243 143 69462 14431
## 3 1503 1780 137840 240 126257 7532
## 4 5034 4866 128332 372 118692 10778
## 5 3721 7914 159253 1281 147410 12717
## 6 1328 7997 209201 207 164895 24011
## FF.AA_Orden Ninguno Otro_sistema geometry
## 1 3165 44016 2542 MULTIPOLYGON (((-70.67174 -...
## 2 648 5226 0 MULTIPOLYGON (((-70.69538 -...
## 3 0 6849 245 MULTIPOLYGON (((-70.72241 -...
## 4 1463 6678 249 MULTIPOLYGON (((-70.6582 -3...
## 5 4704 3426 1350 MULTIPOLYGON (((-70.6854 -3...
## 6 1572 27841 0 MULTIPOLYGON (((-70.69204 -...
unique(shape_rm$sistema_público_FONASA)
## [1] 362971 69462 126257 118692 147410 164895 79884 114934 67748 282726
## [11] 104630 181374 35840 93761 46008 93815 89920 96559 421202 98236
## [21] 94994 180238 41886 207024 210940 105753 166659 148213 85968 88389
## [31] 73187 12821 515602 23210 15639 143941 116883 19612 276544 87947
## [41] 27424 77063 123794 5476 32181 13703 10145 66588 35015 39210
## [51] 63347 84020
shape_rm$prop_fonasa = round(shape_rm$sistema_público_FONASA / shape_rm$pob_total , 1)*100
10
theme(
legend.position = "bottom") +
guides(
alpha = FALSE,
fill = guide_legend(
title.position = "top",
title.hjust = 0.5,
label.hjust = 0.5,
label.position = "bottom",
keywidth = 0.5,
keyheight = 0.3
)
) +
annotation_north_arrow(
location = "tr", which_nort = TRUE,
style = north_arrow_nautical(),
height = unit(1.7, "cm"),
width = unit(1.7 , "cm")
) +
annotation_scale()
## Warning: The `<scale>` argument of `guides()` cannot be `FALSE`. Use "none" instead as
## of ggplot2 3.3.4.
## This warning is displayed once every 8 hours.
## Call `lifecycle::last_lifecycle_warnings()` to see where this warning was
## generated.
## Warning in annotation_north_arrow(location = "tr", which_nort = TRUE, style =
## north_arrow_nautical(), : Ignoring unknown parameters: `which_nort`
11
Porcentaje población beneficiaria de Fonasa
Elaborado por: Cristián Escobedo Catalán
N
33.0°S
33.2°S
33.4°S
33.6°S
33.8°S
34.0°S
34.2°S
40 km
Porcentaje
12
label.hjust = 0.5,
label.position = "bottom",
keywidth = 0.5,
keyheight = 0.3
)
) +
annotation_north_arrow(
location = "tr", which_nort = TRUE,
style = north_arrow_nautical(),
height = unit(1.7, "cm"),
width = unit(1.7 , "cm")
) +
annotation_scale()
N
33.0°S
33.2°S
33.4°S
33.6°S
33.8°S
34.0°S
34.2°S
40 km
Hospitales Porcentaje
13
scale_fill_viridis(
option = "plasma",
discrete = TRUE,
direction = -1,
name = "Porcentaje población Fonasa",
labels = c("Área de influencia" = "Buffer")
) +
scale_color_manual(
name = NULL,
values = c("Hospitales" = "red")
) +
labs(
title = "Área de influencia de los Hospitales Públicos en la R. Metropolitana",
subtitle = "Elaborado por: Cristián Escobedo Catalán",
caption = "Fuente: Casen 2022"
) +
theme_light() +
theme(
legend.position = "bottom"
) +
guides(
alpha = FALSE,
fill = guide_legend(
title.position = "top",
title.hjust = 0.5,
label.hjust = 0.5,
label.position = "bottom",
keywidth = 0.5,
keyheight = 0.3
)
) +
annotation_north_arrow(
location = "tr", which_nort = TRUE,
style = north_arrow_nautical(),
height = unit(1.7, "cm"),
width = unit(1.7, "cm")
) +
annotation_scale()
14
Área de influencia de los Hospitales Públicos en la R. Metropolitana
Elaborado por: Cristián Escobedo Catalán
N
33.0°S
33.2°S
33.4°S
33.6°S
33.8°S
34.0°S
34.2°S
40 km
15