Wprowadzenie

Celem pierwszej części pracy jest analiza i wizualizacja danych wektorowych pobranych z Open Street Map z wykorzystaniem operatora pipe dla automatyzacji pracy w R. Celem części drugiej jest próba analizy sieciowej z wykorzystaniem pakietu sfnetworks.

Metody

W pierwszej części pracy do analizy i wizualizacji zostaną pobrane dane z OSM o sklepach w Warszawie i kinach w Polsce.

Aby pracować z określonymi danymi, trzeba wczytać pakiety osmdata i sf. Pakiet sf pozwala na obsługę dodatkowych typów danych wektorowych, łatwiejsze przetwarzanie danych oraz obsługę przestrzennych baz danych, natomiast pakiet osmdata umożliwia pobieranie danych z Open Street Map.

library(osmdata)
## Data (c) OpenStreetMap contributors, ODbL 1.0. https://www.openstreetmap.org/copyright
library(sf)
## Linking to GEOS 3.8.0, GDAL 3.0.4, PROJ 6.3.1

Wybierzemy dla analizy dane o rozmieszczeniu salonów samochodowych, sklepów rowerowych oraz sklepów motocyklowych w Warszawie. Za pomocą operatora pipe można pobrać wybrane dane z OSM w następujący sposób:

samochody = opq("warszawa poland") %>%
  add_osm_feature(key = "shop", value = "car") %>%
  osmdata_sf()
rowery = opq("warszawa poland") %>%
  add_osm_feature(key = "shop", value = "bicycle") %>%
  osmdata_sf()
motory = opq("warszawa poland") %>%
  add_osm_feature(key = "shop", value = "motorcycle") %>%
  osmdata_sf()

Wizualizacja danych realizowana za pomocą funkcji plot(). Wykres jest przedstawiony w następnym rozdziale.

Dalej pobierzemy dane o rozmieszczeniu sieci kin w Polsce. W tym celu należy najpierw ustawić zakres współrzędnych określający Polskę:

zasieg = c(14.09, 48.98, 24.15, 54.85)

Następnie za pomocą operatora pipe można pobrać dane o rozmieszczeniu kin Multikino oraz Helios z OSM, dodając do kodu funkcję wyszukiwania po nazwie (np. add_osm_feature(“name”, “Multikino”)):

multikino = opq(zasieg, timeout = 25*100) %>%
  add_osm_feature("amenity", "cinema")%>%
  add_osm_feature("name", "Multikino") %>%
  osmdata_sf()
helios = opq(zasieg, timeout = 25*100) %>%
  add_osm_feature("amenity", "cinema")%>%
  add_osm_feature("name", "Helios") %>%
  osmdata_sf()

Wizualizacja danych realizowana za pomocą funkcji plot(). Wykres jest przedstawiony w następnym rozdziale.

Dla wykonania części drugiej pracy trzeba wczytać następujące pakiety:

library(rgugik)
library(sfnetworks)
library(tidygraph)
## 
## Attaching package: 'tidygraph'
## The following object is masked from 'package:stats':
## 
##     filter

Dla analizy sieciowej zostały wybrane dane BDOT o drogach w Warszawie, które wczytamy w R za pomocą pakietu rgugik:

topodb_download("Warszawa", outdir = "C:\\Users\\daria\\Desktop")
drogi = st_read("C:\\Users\\daria\\Desktop\\PL.PZGiK.330.1465\\BDOT10k\\PL.PZGiK.330.1465__OT_SKDR_L.xml")
## Reading layer `OT_SKDR_L' from data source `C:\Users\daria\Desktop\PL.PZGiK.330.1465\BDOT10k\PL.PZGiK.330.1465__OT_SKDR_L.xml' using driver `GML'
## Simple feature collection with 59776 features and 30 fields
## geometry type:  LINESTRING
## dimension:      XY
## bbox:           xmin: 626541.6 ymin: 472232.8 xmax: 655247.4 ymax: 502061.9
## projected CRS:  ETRS89 / Poland CS92

Do analizy zostały wybrane tylko główne drogi:

drogi_gl = drogi[drogi$x_kod %in% c("SKDR01", "SKDR02", "SKDR03", "SKDR04", "SKDR05"),]

Dalej obiekt sf drogi_gl został zamieniony na obiekt sfnetwork:

net = as_sfnetwork(drogi_gl)

Żeby pozbyć się pseudo-wierzchołków w sieci dróg, korzystamy z funkcji convert():

smooth_net = as_sfnetwork(drogi_gl) %>%
  convert(to_spatial_smooth)

Obliczymy centralność wierzchołków za pomocą funkcji centrality_betweenness():

