Se realizara observaciones de algunas funciones geoespaciales utilizando el software de R, para esto el primer paso es instalar las librerias necesarias utilizando el siguiente comando:
#install.package(c("tydiverse", "sf"))
posteriormente se debe cargar las librerias, para la primera se utiliza el comando
library(tidyverse)
## -- Attaching packages ----------------------------------------------------------------------------------------------- tidyverse 1.3.0 --
## v ggplot2 3.3.2 v purrr 0.3.4
## v tibble 3.0.3 v dplyr 1.0.2
## v tidyr 1.1.2 v stringr 1.4.0
## v readr 1.3.1 v forcats 0.5.0
## -- Conflicts -------------------------------------------------------------------------------------------------- tidyverse_conflicts() --
## x dplyr::filter() masks stats::filter()
## x dplyr::lag() masks stats::lag()
library(sf)
## Linking to GEOS 3.8.0, GDAL 3.0.4, PROJ 6.3.1
Una vez descargados los archivos nescesarios desde la pagina oficial del DANE, cargamos el shapefile que contiene los datos del departamento de Nariño:
deptos <- read_sf("C:/Users/USER/Desktop/Geomatica/52_NARIÑO/ADMINISTRATIVO/MGN_DPTO_POLITICO.shp")
Se observa los datos que contiene el objeto deptos que fue creado:
head(deptos)
Para conocer el sistema de referencia de las coordenadas de los datos vectoriales almacenados en el objeto deptos se puede usar la función st_crs:
st_crs(deptos)
## Coordinate Reference System:
## User input: WGS 84
## wkt:
## GEOGCRS["WGS 84",
## DATUM["World Geodetic System 1984",
## ELLIPSOID["WGS 84",6378137,298.257223563,
## LENGTHUNIT["metre",1]]],
## PRIMEM["Greenwich",0,
## ANGLEUNIT["degree",0.0174532925199433]],
## CS[ellipsoidal,2],
## AXIS["latitude",north,
## ORDER[1],
## ANGLEUNIT["degree",0.0174532925199433]],
## AXIS["longitude",east,
## ORDER[2],
## ANGLEUNIT["degree",0.0174532925199433]],
## ID["EPSG",4326]]
Para comprender los datas lo mejor es trazarlos, para ello es posible utilizar las funcionalidades de ggplot.
El primer paso es instalar la libreria:
#install.packages("ggplot2")
Y por supuesto hay que cargar la libreria instalada
library(ggplot2)
Ahora si utilizamos los datos del objeto deptos con las funciones de ggplot:
ggplot() + geom_sf(data = deptos)
Por otra parte, si se quiere hacer una obserbacion bajo el sistema de coordenadas nacional, para el departamento de nariño se utilizara la referencia EPSG: 3115 la cual pertenece al sistema MAGNA-SIRGAS para la zona oeste de Colombia:
ggplot() + geom_sf(data = deptos) + coord_sf(crs = st_crs(3115))
En caso de necesitar usar el CRS con codigo EPSG 21818. El cual corresponde a UTM zona 18N usanto st_crs:
deptos_utm <- st_transform(deptos, crs = st_crs(21818))
Y se visualizan los datos de este nuevo objeto:
deptos_utm
De nuevo se visualiza el objeto:
ggplot() + geom_sf(data = deptos_utm)
deptos_utm
Ahora nos interasa filtrar los municipios que presenta el departamento de Nariño:
munic_nariño <- read_sf("C:/Users/USER/Desktop/Geomatica/52_NARIÑO/ADMINISTRATIVO/MGN_MPIO_POLITICO.shp")
ggplot() + geom_sf(data = munic_nariño)
El objeto munic_nariño
munic_nariño
Es miportante enumerar los municipios, para esto hay que agregar una nuema columna con la funcion cbind, donde podremos enumerar las filas.
munic_nariño=cbind(munic_nariño, ID_1=rep(seq(1,64,1)))
Para configurar el punto del centroide del objeto munic_nariño, para esto se utiliza la función st_centroid:
nariño_points <- st_centroid(munic_nariño)
## Warning in st_centroid.sf(munic_nariño): st_centroid assumes attributes are
## constant over geometries of x
## Warning in st_centroid.sfc(st_geometry(x), of_largest_polygon =
## of_largest_polygon): st_centroid does not give correct centroids for longitude/
## latitude data
nariño_points <- cbind(munic_nariño, st_coordinates(st_centroid(munic_nariño$geometry)))
## Warning in st_centroid.sfc(munic_nariño$geometry): st_centroid does not give
## correct centroids for longitude/latitude data
Lo siguiente es observar el objeto nariño con sus municipios enumerados:
ggplot(deptos) +
geom_sf() +
geom_sf(data = nariño_points, fill= "antiquewhite") +
geom_text(data = nariño_points, aes(x=X, y=Y, label= ID_1), size = 2) +
coord_sf(xlim = c(-79.1, -76.8), ylim = c(0.3, 2.8), expand = FALSE) + xlab("Longitud") + ylab("Latitud")
Para el siguiente paso, primero hace falta instalar la libreria scales
#install.packages("scales")
Se llama a la libreria
library(scales)
##
## Attaching package: 'scales'
## The following object is masked from 'package:purrr':
##
## discard
## The following object is masked from 'package:readr':
##
## col_factor
Para finalizar esta seccion observamos de nuevo los municipios numerados, pero con una escala de color:
ggplot(deptos) +
geom_sf(data= nariño_points, aes(x=X, y=Y, fill= ID_1),color="black", size = 0.25) +
geom_text(data= nariño_points, aes(x=X, y=Y, label= ID_1), size = 2) +
theme(aspect.ratio=1) +
scale_fill_distiller(name ="N° Mun",palette = "Spectral", breaks= pretty_breaks(n=10)) +
labs(title="Mapa Nariño a escala") + coord_sf(xlim = c(-79.1, -76.8), ylim = c(0.3, 2.8), expand = FALSE) + xlab("Longitud") + ylab("Latitud")
## Warning: Ignoring unknown aesthetics: x, y
Sin embargo, esta visualizacion no es un mapa real. De igual forma, es posible guardar la salida como PDF o PNG:
ggsave("Nariño_municipios.pdf")
## Saving 7 x 5 in image
ggsave("map_nariño.png", width = 6, height = 6, dpi = "screen")
El primer paso es instalar la libreria leafflet usando el comando:
#install.packages("leaflet")
Y se llama a la libreria:
library(leaflet)
Para poder usar la libreria, se necesita convertir el objeto de nariño_points desde simple features a spatial points:
nar_points <- as(nariño_points, 'Spatial')
Y para ver lo que hay dentro del objeto se usa:
#head(nar_points)
Para poder ver el area de los municipios se instala el paquete lwgeom
#install.packages("lwgeom")
Y se carga la libreria:
library(lwgeom)
## Linking to liblwgeom 3.0.0beta1 r16016, GEOS 3.8.0, PROJ 6.3.1
Ahora es posible calcular el area de cada municipio (en metros cuadrados) de la siguiente forma:
munic_nariño$area <- st_area(munic_nariño)
Y ahora se busca almacenar el área en kilómetros cuadrados:
munic_nariño$km2 <- munic_nariño$area/(1000000)
se verifica la salida:
munic_nariño$km2
## Units: [m^2]
## [1] 101.25724 64.99166 248.39090 386.96405 111.57203 39.79601
## [7] 55.49148 349.01380 538.40673 129.15778 602.62339 118.94025
## [13] 43.05150 303.62802 1096.11385 38.50430 47.44962 56.88452
## [19] 68.65473 60.01407 41.73274 634.16147 61.58378 25.22962
## [25] 64.60346 115.08920 233.90009 217.24463 145.81539 119.44494
## [31] 306.10785 215.43633 135.17101 102.38269 566.56033 238.25391
## [37] 135.85540 246.52511 393.48336 155.02832 141.74342 116.31368
## [43] 309.42650 29.84915 80.23950 81.43645 1566.53096 911.10183
## [49] 353.82363 518.49216 244.01202 953.00053 432.80073 1050.64666
## [55] 2719.00147 2480.07375 413.73801 1799.38198 763.58791 997.66434
## [61] 521.91233 1449.45897 1219.17160 3588.53943
De nuevo, se necesita hacer una conversion desde simples features a spatial polygons:
nar_mun <- as(munic_nariño, 'Spatial')
Y se observa lo que hay dentro del objeto:
#head(nar_mun)
Ahora, hay que preparar el plot:
bins <- c(0, 50, 100, 200, 300, 500, 1000, 2000, Inf)
pal <- colorBin("YlOrRd", domain = nar_mun$km2, bins = bins)
labels <- munic_nariño$MPIO_CNMBR
labels
## [1] "SANDONÁ" "SAN BERNARDO"
## [3] "SAN LORENZO" "POTOSÍ"
## [5] "SAN PABLO" "PROVIDENCIA"
## [7] "SAN PEDRO DE CARTAGO" "PUERRES"
## [9] "SANTA CRUZ (Guachavés)" "PUPIALES"
## [11] "SAMANIEGO" "CONSACÁ"
## [13] "CONTADERO" "CÓRDOBA"
## [15] "PASTO" "ALBÁN (San José)"
## [17] "ALDANA" "CUASPUD"
## [19] "ANCUYA" "ARBOLEDA"
## [21] "BELEN" "BUESACO"
## [23] "COLON" "NARIÑO"
## [25] "OSPINA" "SAPUYES"
## [27] "TAMINANGO" "TANGUA"
## [29] "CHACHAGÜÍ" "EL PEÑOL"
## [31] "EL TABLÓN DE GÓMEZ" "TUQUERRES"
## [33] "LINARES" "YACUANQUER"
## [35] "MALLAMA (Piedrancha)" "LA CRUZ"
## [37] "LA FLORIDA" "EL TAMBO"
## [39] "FUNES" "GUACHUCAL"
## [41] "LA UNIÓN" "GUAITARILLA"
## [43] "LEIVA" "GUALMATÁN"
## [45] "ILES" "IMUES"
## [47] "IPIALES" "CUMBAL"
## [49] "CUMBITARA" "EL ROSARIO"
## [51] "LA LLANADA" "LOS ANDES"
## [53] "POLICARPA" "RICAURTE"
## [55] "BARBACOAS" "EL CHARCO"
## [57] "LA TOLA" "MAGÜÍ (Payán)"
## [59] "MOSQUERA" "OLAYA HERRERA (Bocas de Satinga)"
## [61] "FRANCISCO PIZARRO (Salahonda)" "ROBERTO PAYÁN (San José)"
## [63] "SANTA BÁRBARA (Iscuandé)" "TUMACO"
Ahora, podemos crear el plot interactivo:
m <- leaflet(nar_mun) %>%
setView(-77.8, 1.3, 7) %>% addPolygons(
fillColor = ~pal(km2),
weight = 2,
opacity = 1,
color = "white",
dashArray = "3",
fillOpacity = 0.7,
highlight = highlightOptions(
weight = 5,
color = "#666",
dashArray = "",
fillOpacity = 0.7,
bringToFront = TRUE),
label = labels) %>%
addLegend(pal = pal, values = ~km2, opacity = 0.7, title = NULL,
position = "bottomright")
Y observamos el plot:
m
Y para mejorar la observación, se utiliza mapas bases como muestra a continuación:
leaflet() %>%
addProviderTiles(providers$CartoDB.DarkMatterNoLabels , options = providerTileOptions( opacity = 0.99)) %>%
addPolygons(data = nar_mun, popup = nar_mun$MPIO_CNMBR, fillColor = ~pal(km2) ,
weight = 2,
opacity = 1,
color = 'white',
dashArray = "3",
fillOpacity = 0.7,
highlight = highlightOptions(
weight = 5,
fillOpacity = 0.7,
bringToFront = TRUE),
label = labels, stroke = TRUE, smoothFactor = 0.25)
leaflet() %>%
addProviderTiles(providers$Wikimedia , options = providerTileOptions( opacity = 0.99)) %>%
addPolygons(data = nar_mun, popup = nar_mun$MPIO_CNMBR, fillColor = ~pal(km2) ,
weight = 2,
opacity = 1,
color = 'white',
dashArray = "3",
fillOpacity = 0.7,
highlight = highlightOptions(
weight = 5,
fillOpacity = 0.7,
bringToFront = TRUE),
label = labels, stroke = TRUE, smoothFactor = 0.25)
```