Visualización de datos geográficos con OpenStreetMap

La visualización de datos geográficos con OpenStreetMap es una forma poderosa de representar y comprender información espacial utilizando la base de datos abierta y colaborativa más grande del mundo. OpenStreetMap (OSM) proporciona datos geográficos detallados y actualizados, incluyendo carreteras, edificios, puntos de interés y más, que pueden ser utilizados para una amplia gama de aplicaciones de visualización.

Aquí hay algunos aspectos importantes sobre la visualización de datos geográficos con OpenStreetMap:

  • Datos Abiertos y Colaborativos: OpenStreetMap se basa en la contribución de miles de usuarios de todo el mundo que aportan y actualizan datos geográficos de manera colaborativa. Esto significa que los datos son libres y están disponibles para su uso por cualquier persona.

  • Flexibilidad y Personalización: La flexibilidad de OpenStreetMap permite a los usuarios personalizar la visualización según sus necesidades específicas. Esto incluye la capacidad de agregar capas de datos adicionales, como puntos de interés, límites administrativos, información topográfica, entre otros.

  • Herramientas de Visualización: Existen varias herramientas y librerías de software que facilitan la visualización de datos geográficos con OpenStreetMap. Algunas de las más populares incluyen Leaflet, Mapbox, osmdata en R, y varias bibliotecas de Python como Folium y Geopandas.

  • Interactividad: La visualización de datos geográficos con OpenStreetMap permite la creación de mapas interactivos que permiten a los usuarios explorar y analizar los datos de manera dinámica. Esto puede incluir la capacidad de hacer zoom, desplazarse, buscar ubicaciones específicas y activar/desactivar capas de datos.

  • Aplicaciones Diversas: Los datos de OpenStreetMap y las herramientas de visualización asociadas se utilizan en una amplia variedad de aplicaciones, que van desde la planificación urbana y la gestión de recursos naturales hasta la navegación, el turismo, la logística y más.

En resumen, la visualización de datos geográficos con OpenStreetMap proporciona una plataforma versátil y accesible para explorar y comunicar información espacial de manera efectiva.

library(osmdata)
library(tidyverse) 
library(sf) # para procesar info espacial
library(leaflet) # Para generar mapas interactivos

1. Obteniendo Información Espacial (Localidad de Bosa)

La función getbb() en R, cuando se utiliza con el nombre de una ubicación como “Localidad Bosa, Bogotá”, obtiene las coordenadas geográficas del cuadro delimitador (bounding box) que rodea a esa ubicación. Estas coordenadas definen la extensión espacial de la ubicación en términos de longitud y latitud. Al ejecutar bbox <- getbb(“Localidad Bosa, Bogotá”), se podrá delimitar el área de interés en un mapa o recuperar datos geográficos específicos que se encuentren dentro de ese cuadro delimitador.

Por lo tanto, bbox contendrá las coordenadas de la caja delimitadora que rodea la “Localidad Bosa, Bogotá”, y puedes usar este objeto para trabajar con datos espaciales relacionados con esa área específica.

bbox <- getbb("Localidad Bosa, Bogotá")
bbox
##          min       max
## x -74.223514 -74.15214
## y   4.595715   4.65501

La función getbb() con el parámetro format_out = “sf_polygon” devuelve el cuadro delimitador (bounding box) como un polígono simple en formato sf (simple feature) en lugar de simplemente como un conjunto de coordenadas. Este objeto contendrá información espacial sobre el polígono que representa el cuadro delimitador de la “Localidad Bosa, Bogotá”, lo que te permite realizar análisis y visualizaciones espaciales más detalladas con él.

bbox_poly <- getbb("Localidad Bosa, Bogotá", format_out = "sf_polygon")
bbox_poly
## Simple feature collection with 2 features and 0 fields
## Geometry type: POLYGON
## Dimension:     XY
## Bounding box:  xmin: -74.22351 ymin: 4.595715 xmax: -74.15214 ymax: 4.65501
## Geodetic CRS:  WGS 84
##                         geometry
## 1 POLYGON ((-74.22351 4.62523...
## 2 POLYGON ((-74.18505 4.61076...

Observese el mapa de la localidad Bogotana “Bosa”.

leaflet(bbox_poly) %>%
  addTiles() %>% 
  addPolygons()

la función opq() de la librería osmdata en R define una consulta a OpenStreetMap (OSM) dentro del cuadro delimitador especificado por bbox. Luego, se utiliza la función add_osm_feature() para agregar la característica de “highway” a la consulta, lo que significa que se están buscando elementos de carreteras en el área especificada por bbox.

bosa <- opq(bbox) %>% 
  add_osm_feature(key = "highway")
