OpenStreetMaps (OSM) es un proyecto colaborativo que busca crear un mapa del mundo de código abierto y gratuito. Los datos en OpenStreetMaps son creados y mantenidos por una comunidad global de mapeadores voluntarios, quienes contribuyen con información geoespacial detallada, como carreteras, edificios, lugares de interés y más. Estos datos pueden ser utilizados por cualquier persona para diversos propósitos, desde la navegación hasta el análisis geoespacial, y se distribuyen bajo una licencia abierta que permite su uso y redistribución libremente.
Este proyecto se va a centrar en los Supermecados Consum en la ciudad de Valencia. Vamos a ver los puntos geograficos, que se obtendran utilizando una query a la pagina web de OpenStreetMaps (OSM).
Uno de los principales de OSM es su caracter colaborativo, esto implica que haya una gran cantidad de datos, aunque por otra parte una de las desventajas es la falta de información en algunos datos y los datos que pueden estar repetidos.
Por eso en esta práctica pretendemos demostrar los errores que tendremos y tambien tecnicas para poder solucionarlos, y obtener puntos con mayor calidad.
Descripción
Primero descargamos las librerias que vamos a utilizar
Warning: package 'dbscan' was built under R version 4.4.3
Adjuntando el paquete: 'dbscan'
The following object is masked from 'package:stats':
as.dendrogram
Una vez cargadas las librerias, vamos a definir el bounding box. En nuestro caso sera la ciudad de Valencia. Asi solo obtendremos la información de nuestro municipio.
# Municipio de Valencia con MapSpainval<-mapSpain::esp_get_munic()%>%filter(LAU_CODE=="46250")#Creamos el boundin boxbbox_val<-sf::st_bbox(val)
Ahora procedemos a cargar los datos de la pagina web de OSM usando el bounding box creado anteriormente.
# Supermercados Consum en Valenciaq<-bbox_val%>%osmdata::opq(timeout =2000)%>%osmdata::add_osm_feature("name", "Consum")%>%osmdata::add_osm_feature("shop", "supermarket")
En nuestri caso hemos filtrado por tienda y dentro de tienda el nombre Consum.
El siguiente paso es obtener los datos en formato simple feature (sf). Existen muchos formatos, pero a nosotros nos interesa en formato sf.
Warning: sf layer has inconsistent datum (+proj=longlat +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +no_defs).
Need '+proj=longlat +datum=WGS84'
Ahora vemos, como hay puntos que estan superpuestos, otros que cuenta cada puerta del supermecado como un supermercado distinto, y el mas claro que hay puntos representados que estan fuera del municipio de Valencia.
Tratamiento
Para corregir estos errores voy a proceder a usar este metodo, no tiene porque ser el mejor o el único, pero bajo mi criterio considero que es el adecuado. Para solucionar el problema de las puertas y los puntos superpuestos, utilizare DBSCAN. Es un algoritmo de agrupación basado en el ruido.
Warning: sf layer has inconsistent datum (+proj=longlat +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +no_defs).
Need '+proj=longlat +datum=WGS84'
Ahora podemos apreciar como pasamos de tener 200 observaciones a tener solo 71. El siguiente paso es eliminar los Consums de fuera de Valencia, para ello utilizaremos “st_diference”. Obviamente a partir de ahora vamos a seguir con el nuevo data frame de 71 observaciones.
# Puntos fuera de Valenciaconsums_fuera<-sf::st_difference(consum_sf1,val)
Warning: attribute variables are assumed to be spatially constant throughout
all geometries
Vemos como hemos pasado de tener 200 observaciones, a finalmente solo tener 48 Consums en el municipio de Valencia.
Output
Una vez finalizado el tratamiento de los datos, procedo a mostrar esta figura donde se puede apreciar como se han corregido los errores. Primero muestro el grafico con leaflet, donde se observa bien la correción, y a posterior otro gráfico donde tambien se aprecia la corrección de errores.
Ahora tenemos un fichero de datos de los Consums en el municipio de Valencia libre de errores. Recordar que los datos han sido obtenidos de OpenStreetMap. Hemos aplicado DBSCAN y transformaciones del paquete “sf”.