Darmowe dane w R – OSM
Często w naszych postach używamy danych z projektu OpenStreetMap.
Skąd je bierzemy? Pobieramy je wykorzystując biblioteki R.
Dzisiaj pokażemy Wam jak to zrobić.
Pobieramy i instalujemy pakiet osmdata:
install.packages('osmdata') library(osmdata)
Pobierzemy dane dla konkretnego zakresu. Tworzymy taki zakres jako wektor współrzędnych geograficznych:
bb = c(20.9, 52.2, 21.0, 52.3)
Z projektu OSM możemy pobrać wszystkie dane lub też wybrać konkretne. Musimy pamiętać, że ograniczając wybór przyspieszamy pobieranie. Wszystkie dostępne warstwy znajdziecie na stronie https://wiki.openstreetmap.org/wiki/Map_Features. My wybierzemy dla naszego zakresu restauracje. Zrobimy to taką linijką kodu:
dt <- opq (bbox = bb) %>% add_osm_feature (key = 'cuisine') %>% osmdata_sf()
, gdzie
opq to zapytanie do OSM
add_osm_feature to dodanie do zapytania warstw zawierających obiekty związane z kuchnią key=’cuisine’
osmdata_sf to zapis wyników do klasy sf
W wyniku otrzymujemy warstwy z punktami i poligonami:
> dt Object of class 'osmdata' with: $bbox : 52.2,20.9,52.3,21 $overpass_call : The call submitted to the overpass API $meta : metadata including timestamp and version numbers $osm_points : 'sf' Simple Features Collection with 479 points $osm_lines : NULL $osm_polygons : 'sf' Simple Features Collection with 21 polygons $osm_multilines : NULL $osm_multipolygons : NULL
Wyświetlamy wynik na mapie z użyciem leaflet:
leaflet() %>% addTiles() %>% addCircleMarkers(data = dt$osm_points, radius = 1)
Zakres możemy również zdefiniować używając nazwy obszaru dla którego chcemy pobrać dane:
bb = getbb("Warsaw")
Pobieramy dane tym razem z zawężeniem restauracji serwujących pizzę i zapisujemy do klasy sp:
dt <- opq (bbox = bb) %>% add_osm_feature (key = 'cuisine',value = 'pizza') %>% osmdata_sp()
Wyświetlamy wynik:
leaflet() %>% addTiles() %>% addCircleMarkers(data = dt$osm_points, radius = 1)
W następnych ćwiczeniach możecie już pracować na danych wybranych np. dla Waszego rejonu zamieszkania. Testujcie nowo poznaną bibliotekę.