smooth_net = as_sfnetwork(drogi_gl) %>%
  convert(to_spatial_smooth) %>%
  mutate(bc = centrality_betweenness())

Dla wizualizacji wyników wykorzystujemy pakiet tmap, który trzeba najpierw wczytać:

library(tmap)

Następnie obiekt smooth_net (sfnetwork) trzeba zamienić na obiekt sf za pomocą funkcji st_as_sf():

smooth_sf = st_as_sf(smooth_net)

Wyniki, wizualizacje i wnioski

Dane o lokalizacji w Warszawie sklepów sprzedających samochody, rowery i motocykle zwizualizowano na poniższym wykresie.

plot(st_geometry(samochody$osm_points), col = "orange", main = "Rozmieszczenie sklepow w Warszawie", 
     border = "darkgrey", axes = T, pch = 1, cex = 0.5, las = 1)
plot(st_geometry(rowery$osm_points), pch = 2, col = "blue", add = T)
plot(st_geometry(motory$osm_points), pch = 3, col = "chartreuse3", add = T)
legend("bottomleft", legend = c("Salony samochodowe", "Sklepy rowerowe", "Sklepy motocyklowe"), cex = 0.5, fill = c("orange", "blue", "chartreuse3"))

Korzystając z dodanych opcji funkcji plot, na wykresie przedstawiono lokalizację sklepów w Warszawie według ich specjalizacji: sprzedaż samochodów (kolor pomarańczowy), rowerów (kolor niebieski) i motocykli (kolor zielony). Jak widać na wykresie, w całym mieście jest sporo punktów sprzedaży samochodów i rowerów, natomiast punktów sprzedaży motocykli jest znacznie mniej i one skupione są głównie w centralnej części Warszawy.

Dalej zwizualizujemy dane o lokalizacji sieci kin w Polsce:

plot(st_geometry(multikino$osm_points), col = "red", main = "Rozmieszczenie kin w Polsce", 
     border = "darkgrey", axes = T, pch = 2, las = 1)
plot(st_geometry(helios$osm_points), pch = 3, col = "blue", add = T)
legend("bottomright", legend = c("Multikino", "Helios"), fill = c("red", "blue"))

Wykres przedstawia rozmieszczenie sieci kin Multikino i Helios w Polsce. Jak widać, w Polsce dominują kina sieci Helios, z których większość znajduje się w centralnej i południowej Polsce. Większość kin sieci Multikino zlokalizowana jest w północnej i południowej Polsce.

Na poniższym wykresie zwizualizowano sieć głównych dróg Warszawy na podstawie danych pobranych z bazy danych obiektów topograficznych.

plot(st_geometry(drogi_gl))

Dalej obiekt sf drogi_gl został zamienony na obiekt sfnetwork, a następnie za pomocą funkcji convert() były wyeliminowane pseudo-wierzchołki, które nie leżą na przecięciach dróg. Wynik jest zwizualizowany na poniższym wykresie.

plot((smooth_net), col = "cyan3", main = "Siec glownych drog w Warszawie", border = "darkgrey", axes = T) 

Następnie była wykorzystana funkcja centrality_betweenness() wewnątrz funkcji mutate(), która pozwoliła na utworzenie nowego atrybutu w sieci dróg, w którym wartość centralności została obliczona dla każdego wierzchołka (atrybut “bc”). Dla wizualizacji wyniku wczytujemy pakiet tmap i przechodzimy do trybu interaktywnego:

tmap_mode('view')
## tmap mode set to interactive viewing

Wizualizujemy sieć głównych dróg w Warszawie z obliczoną centralnością wierzchołków (“bc”):

tm_shape(drogi_gl)+
  tm_lines()+
tm_shape(smooth_sf)+
  tm_dots("bc")+
  tm_bubbles("bc", col = "red")+
tmap_options(basemaps = 'OpenStreetMap')
## Warning: One tm layer group has duplicated layer types, which are omitted. To
## draw multiple layers of the same type, use multiple layer groups (i.e. specify
## tm_shape prior to each of them).

Generalnie zastosowane funkcje i operator pipe pozwoliły na wizualizację i analizę danych pobranych z OSM na temat lokalizacji poszczególnych obiektów w Warszawie i Polsce w pierwszej części pracy, a także wizualizację i analizę sieci dróg głównych Warszawy w drugiej części pracy. Korzystanie z dodatkowych opcji funkcji plot oraz pakietu tmap pozwoliło na zastosowanie różnych metod wizualizacji odzwierciedlających niezbędne informacje w sposób zrozumiały i skuteczny. W rezultacie postawiony cel pracy można uznać za pomyślnie zrealizowany.