bosa
## $bbox
## [1] "4.5957151,-74.2235137,4.65501,-74.152139"
## 
## $prefix
## [1] "[out:xml][timeout:25];\n(\n"
## 
## $suffix
## [1] ");\n(._;>;);\nout body;"
## 
## $features
## [1] "[\"highway\"]"
## 
## $osm_types
## [1] "node"     "way"      "relation"
## 
## attr(,"class")
## [1] "list"           "overpass_query"
## attr(,"nodes_only")
## [1] FALSE

2. Mapa de calles

Las siguientes lineas de código convierten el objeto osmdata en un objeto sf (simple feature) de la librería sf, que es un tipo de dato especialmente diseñado para almacenar datos geoespaciales en R.

bosa <- bosa %>% 
  osmdata_sf()
bosa

calles <- bosa$osm_lines
library(ggplot2)

# Crear el gráfico ggplot
ggplot() +
  geom_sf(data = calles) +
  labs(x = "Longitud", y = "Latitud") +  # Establecer etiquetas de los ejes
  scale_x_continuous(labels = function(x) paste0(x, "°W")) +  # Personalizar etiquetas del eje x
  scale_y_continuous(labels = function(y) paste0(y, "°N")) +     # Personalizar etiquetas del eje y
  ggtitle("Mapa de Calles en Bosa") +
  theme(plot.title = element_text(hjust = 0.5))

Delimitando mapa con respecto a fronteras de la localidad.

#bbox_poly  es el objeto que limita las localidades erfectmente
calles <- st_intersection(calles, bbox_poly)


ggplot() +
  geom_sf(data = calles) +
  labs(x = "Longitud", y = "Latitud") +  # Establecer etiquetas de los ejes
  scale_x_continuous(labels = function(x) paste0(x, "°W")) +  # Personalizar etiquetas del eje x
  scale_y_continuous(labels = function(y) paste0(y, "°N")) +     # Personalizar etiquetas del eje y
  ggtitle("Mapa de Calles en Bosa") +
  theme(plot.title = element_text(hjust = 0.5))

2.1 Avenidas Importantes (Localidad Bosa)

Accediendo a la variable 10 que hace referencia a división política del continente:

calles <- calles %>% 
  mutate(maxspeed = as.numeric(maxspeed),
         lanes = ifelse(is.na(lanes), 1, as.numeric(lanes)))

ggplot() +
  geom_sf(data = calles,
          color = "gray40", alpha = .5) +
  geom_sf(data = filter(calles, str_detect(name, "Avenida")), 
          color = "salmon") +
  theme_void() +
  labs(title = "Bosa - Bogotá",
       subtitle = "Avenidas Importantes",
       caption = "fuente: OpenStreetMap")

3. Bares en una región pequeña de Bogotá (Salitre)

Se quiere analizar los establecimientos del barrio o cercanías de este, específicamente identificar los bares que tienen Wifi. Se usa la función getbb() con el parámetro format_out = “sf_polygon” el cual devuelve el cuadro delimitador (bounding box) como un polígono simple en formato sf (simple feature) en lugar de simplemente como un conjunto de coordenadas. Este objeto contendrá información espacial sobre el polígono que representa el cuadro delimitador de la “Localidad Bosa, Bogotá”, lo que te permite realizar análisis y visualizaciones espaciales más detalladas con él. Se identifica por medio de OpenStreetMap el lugar Salitre en Bogotá:

bbox_st <- getbb('salitre, localidad Fontibon Bogotá');bbox_st   
##         min        max
## x -74.12080 -74.103423
## y   4.64516   4.666457
bbox_st_poly = getbb("salitre, localidad Fontibon Bogotá", format_out = "sf_polygon") ;bbox_st_poly
## Simple feature collection with 9 features and 0 fields
## Geometry type: POLYGON
## Dimension:     XY
## Bounding box:  xmin: -74.1208 ymin: 4.64516 xmax: -74.10342 ymax: 4.673337
## Geodetic CRS:  WGS 84
##                         geometry
## 1 POLYGON ((-74.1208 4.655896...
## 2 POLYGON ((-74.11755 4.67291...
## 3 POLYGON ((-74.1124 4.649899...
## 4 POLYGON ((-74.10964 4.65896...
## 5 POLYGON ((-74.1105 4.649187...
## 6 POLYGON ((-74.11181 4.66007...
## 7 POLYGON ((-74.10772 4.65592...
## 8 POLYGON ((-74.10847 4.65237...
## 9 POLYGON ((-74.10972 4.64853...

