Input inicial - Mapas vectoriales de provincia de Buenos Aires y AMBA
Objetivo - Generar mapas de menor tamaño para que la aplicacion no tenga problemas de eficiencia. - Producir un mapa de Buenos Aires dónde no se diferencien las comunas de CABA. - Obtener los centroides de los departamentos de provincia de Buenos Aires
library(tidyverse)
── Attaching core tidyverse packages ──────────────────────── tidyverse 2.0.0 ──
✔ dplyr 1.1.4 ✔ readr 2.1.4
✔ forcats 1.0.0 ✔ stringr 1.5.1
✔ ggplot2 3.4.4 ✔ tibble 3.2.1
✔ lubridate 1.9.3 ✔ tidyr 1.3.0
✔ purrr 1.0.2
── Conflicts ────────────────────────────────────────── tidyverse_conflicts() ──
✖ dplyr::filter() masks stats::filter()
✖ dplyr::lag() masks stats::lag()
ℹ Use the conflicted package (<http://conflicted.r-lib.org/>) to force all conflicts to become errors
library(stringr)library(sf)
Warning: package 'sf' was built under R version 4.2.3
Linking to GEOS 3.11.0, GDAL 3.5.3, PROJ 9.1.0; sf_use_s2() is TRUE
# El amba consta de 40 municipios mas ciudad de buenos aires# fuente: https://www.argentina.gob.ar/dami/centro/amba# Vamos a hacer una seleccion de amba con menos partidos# Lista de los partidos que vamos a considerar AMBA incluyendo comunas CABAamba_reducido_names <-c('Almirante Brown','Avellaneda','Berazategui',paste('Comuna', 1:15), # CABA'Esteban Echeverría', 'Escobar', 'Ezeiza','Florencio Varela','General San Martín','Hurlingham','Ituzaingó','José C. Paz','La Matanza', 'Lanús', 'Lomas de Zamora','Malvinas Argentinas', 'Merlo', 'Moreno', 'Morón','Quilmes', 'Pilar', 'Presidente Perón','San Fernando', 'San Isidro', 'San Miguel','Tigre', 'Tres de Febrero','Vicente López')
Area Metropolitana de Buenos Aires (AMBA) y Ciudad Autonoma de Buenos Aires (CABA)
# Estos shapefiles fueron extraidos del Instituto Geografico Nacional (IGN)amba <-st_read("data/inicial/departamentos.shp") |>st_zm() |>filter(str_detect(NAM, paste(amba_reducido_names, collapse ="|")), SAG %in%c('ARBA - Gerencia de Servicios Catastrales','Direc. de Catastro'))
Reading layer `departamentos' from data source
`/Users/florenciadandrea/geocovid_bsas/data/inicial/departamentos.shp'
using driver `ESRI Shapefile'
Simple feature collection with 529 features and 10 fields
Geometry type: MULTIPOLYGON
Dimension: XY, XYZ
Bounding box: xmin: -74 ymin: -90 xmax: -25 ymax: -21.78113
z_range: zmin: 0 zmax: 0
Geodetic CRS: WGS 84
# Chequeo el resultado visualmenteamba_reducido <- amba |> dplyr::select('partido'= NAM , geometry) |> dplyr::filter(partido %in% amba_reducido_names)ggplot() +geom_sf(data = amba_reducido)+theme_minimal()
Remuevo poligonos duplicados
# Vemos que San Fernando esta compuesto por dos poligonos,# Uno es el delta, y deberiamos eliminarloggplot() +geom_sf(data =subset(amba_reducido, partido =='San Fernando'))+theme_minimal()
# Lo paso a poligono para eliminar el extraamba_reducido =st_cast(amba_reducido,"POLYGON")
Warning in st_cast.sf(amba_reducido, "POLYGON"): repeating attributes for all
sub-geometries for which they may not be constant
# Chequeo que se cual quiero eliminarggplot() +geom_sf(data = amba_reducido$geom[30])+theme_minimal()
# Elimino el poligono extraamba_reducido <- amba_reducido[-30,]# Archivo vectorial final de AMBAggplot() +geom_sf(data = amba_reducido)+theme_minimal()
Este es el archivo con los poligonos finales seleccionados para AMBA
## guardo el archivost_write(amba_reducido, "data/procesada/amba_reducido.gpkg", append =FALSE)
Deleting layer `amba_reducido' using driver `GPKG'
Writing layer `amba_reducido' to data source
`data/procesada/amba_reducido.gpkg' using driver `GPKG'
Writing 42 features with 1 fields and geometry type Polygon.
Provincia de Buenos Aires
# Obtengo los poligonos desde el IGNbsas <- sf::st_read('data/inicial/departamentos.shp') |> dplyr::filter(SAG %in%c('Direc. de Catastro', # comunas'ARBA - Gerencia de Servicios Catastrales'), # partidos de baires GNA %in%c('Partido', 'Comuna')) |># elimino prov de san juan dplyr::select('partido'= NAM, geometry) |> sf::st_zm()
Reading layer `departamentos' from data source
`/Users/florenciadandrea/geocovid_bsas/data/inicial/departamentos.shp'
using driver `ESRI Shapefile'
Simple feature collection with 529 features and 10 fields
Geometry type: MULTIPOLYGON
Dimension: XY, XYZ
Bounding box: xmin: -74 ymin: -90 xmax: -25 ymax: -21.78113
z_range: zmin: 0 zmax: 0
Geodetic CRS: WGS 84
# Lo paso a poligono para eliminar el extra en San Fernandobsas =st_cast(bsas,"POLYGON")
Warning in st_cast.sf(bsas, "POLYGON"): repeating attributes for all
sub-geometries for which they may not be constant
# Chequeo el numero de poligono que quiero eliminarggplot() +geom_sf(data = bsas$geometry[126])+theme_minimal()
# Llamo al archivo bsas_comunas ya que presenta las comunas de CABAwrite_sf(bsas, 'data/procesada/bsas_comunas.gpkg')
Unifico las comunas
# uno las comunas caba <- bsas[grep("Comuna", bsas$partido), ] |>st_union()# aca podria agregar algun tipo de control de calidad para asegurarme que# tengo la cantidad de comunas que son# chequear que tenga proyeccion# las reemplazo en el dataset por caba bsas_caba <- bsas |>slice(-grep("Comuna", bsas$partido)) |>rbind(st_sf(geometry = caba,partido ='Capital Federal' ))ggplot() +geom_sf(data =subset(bsas_caba, partido =='Capital Federal')) +theme_minimal()
# Llamo a este archivo bsas ya que no presenta la division interna de CABA# en comunaswrite_sf(bsas_caba, 'data/procesada/bsas.gpkg')
Simplifico los poligonos para agilizar la app
bsas_caba <-st_read('data/procesada/bsas.gpkg')
Reading layer `bsas' from data source
`/Users/florenciadandrea/geocovid_bsas/data/procesada/bsas.gpkg'
using driver `GPKG'
Simple feature collection with 136 features and 1 field
Geometry type: POLYGON
Dimension: XY
Bounding box: xmin: -63.38597 ymin: -41.03791 xmax: -56.66499 ymax: -33.26185
Geodetic CRS: WGS 84
# Es posible emplear la funcion st_simplify para esto mismo, pero no conserva# tan bien la topografia entre los poligonos, es por ello que uso este paquete# donde se aplica el algoritmo de Visvalingamlibrary(rmapshaper)bsas_caba_simple <- rmapshaper::ms_simplify(bsas_caba)
Incluyo coordenadas de la bounding box
Realizo este paso para que sea más sencillo hacer el zoom en el mapa.
# Agrego coordenadas al mapa de BsAs que voy a necesitar# para hacer zoom en la appfor(i inseq_along(1:nrow(bsas_caba_simple))){ bsas_caba_simple[i, "lat1"] <- sf::st_bbox(bsas_caba_simple[i,])$ymin bsas_caba_simple[i,"lat2"] <- sf::st_bbox(bsas_caba_simple[i,])$ymax bsas_caba_simple[i, "lng1"] <- sf::st_bbox(bsas_caba_simple[i,])$xmin bsas_caba_simple[i, "lng2"] <- sf::st_bbox(bsas_caba_simple[i,])$xmax}st_write(bsas_caba_simple, "data/procesada/bsas_final.gpkg", append=FALSE)
Deleting layer `bsas_final' using driver `GPKG'
Writing layer `bsas_final' to data source
`data/procesada/bsas_final.gpkg' using driver `GPKG'
Writing 136 features with 5 fields and geometry type Polygon.
Calculo de centroides
cent <- bsas_caba_simple |>st_point_on_surface()
Warning: st_point_on_surface assumes attributes are constant over geometries
Warning in st_point_on_surface.sfc(st_geometry(x)): st_point_on_surface may not
give correct results for longitude/latitude data
# guardo el archivo con los vectores de partidos de provincia de Buenos Airesggplot() +geom_sf(data = bsas_caba)+geom_sf(data = cent) +theme_minimal()
# Cambio nombres de partidos para evitar problemas al momento de hacer joinscent[78,'partido'] <-'Lomas De Zamora'cent[132,'partido'] <-'Tres De Febrero'cent <- cent |># salgo del formato sf: calculo lat y long como variables separadascbind(sf::st_coordinates(cent)) |> dplyr::arrange(partido) |>select(-lat1, -lat2, -lng1, -lng2)# elimino el formato sfsf::st_geometry(cent) <-NULLcent
partido X Y
1 25 de Mayo -60.28153 -35.55392
2 9 de Julio -60.92597 -35.53430
3 Adolfo Alsina -62.95972 -37.16983
4 Adolfo Gonzales Chaves -60.28791 -37.94044
5 Alberti -60.28311 -35.02820
6 Almirante Brown -58.37581 -34.83383
7 Arrecifes -60.01660 -34.00289
8 Avellaneda -58.33643 -34.67923
9 Ayacucho -58.59323 -36.97672
10 Azul -59.68005 -36.83704
11 Bahía Blanca -62.18668 -38.59020
12 Balcarce -58.18939 -37.75310
13 Baradero -59.44140 -33.90786
14 Benito Juárez -59.88628 -37.58798
15 Berazategui -58.14120 -34.84363
16 Berisso -57.85202 -34.89866
17 Bolívar -61.15579 -36.29357
18 Bragado -60.60463 -35.02820
19 Brandsen -58.23788 -35.19553
20 Campana -58.88924 -34.15991
21 Capital Federal -58.43547 -34.61515
22 Capitán Sarmiento -59.84528 -34.14161
23 Carlos Casares -61.29527 -35.73349
24 Carlos Tejedor -62.43390 -35.39224
25 Carmen de Areco -59.92388 -34.42105
26 Castelli -57.65124 -36.01938
27 Cañuelas -58.72227 -35.15660
28 Chacabuco -60.32958 -34.63540
29 Chascomús -57.87466 -35.59756
30 Chivilcoy -59.97838 -34.90887
31 Colón -61.04032 -33.85050
32 Coronel Dorrego -61.15382 -38.64395
33 Coronel Pringles -61.24195 -38.16803
34 Coronel Suárez -61.91250 -37.54200
35 Coronel de Marina Leonardo Rosales -61.93088 -38.81603
36 Daireaux -61.94126 -36.61709
37 Dolores -57.59941 -36.42196
38 Ensenada -57.97776 -34.84021
39 Escobar -58.77772 -34.34234
40 Esteban Echeverría -58.47645 -34.82407
41 Exaltación de la Cruz -59.13155 -34.31044
42 Ezeiza -58.57336 -34.87375
43 Florencio Varela -58.25360 -34.88657
44 Florentino Ameghino -62.41611 -34.88750
45 General Alvarado -58.06044 -38.20038
46 General Alvear -60.10413 -36.04127
47 General Arenales -61.29278 -34.23922
48 General Belgrano -58.61672 -35.84266
49 General Guido -57.94733 -36.67494
50 General Juan Madariaga -57.28162 -37.16193
51 General La Madrid -61.28003 -37.40732
52 General Las Heras -58.99601 -34.90984
53 General Lavalle -57.01046 -36.67784
54 General Paz -58.33569 -35.47546
55 General Pinto -61.97697 -34.68665
56 General Pueyrredón -57.78250 -37.97401
57 General Rodríguez -58.99482 -34.64047
58 General Viamonte -61.06068 -34.98104
59 General Villegas -62.99874 -34.87244
60 Guaminí -62.43702 -36.90480
61 Hipólito Yrigoyen -61.69276 -36.27273
62 Hurlingham -58.65275 -34.59981
63 Ituzaingó -58.68822 -34.64233
64 José C. Paz -58.78106 -34.50335
65 Junín -60.96998 -34.54486
66 La Costa -56.69242 -36.66074
67 La Matanza -58.63546 -34.77297
68 La Plata -57.99139 -35.03789
69 Lanús -58.39866 -34.70293
70 Laprida -60.64166 -37.49570
71 Las Flores -59.12327 -36.01897
72 Leandro N. Alem -61.64284 -34.49384
73 Lezama -57.93164 -35.86462
74 Lincoln -61.80579 -35.09365
75 Lobería -58.68880 -38.07036
76 Lobos -59.15286 -35.20128
77 Lomas De Zamora -58.57596 -34.54360
78 Lomas de Zamora -58.41026 -34.74998
79 Luján -59.15158 -34.58838
80 Magdalena -57.62397 -35.18716
81 Maipú -57.58922 -36.89209
82 Malvinas Argentinas -58.72082 -34.48464
83 Mar Chiquita -57.60642 -37.51881
84 Marcos Paz -58.83455 -34.82132
85 Mercedes -59.42672 -34.70347
86 Merlo -58.74705 -34.70788
87 Monte -58.75188 -35.49808
88 Monte Hermoso -61.28918 -38.95552
89 Moreno -58.80228 -34.59624
90 Morón -58.61937 -34.64628
91 Navarro -59.39377 -35.02273
92 Necochea -59.11314 -38.17667
93 Olavarría -60.71476 -36.85806
94 Patagones -62.86131 -40.18127
95 Pehuajó -61.97322 -35.90659
96 Pellegrini -63.16732 -36.24039
97 Pila -58.38114 -36.23235
98 Pilar -58.89737 -34.44171
99 Pinamar -56.86715 -37.10634
100 Presidente Perón -58.41364 -34.94209
101 Punta Indio -57.34538 -35.45684
102 Puán -63.03783 -38.11116
103 Quilmes -58.27554 -34.74127
104 Ramallo -60.03576 -33.58824
105 Rauch -58.91645 -36.60297
106 Rivadavia -63.02164 -35.57785
107 Rojas -60.72242 -34.19580
108 Roque Pérez -59.21778 -35.52084
109 Saavedra -62.43006 -37.74616
110 Saladillo -59.64920 -35.68244
111 Salliqueló -63.04286 -36.67565
112 Salto -60.30479 -34.24776
113 San Andrés de Giles -59.47306 -34.42320
114 San Antonio de Areco -59.56440 -34.20744
115 San Cayetano -59.63009 -38.40343
116 San Fernando -58.56731 -34.45870
117 San Isidro -58.53767 -34.48685
118 San Miguel -58.70184 -34.55303
119 San Nicolás -60.28747 -33.47246
120 San Pedro -59.82146 -33.79661
121 San Vicente -58.42015 -35.08145
122 Suipacha -59.71374 -34.73507
123 Tandil -59.18070 -37.33613
124 Tapalqué -60.22351 -36.36921
125 Tigre -58.61231 -34.40115
126 Tordillo -57.22011 -36.41438
127 Tornquist -62.18618 -38.26284
128 Trenque Lauquen -62.69757 -36.04662
129 Tres Arroyos -60.26733 -38.47286
130 Tres De Febrero -60.58050 -33.86411
131 Tres Lomas -62.88158 -36.48679
132 Tres de Febrero -58.56250 -34.60183
133 Vicente López -58.50640 -34.52899
134 Villa Gesell -57.06391 -37.36494
135 Villarino -62.86191 -39.15349
136 Zárate -59.14666 -34.00438
# guardo los centroideswrite.csv(cent, "data/procesada/centroides_mapa.csv")