Centros Comerciales en el Municipio de Valencia
Input
Se ha obtenido un conjunto de datos acerca de los Centros Comerciales en el municipio de Valencia a través de OpenStreetMap (OSM) utilizando el paquete osmdata.
OSM es una base de datos geoespacial de código abierto y colaborativa que contiene información detallada sobre características geográficas de todo el mundo, como carreteras, edificios, ríos, parques, entre otros. Los datos son creados por personas voluntarias que contribuyen en el proyecto aportando información geoespacial, lo cual puede ocasionar duplicados en los datos y variables diferentes para cada registro. Por otro lado, el paquete osmdata en R proporciona una interfaz para acceder y trabajar con datos de OpenStreetMap dentro del entorno de R. Permite descargar datos directamente utilizando consultas espaciales.
Descripcion
Cargamos las librerias
En primer lugar, creamos el bounding box del municipio de Valencia, obtenido del paquete mapSpain:
muni <- mapSpain::esp_get_munic()%>%
sf::st_transform(crs=4326)
valencia <- muni %>% filter(LAU_CODE == "46250")
bb_vlc <- sf::st_bbox(valencia)
Una vez creado el bounding box, realizamos la consulta pertinente para obtener los centros comerciales de Valencia mediante osmdata:
# descargamos los centros comerciales de valencia
centros_comerciales_vlc <- bb_vlc %>%
opq(timeout = 1000) %>%
add_osm_feature(key = "shop",
value = "mall") %>%
osmdata_sf()
class(centros_comerciales_vlc)
[1] "list" "osmdata" "osmdata_sf"
class(centros_comerciales_vlc$osm_polygons)
[1] "sf" "data.frame"
dim(centros_comerciales_vlc$osm_polygons)
[1] 34 32
Obtenemos una lista osmdata formada por objetos sf, de estos se ha utilizado el correspondiente a la geometria POLYGON dado que los centros comerciales han sido registrados así en OSM.
Nos encontramos con 34 centros identificados como poligonos y 32 columnas, de las cuales nos interesa el nombre, la dirección y la geometría dada la abundante cantidad de NA en el resto de variables.
Vamos a visualizarlos:
leaflet() %>%
addProviderTiles("CartoDB.Positron") %>%
setView(lng = -0.37738226718744966,
lat = 39.46954596430446,
zoom = 11) %>%
addPolygons(data = centros_comerciales_vlc$osm_polygons, color = "#00FFFF",
fillOpacity = 0.8)
De los 34 centros solo se muestran alrededor de 15. Podemos observar, sobretodo al norte de la ciudad, que se muestran centros comerciales alejados del municipio. En el centro de Valencia, parece que la ubicacion de algunos centros comerciales como Corte Inglés no se han registrado.
Tratamiento
Se ha observado la aparición de centros comerciales fuera de los límites municipales y la ausencia de algunos
centros_comerciales_vlc_sf <- centros_comerciales_vlc$osm_polygons
# nos quedamos ahora si, con los centros comerciales de la ciudad
centros_comerciales_vlc_sf <- st_intersection(centros_comerciales_vlc_sf,muni %>% filter(cmun == "250"))
# los convertimos en puntos en lugar de poligonos
centros_comerciales_vlc_points <- st_centroid(centros_comerciales_vlc_sf)
Ahora nos hemos quedado con 23 centros comerciales
Resulta que hay un par de centros comerciales de El Corte Inglés que no se han registrado en OSM y que, por tanto, no hemos podido visualizar su ubicación.
Para ello, se han usado las direcciones de El Corte Inglés en Valencia para obtener sus coordenadas de manera oficial, copiando las direcciones y pegándolas en un Excel y posteriormente se ha hecho uso de una API key de Google Maps para geocodificar a través de su servicio.
corte_ingles <- read_excel("data/corte_ingles.xlsx")
corte_ingles_geocod <- tidygeocoder::geocode(corte_ingles, address = DIRECCION, method = "google")
corte_ingles_geocod <-st_as_sf(corte_ingles_geocod, coords = c("long", "lat"), crs = 4326) # creamos la geometria
Ahora veremos la diferencia añadiendo en verde los centros comerciales de El Corte Inglés y en azul los centros obtenidos a través de OSM:
leaflet() %>%
addProviderTiles("CartoDB.Positron") %>%
setView(lng = -0.37738226718744966,
lat = 39.46954596430446,
zoom = 11) %>%
addCircleMarkers(
data = corte_ingles_geocod,
color = "green",
fillOpacity = 0.8, group = "Corte Inglés", label = ~NOMBRE, radius = 5) %>%
addCircleMarkers(data = centros_comerciales_vlc_points, color = "#00FFFF",
fillOpacity = 0.8, group = "Centros Comerciales", radius = 5) %>%
addLayersControl(overlayGroups = c("Corte Inglés", "Centros Comerciales"))
Podemos observar 2 centros no registrados y además un punto alejado que se corresponde con el Centro Comercial El Manar, ubicado en la playa de Masalfasar.
A continuación vamos a adecuar ambos conjuntos de datos para unirlos
corte_ingles_geocod_sel <- corte_ingles_geocod %>% select(NOMBRE, DIRECCION, geometry)
centros_comerciales_vlc_points_sel <- centros_comerciales_vlc_points %>%
rename(NOMBRE = name, DIRECCION = addr.street)
centros_comerciales_vlc_points_sel <- centros_comerciales_vlc_points_sel %>% select(NOMBRE, DIRECCION, geometry)
cc_vlc <- rbind(corte_ingles_geocod_sel, centros_comerciales_vlc_points_sel)
cc_vlc <- cc_vlc %>% filter(!(NOMBRE == "El Manar" & !is.na(NOMBRE)))
Output
dim(cc_vlc)
[1] 26 3
Nos quedamos con un objeto sf formado por 26 observaciones, en las que figuran diversos NA. Estos no afectan a la visualización asi que se mantendran en el dataset. Finalmente podemos comprobar que todos los centros comerciales se encuentran dentro de los límites del municipio de Valencia
leaflet() %>%
addProviderTiles("CartoDB.Positron") %>%
setView(lng = -0.37738226718744966,
lat = 39.46954596430446,
zoom = 11) %>%
addCircleMarkers(data = cc_vlc, color = "#00FFFF",
fillOpacity = 0.8, label = ~NOMBRE, radius = 5)
sf::st_write(cc_vlc, "centroscomerciales_vlc.gpkg")
El fichero final en formato GeoPackage (gpkg) puede descargarse clickando aquí.
Proyecto de Innovación Educativa Emergente (PIEE-2737007)