Este “mini” proyecto, se basa en mi propia necesidad de crecer aprendiendo, por lo que está alineado con mi plan de actuación MiPágina; y forma parte de un paso de él.
El siguiente será la integración, adaptación y mejora, de lo visto aquí, con Shiny y con ShinyDasboard (más adelante se verá flexDasboard, pero no en este proyecto).
Y como todo lo relacionado con tecnologías opensource, siempre hay un componente de ayuda y colaboración, y este pequeño proyecto, no podría ser menos, de ahí el código en abierto.
Ni que decir tiene, que la geolocalización, y georreferenciación, son fundamentales en cualquier sector, pero sobre todo en los correspondientes a:
Sector Administraciones Públicas. Posicionamiento de lindes, cálculo de áreas, mapeos estadísticos -socioeconómicos, etc.
Sector Primario. Agricultura de precisión, área forestal, cálculo de biomasa. En jardinería también, en grandes ciudades, reduciendo rutas, control espacial del regadio, etc.
Sector Energía Renovables. Estudio de la generación de energía distribuida, eligiendo la localización que maximice el emplazamiento, promedio anual de velocidad, Geotérmica (heatmap), etc.
etc.
Desde los análisis de delincuencia hasta la vigilancia de enfermedades, pasando por políticas de venta minorista y públicas, etc. Por ello, esta muestra de lo que puede hacerse, aunque son múltiples sus aplicaciones y usos.
Queremos conseguir representar datos, dentro de un mapa, que tengan relación con la población, tasa de empleo, etc, por franja de edad, sexo, etc.
Para ello se extraen los datos georreferenciados, mediante la página oficial de la Junta de Andalucía, diferenciando en:
Datos georrefenciados mediante malla de 250 m * 250 m a 1 de Enero de 2019 Enlace Metadatos de la Malla de Población
Datos Estadisticos de población de Andalucia basadas, en registros administrativos o secciones censales Enlace datos espaciales
¿Por qué? Para conseguir diferentes visualizaciones y formas de representar datos. Además, en mi caso, como usuario de QGIS o de ArcGis, quería realizar el paso de la integración de mapas, en base a GIS, pero sin usar ninguno. Para ello, sí es necesario manejar toda la georreferenciación asociada, y sus proyecciones, en las respectivas coordenadas, dentro de RStudio.
## [1] "Cargado Correctamente el paquete tidyverse"
## [2] "Cargado Correctamente el paquete data.table"
## [3] "Cargado Correctamente el paquete sf"
## [4] "Cargado Correctamente el paquete leaflet"
## [5] "Cargado Correctamente el paquete leaflet.extras"
## [6] "Cargado Correctamente el paquete htmlwidgets"
## [7] "Cargado Correctamente el paquete readxl"
## [8] "Cargado Correctamente el paquete knitr"
## [9] "Cargado Correctamente el paquete kableExtra"
## [10] "Cargado Correctamente el paquete stringr"
## [11] "Cargado Correctamente el paquete xlsx"
## [12] "Cargado Correctamente el paquete shiny"
## [13] "Cargado Correctamente el paquete htmltools"
## [14] "Cargado Correctamente el paquete devtools"
## [15] "Cargado Correctamente el paquete kableExtra"
## [16] "Cargado Correctamente el paquete sparkline"
## tidyverse data.table sf leaflet leaflet.extras
## TRUE TRUE TRUE TRUE TRUE
## htmlwidgets readxl knitr kableExtra stringr
## TRUE TRUE TRUE TRUE TRUE
## xlsx shiny htmltools devtools kableExtra
## TRUE TRUE TRUE TRUE TRUE
## sparkline
## TRUE
Como comentamos anteriormente, se descargan los formatos “shape”, que nos son necesarios para realizar las proyecciones, en nuestro caso corresponden a polígonos.
Dentro de los 5 formatos que nos dan los archivos georreferenciados, en GIS, existen: “.cpg, .dbf, .prj, .qpj, .shp y .shx”, nos hacen falta los de extensión: “.shp”.
Importante señalar, que para ver correctamente los datos en el mapa, es necesario interactuar con él, es decir, pasar el cursor por el sitio recomendado, escribir la dirección que queremos encontrar dentro del buscador, seleccionar el mapa que queremos ver de fondo, etc.
# Formato Malla
sscc_andalucia_mallas<-read_sf("Malla_Estadistica/mep19_250.shp")El formato obtenido de la: Página Oficial Junta de Andalucia, se basa en una malla de población 250 m x 250 m a 1 de enero de 2019 (mep19_250m), elaborada por el Instituto de Estadística y Cartografía de Andalucía, que permite disponer de información minuciosa y actualizada de la distribución de la población en Andalucía, al margen de las divisiones administrativas.
Se trata de una malla de celdillas habitadas de 250 m x 250 m a las que, mediante georreferenciación, se les ha asignado la población del ámbito que ocupan tomando como referencia el número de residentes inscrito a 1 de enero de 2019 en la Base de Datos Longitudinal de Población de Andalucía.
Siempre y cuando el secreto estadístico no se vea comprometido además del total de población, cada celdilla ofrece información sociodemográfica permitiéndonos conocer la población residente según grandes grupos de edad, nacionalidad, lugar de nacimiento en relación al lugar de residencia, tiempo de residencia, estado de afiliación, percepción de pensiones contributivas de la Seguridad Social, ingresos medianos de cada tipología de pensión y demandantes de empleo del Servicio Andaluz de Empleo.
La página web del Instituto de Estadística y Cartografía de Andalucía ofrece un servicio de visualización: Distribución espacial de la población de Andalucía que permite su consulta interactiva, así como servicios interoperables WMS y WFS, a los que se puede acceder desde este enlace:
http://www.juntadeandalucia.es/institutodeestadisticaycartografia/distribucionpob/index.htm
# Por Grid
sscc_andalucia_mallas<-st_transform(sscc_andalucia_mallas, crs =4326)# Utilizamos kableExtra
sscc_andalucia_mallasNota: Los valores -1, tal y como indica la referencia, son debidos al secreto estadístico
# Leyenda
Leyenda<-read_xls("C:/Users/evely/Documents/R/MapasRaul/Datos_Malla_Estadistica.xls", sheet ="Diseno")
# Modificación
Leyenda<-Leyenda %>%
select(-TIPO)
# Vemos el significado de todo
Leyenda %>%
head(20) %>%
kbl(caption = "Recreating booktabs style table") %>%
kable_classic(full_width = F, html_font = "Cambria")| NOMBRE | DESCRIPCIÓN |
|---|---|
| gidmp | Identificador único de la celda de población |
| grd_fixid | Código de celda 250m (INSPIRE) |
| grd_floaid | Código de celda 250m (INSPIRE) |
| grd_inspir_1k | Código de celda 1km (INSPIRE) |
| municipio | Municipio o municipios en los que se encuentra la celda |
| cmun | Código de municipio o municipios en los que se encuentra la celda |
| csecc | Código de sección o secciones censales en los que se encuentra la celda1 |
| pob_tot | Población total de la celda |
| pob_m | Población de mujeres. |
| pob_h | Población de hombres. |
| edad0015 | Población menor de 16 años |
| edad1664 | Población con edad entre 16 y 64 años |
| edad65_ | Población mayor de 64 años |
| esp | Población con nacionalidad española |
| ue15 | Población con nacionalidad de algunos de los estados miembros de la Unión Europea con fecha de ingreso anterior a 2004. Se excluye España |
| mag | Población con nacionalidad de alguno de los países del Magreb |
| ams | Población con nacionalidad de alguno de los países de Sudamérica |
| otr | Población con nacionalidad de algún país no incluido en los cuatro campos anteriores |
| muni | Población por lugar de nacimiento en relación al lugar de residencia: mismo municipio1 |
| mund | Población por lugar de nacimiento en relación al lugar de residencia: distinto municipio y misma provincia1 |
sscc_andalucia_mallas$POB_TOT[which.min(sscc_andalucia_mallas$POB_TOT)]## [1] -1
sscc_andalucia_mallas$POB_TOT[which.max(sscc_andalucia_mallas$POB_TOT)]## [1] 4610
labels_1 <- sprintf(
"<strong>%s</strong><br/ >%g=Poblacion Total / %g=Población menor de 16 años/",
sscc_andalucia_mallas$MUNICIPIO, sscc_andalucia_mallas$POB_TOT, sscc_andalucia_mallas$EDAD0015) %>%
lapply(htmltools::HTML)Actualmente, existen 3 funciones de color, para la entrada continua de colores:
Para mas información, consultar: Folleto
# Degradado para los colores
tramos_1 <- c(-1,0, 500,1000,1500,2000,2500,3000,3500,4000,Inf)
pal_1 <- colorBin("YlGnBu", domain = sscc_andalucia_mallas$POB_TOT, bins = tramos_1)# Creación del mennu para cambiar de mapa
l<-leaflet() %>%
addTiles() %>%
# Creación del mapa
setView(lng = -4.42034,lat = 36.72016,zoom = 7) %>% # Centrado en Málaga
addPolygons(data =sscc_andalucia_mallas,
color = 'red',
weight = 0.1,
smoothFactor = 0.5,
opacity = 1.0,
fillColor = pal_1(sscc_andalucia_mallas$POB_TOT),
fillOpacity = 0.5,
highlightOptions = highlightOptions(color = 'black',
weight = 2, bringToFront = TRUE),
label = labels_1,
labelOptions = labelOptions(style = list("font-weight" = "normal",
padding = "3px 8px"),
textsize = "15px",
direction = "auto")) %>%
# Leyenda
addLegend(pal = pal_1,
values = sscc_andalucia_mallas$POB_TOT,
opacity = 0.3,
title = 'Población Total por malla',
position = "bottomright") %>%
# para volver a la visión inical
addResetMapButton() %>%
# para buscar direcciones o pueblos
addSearchOSM()# Añadimos el basegroup para poder elegir la capa que queramos de los mapas
l <-l
esri <- grep("^Esri", providers, value = TRUE)
for (provider in esri) {
l <- l %>% addProviderTiles(provider, group = provider)
}
l %>%
addLayersControl(
baseGroups = names(esri),options = layersControlOptions(collapsed = TRUE)) %>%
addMiniMap(tiles = esri[[1]], toggleDisplay = TRUE,position = "bottomleft") %>%
htmlwidgets::onRender("function(el, x) {var myMap = this;
myMap.on('baselayerchange',
function (e) {
myMap.minimap.changeLayer(L.tileLayer.provider(e.name));
})
}"
)