La anterior salida indica la extensión espacial del polígono representado en las coordenadas mínimas y máximas tanto en el eje x como en el eje y. Aquí está el significado de cada parte:

  • min: Coordenadas mínimas en x e y del polígono.
  • max: Coordenadas máximas en x e y del polígono.
  • Simple feature collection: Indica que es una colección de características simples, que en este caso son polígonos.
  • Geometry type: Indica el tipo de geometría, que en este caso es un polígono.
  • Bounding box: Muestra el cuadro delimitador del polígono, que es el rectángulo más pequeño que contiene todo el polígono. Esto se da en las coordenadas mínimas y máximas de x e y.
  • Geodetic CRS (Sistema de Referencia de Coordenadas): Indica el sistema de referencia espacial utilizado, que en este caso es WGS 84, un sistema de coordenadas geográficas ampliamente utilizado.

Obsérvese el gráfico de la búsqueda de OpenStreetMap sobre “Salitre”:

leaflet(bbox_st_poly) %>% 
  addTiles() %>% 
  addPolygons()

Se busca las calles y los bares ubicados en este recuadro espacial:

elcorzo_calles <- opq(bbox_st) %>% 
  add_osm_feature(key = "highway") %>% 
  osmdata_sf()

elcorzo_bares <- opq(bbox_st) %>% 
  add_osm_feature(key = "amenity", value = "bar") %>% 
  osmdata_sf() 

Una gráfica que permite observar los establecimientos tipo Bar que tienen o no tienen servicio de Wifi:

elcorzo_calles2 <- st_intersection(elcorzo_calles$osm_lines, bbox_st_poly)
elcorzo_bares2 <- st_intersection(elcorzo_bares$osm_points, bbox_st_poly)


ggplot() +
  geom_sf(data = elcorzo_calles2, 
          color = "darkslateblue") +
  geom_sf(data = elcorzo_bares2, 
          aes(color = wifi)) +
  theme_void() +
  labs(title = "Salitre Bogotá",
       subtitle = "Bares",
       caption = "fuente: OpenStreetMap",
       color = "Ofrecen wifi")

Una forma de colocar etiquetas de los Bares adjuntos al conjunto de puntos espaciales es por medio de:

ggplot() +
  geom_sf(data = elcorzo_calles2, 
          color = "darkslateblue") +
  geom_sf_label(data = elcorzo_bares2, 
                aes(label = name), size = 2) +
  theme_void() +
  labs(title = "Salitre Bogotá",
       subtitle = "Bares",
       caption = "fuente: OpenStreetMap",
       color = "Ofrecen wifi")

Consderando lo anterior, se procede a visualizar todos los datos en una sola visualización

library(ggsflabel)

ggplot() +
  geom_sf(data = elcorzo_calles2, 
          color = "darkslateblue") +
  geom_sf(data = elcorzo_bares2, 
          aes(color = wifi)) +
  geom_sf_label_repel(data = elcorzo_bares2, 
                      aes(label = name), size = 2) +
  theme_void() +
  labs(title = "Salitre Bogotá",
       subtitle = "Bares",
       caption = "fuente: OpenStreetMap",
       color = "Ofrecen wifi")

3.1 Uso de OpenStreetMap para el desarrollo de mapas

El uso y el desarrollo de visualizaciones tipo mapa para identificar establecimientos mediante OpenStreetMap ofrecen una poderosa herramienta para la exploración y comprensión de la geografía humana y los patrones de distribución espacial de diferentes tipos de lugares de interés. Algunas conclusiones generales sobre este enfoque incluyen:

  • Acceso a datos geoespaciales detallados: OpenStreetMap proporciona una fuente de datos geográficos de código abierto y globalmente accesible, lo que permite a los usuarios acceder a información detallada sobre carreteras, edificios, puntos de interés y otras características geográficas.

  • Flexibilidad y personalización: Las visualizaciones basadas en OpenStreetMap ofrecen flexibilidad y capacidad de personalización, lo que permite a los desarrolladores adaptar las visualizaciones a sus necesidades específicas. Esto incluye la capacidad de agregar capas adicionales de datos, como información sobre establecimientos específicos, límites administrativos, datos demográficos, entre otros.

  • Exploración interactiva: Las herramientas de visualización basadas en OpenStreetMap suelen ser interactivas, lo que permite a los usuarios explorar y analizar los datos geográficos de manera dinámica. Esto facilita la identificación de patrones espaciales, la realización de análisis de proximidad y la toma de decisiones informadas.

  • Aplicaciones prácticas: Estas visualizaciones tienen numerosas aplicaciones prácticas en una variedad de campos, como la planificación urbana, el análisis de mercado, la gestión de recursos naturales, la logística y el turismo. Por ejemplo, los comerciantes pueden utilizar estas herramientas para identificar ubicaciones estratégicas para sus negocios, mientras que los planificadores urbanos pueden emplearlas para evaluar la accesibilidad a servicios públicos.