class: center, middle, inverse, title-slide # Integracja pomiędzy QGISem a R ### Jakub Nowosad
https://nowosad.github.io
### II spotkanie użytkowników QGIS, 25–26 czerwca 2019 r., Poznań --- class: inverse, middle, center <img src="figs/Rlogo.png" width="80%" style="display: block; margin: auto;" /> <!--dodaj logo!!---> --- # R - https://www.r-project.org/ - bezpłatny i otwarty język programowania <img src="figs/r.png" width="70%" style="display: block; margin: auto;" /> - Windows, Mac OS i Linux; komputery osobiste jak i klastry obliczeniowe - Wiele wbudowanych narzędzi analizy i wizualizacji danych - Tysiące dodatkowych rozszerzeń pozwalających na, między innymi, przetwarzanie różnorodnych danych, ich wizualizację, czy zaawansowane modelowanie <!-- R ma przyjazną społeczność użytkowników tego języka, zarówno online jak i spotykających się na żywo na tzw. meetupach. --> <!-- W celu ułatwienia pracy z R powstało również zintegrowane środowisko programistyczne RStudio, które wspomaga pisanie i analizę kodu w R. --> <!-- R został zaprojektowany jako narzędzie ułatwiające komunikację między różnymi językami programowania, głównie C oraz Fortran15. Obecnie R pozwala na łatwe łączenie kodu pochodzącego również z takich języków jak C++, Python, JavaScript, itd. --> - Używany przez wiele małych firm, jak i wielkich korporacji, wliczając w to BBC, Facebook, Google, Microsoft, Mozilla, Netflix, T-Mobile, czy Uber --- # QGIS i R ## Dwie możliwości: .pull-left[ ### 1) R z poziomu QGISa ] .pull-right[ ### 2) QGIS z poziomu R ] <img src="figs/title_slide_img.png" width="1211" style="display: block; margin: auto;" /> -- ## Ale... po co? --- class: inverse, left, bottom # R w QGIS --- # R w QGIS - **R z poziomu QGISa** może być wykorzystywany w projekcie, który w większości możliwy jest do zrealizowania w **QGISie** - Wymagane są w nim jednocześnie pojedyncze możliwości **R** (tj. stworzenie wykresu, zbudowanie modelu, pobranie danych, ...) <img src="figs/03_model.PNG" width="591" style="display: block; margin: auto;" /> <!-- images from the example below --> --- # R w QGIS Połączenie R w QGISie: 1) Zainstalowanie wtyczki Processing R Provider (Wtyczki->Zarządzanie wtyczkami)<br> 2) <br> 3) <img src="figs/01_wtyczka.PNG" width="80%" style="display: block; margin: auto;" /> --- # R w QGIS Połączenie R w QGISie: 1) Zainstalowanie wtyczki Processing R Provider (Wtyczki->Zarządzanie wtyczkami)<br> 2) Dostosowanie ustawień (Ustawienia->Opcje->Processing->Dostawcy Algorytmów) <br> 3) <img src="figs/02_ustawienia.PNG" width="80%" style="display: block; margin: auto;" /> <!-- - https://plugins.qgis.org/plugins/processing_r/ --> <!-- - processing options --> <!-- - Geoprocessing -> Narzędzia --> <!-- - R scripts -> Tools -> Create new R script --> <!-- intro --> <!-- jak to podłączyć? --> --- # R w QGIS Połączenie R w QGISie: 1) Zainstalowanie wtyczki Processing R Provider (Wtyczki->Zarządzanie wtyczkami)<br> 2) Dostosowanie ustawień (Ustawienia->Opcje->Processing->Dostawcy Algorytmów) <br> 3) Napisanie skryptu łączącego QGIS i R (Processing->Panel Algorytmów->R->New Script) <img src="figs/04_new_script.PNG" width="80%" style="display: block; margin: auto;" /> --- # R w QGIS - dane .lc[ <img src="figs/00_dane2.PNG" width="559" style="display: block; margin: auto;" /> ] .rc[ Plik: **punkty.shp** (+ punkty.dbf i punkty.shx) Typ: **punkty** Zmienne: **5 zmiennych numerycznych**, w tym: * **temp** - temperatura (°C) * **srtm** - wysokość n.p.m. <img src="figs/00_dane1.PNG" width="839" style="display: block; margin: auto;" /> ] [Dane - link](https://github.com/Nowosad/data/raw/master/qgispl2019/dane.zip) --- # R w QGIS - przykład I .pull-left[ ``` ##Moje=group ##Layer=vector ##showplots library(sp) library(dismo) voronoi_p = voronoi(Layer) plot(voronoi_p) ``` <img src="figs/05_voronoi.PNG" width="516" style="display: block; margin: auto;" /> ] .pull-right[ ``` ##Moje=group ##Layer=vector ##output=output vector library(sp) library(dismo) output = voronoi(Layer) ``` <br> <img src="figs/06_voronoi.PNG" width="1423" style="display: block; margin: auto;" /> ] https://docs.qgis.org/3.4/en/docs/training_manual/processing/r_syntax.html --- # R w QGIS - przykład II ``` ##Moje=group ##Layer=vector ##y=Field Layer ##x=Field Layer > summary(lm(Layer[[y]]~Layer[[x]])) ``` .pull-left[ <img src="figs/07_model_params.PNG" width="543" style="display: block; margin: auto;" /> ] .pull-right[ <img src="figs/03_model.PNG" width="591" style="display: block; margin: auto;" /> ] <br> <br> <br> https://docs.qgis.org/3.4/en/docs/training_manual/processing/r_syntax.html --- class: inverse, left, bottom # QGIS w R --- # QGIS w R - **QGIS z poziomu R** może znaleźć zastosowanie, gdy analiza danych jest wykonywana w **R** - Jednocześnie konieczne (lub zalecane) jest użycie algorytmu przestrzennego dostępnego w QGISie <!-- - Wtedy należy użyć odpowiedniego pakietu w R --> <!-- Celem prezentacji jest przybliżenie możliwości integracji QGISa z R. --> .pull-left[ <img src="figs/m3.png" width="100%" style="display: block; margin: auto;" /> ] .pull-right[ <img src="figs/m4.png" width="100%" style="display: block; margin: auto;" /> ] --- # QGIS w R **Połączenie QGISa w R:** 1) Zainstalowanie pakietu **RQGIS3** - https://github.com/jannes-m/RQGIS3 ```r install.packages("devtools") devtools::install_github("jannes-m/RQGIS3") ``` -- 2) Załadowanie pakietu **RQGIS3** ```r library(RQGIS3) ``` -- 3) Określenie ścieżki położenia **QGISa** ```r set_env() ``` --- # QGIS w R - przykład ```r library(osmdata) library(sf) library(dplyr) bb = st_bbox(c(xmin = 16.91, xmax = 16.93, ymax = 52.41, ymin = 52.40), crs = st_crs(4326)) #wydzielenie obszaru ``` <img src="figs/m1.png" width="80%" style="display: block; margin: auto;" /> --- # QGIS w R - przykład ```r pzn_shops = opq(bb) %>% #pobranie danych z osm dotyczących sklepów na tym obszarze add_osm_feature(key = "shop") %>% osmdata_sf() %>% `[[`("osm_points") ``` <img src="figs/m3.png" width="70%" style="display: block; margin: auto;" /> --- # QGIS w R - przykład ```r pzn_lines = opq(bb) %>% #pobranie danych z osm dotyczących dróg na tym obszarze add_osm_feature(key = "highway") %>% osmdata_sf() %>% `[[`("osm_lines") %>% group_by(name) %>% #połączenie odcinków dróg o tej samej nazwie summarise() ``` <img src="figs/m2.png" width="70%" style="display: block; margin: auto;" /> --- # QGIS w R - przykład ```r find_algorithms("snap", name_only = TRUE) #wyszukanie algorytmu ``` ``` ## [1] "native:snappointstogrid" "qgis:snapgeometries" ## [3] "saga:snappointstogrid" "saga:snappointstolines" ## [5] "saga:snappointstopoints" ``` ```r alg = "qgis:snapgeometries" get_usage(alg) #sprawdzenie działania algorytmu ``` ``` ## Snap geometries to layer (qgis:snapgeometries) ## ## This algorithm snaps the geometries in a layer. Snapping can be done either to ## the geometries from another layer or to geometries within the same layer. ## ## ... ## ## ---------------- ## Input parameters ## ---------------- ## ## INPUT: Input layer ## ## ... ``` --- # QGIS w R - przykład ```r wynik = run_qgis(alg, INPUT = pzn_shops, #określenie parametrów wejściowych, tj. REFERENCE_LAYER = pzn_lines, #algorytm, dane wejściowe, TOLERANCE = 0.01, #czy tolerancja OUTPUT = "wynik.gpkg", #zapisanie wyniku load_output = TRUE) #pozostawienie wyniku w R ``` <img src="figs/m4.png" width="70%" style="display: block; margin: auto;" /> --- class: inverse, left, bottom # Źródła informacji --- # Źródła informacji **R:** - https://nowosad.github.io/elp - Nowosad, J. 2019, **Elementarz programisty: wstęp do programowania używając R**. Poznań: Space A. - https://nowosad.github.io/elp/ergosum.html#resources - lista materiałów w języku polskim i angielskim **R/QGIS:** - https://plugins.qgis.org/plugins/processing_r/ - plugin QGISa "Processing R Provider" - https://docs.qgis.org/3.4/en/docs/training_manual/processing/r_syntax.html - jego manual - https://github.com/jannes-m/RQGIS3 - pakiet R RQGIS3 **Analizy geoinformacyjne w R:** - http://geocompr.github.io/ - Lovelace R., Nowosad J., Muenchow J. 2019, **Geocomputation with R**. CRC Press - https://bookdown.org/nowosad/Geostatystyka/ - Nowosad, J. 2019 **Geostatystyka w R**. Poznań: Space A. ISBN 978-83-953296-0-9. --- class: left, top .pull-left[ ## Podsumowanie: - **R** posiada rozbudowane narzędzia analizy i wizualizacji danych - Możliwe jest połączenie **QGISa** i **R** na dwa sposoby - Pozwalają one na dopasowanie możliwości obu programów do własnych potrzeb - (**R** także łączy się z GRASSem, SAGĄ, POSTGISem, itd.) ] .pull-right[ ## O mnie: Twitter:
jakub_nowosad Email: nowosad.jakub@gmail.com ## Więcej informacji: https://nowosad.github.io ] .footnote[ **Slajdy:** https://nowosad.github.io/qgispl_19/presentation/ ]