class: center, middle, inverse, title-slide # Geocomputation with R: ## Analiza danych przestrzennych w otwartym oprogramowaniu ### Jakub Nowosad
https://nowosad.github.io
### GISday, 2018-11-14, Poznań --- # Geocomputation <!-- grass gis + arc + r --> .pull-left[ - Automatyzacja często powtarzalnych czynności - Przejrzystość i powtarzalność - Inspiracja do tworzenia oprogramowania poprzez dostarczanie narzędzi do modyfikowania istniejących i wdrażania nowych funkcji - Zachęcenie do dzielenia kodu i wyników oraz współpracy - Pomoc w rozwijaniu umiejętności programowania, na które istnieje duże zapotrzebowanie <table> <thead> <tr> <th style="text-align:left;"> Cecha </th> <th style="text-align:left;"> GIS (GUI) </th> <th style="text-align:left;"> R (CLI) </th> </tr> </thead> <tbody> <tr> <td style="text-align:left;"> Dyscyplina </td> <td style="text-align:left;"> Geografia </td> <td style="text-align:left;"> Statystyka, Informatyka </td> </tr> <tr> <td style="text-align:left;"> Sposób interakcji </td> <td style="text-align:left;"> Graficzny interfejs użytkownika </td> <td style="text-align:left;"> Wiersz poleceń </td> </tr> <tr> <td style="text-align:left;"> Odtwarzalność </td> <td style="text-align:left;"> Minimalna </td> <td style="text-align:left;"> Maksymalna </td> </tr> </tbody> </table> ] <!-- how and why --> <!-- packages and posibilities --> <!-- Facilitates the automation of repetitive tasks. --> <!-- Enables transparency and reproducibility, the backbone of good scientific practice and data science. --> <!-- Encourages software development by providing tools to modify existing functions and implement new ones. --> <!-- Helps develop future-proof programming skills which are in high demand in many disciplines and industries. --> <!-- Is user-friendly and fast, allowing an efficient workflow --> <!-- This brings us to the ‘open source approach’, which has three main components: --> <!-- A command-line interface (CLI), encouraging scripts recording geographic work to be shared and reproduced. --> <!-- Open source software, which can be inspected and potentially improved by anyone in the world. --> <!-- An active developer community, which collaborates and self-organizes to build complimentary and modular tools. --> .pull-right[ <img src="figs/qgis.png" width="90%" style="display: block; margin: auto;" /><img src="figs/r.png" width="90%" style="display: block; margin: auto;" /> ] --- # Gecomputation with R Ważna zaletą R (czy też np. Pythona) jest bycie językiem interpretowanym. Jest to szczególnie istotne w analizie danych (nie tylko) przestrzennych, bo pozwala na interaktywne programowanie - kod wpisany w konsoli jest natychmiast wykonywany a wynik jest wyświetlany (nie ma konieczności czekana na kompilację kodu). Pakiety R: - **sf**, **raster** - klasy obiektów przestrzennych - **dplyr**, **rmapshaper** - przetwarzanie tabel atrybutów/geometrii - **rnaturalearth**, **osmdata**, **getlandsat** - pobieranie danych przestrzennych - **rgrass7**, **RQGIS**, **RSAGA**, **link2GI** - łączenie z oprogramowaniem GIS - **gstat**, **mlr**, **CAST** - modelowanie danych przestrzennych - **rasterVis**, **tmap**, **ggplot** - wizualizacje statyczne - **leaflet**, **mapview**, **mapdeck** - wizualizacje interaktywne - wiele innych... Więcej na https://cran.r-project.org/web/views/Spatial.html. --- # Geocomputation with R - książka .lc[ <img src="figs/bc.png" width="350" style="display: block; margin: auto;" /> ] .rc[ > Lovelace R., Nowosad J., Muenchow J. 2019, **Geocomputation with R**. CRC Press - Wersja online, dostępna dla wszystkich, znajduje się pod adresem https://geocompr.robinlovelace.net/ <!-- każdy może dodać/zmienić/zaproponować coś--> - Papierowa wersja książki zostanie opublikowana w wydawnictwie CRC Press na początku 2019 roku (http://bit.ly/geocomp_with_r) <br> ] <!-- intro to the book --> <!-- links--> <!-- more about open-source! --> --- class: inverse, center, middle # Podstawy --- # R <!-- - R + RStudio --> <!-- - Simple workflow - gif? --> <img src="figs/geocompr.gif" width="90%" style="display: block; margin: auto;" /> --- # Dane wektorowe .pull-left[ <img src="figs/sf-classes.png" height="550" style="display: block; margin: auto;" /> ] .pull-right[ ```r library(sf) head(seine) ``` ``` ## Simple feature collection with 3 features and 1 field ## geometry type: MULTILINESTRING ## dimension: XY ## bbox: xmin: 518344.7 ymin: 6660431 xmax: 879955.3 ymax: 6938864 ## epsg (SRID): 2154 ## proj4string: +proj=lcc +lat_1=49 +lat_2=44 +lat_0=46.5 +lon_0=3 +x_0=700000 +y_0=6600000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ## name geometry ## 1 Marne MULTILINESTRING ((879955.3 ... ## 2 Seine MULTILINESTRING ((828893.6 ... ## 3 Yonne MULTILINESTRING ((773482.1 ... ``` <!-- - Model wektorowy danych oparty jest na punktach położonych wewnątrz danego układu współrzędnych --> - Pakiet **sf** zapewnia system klas dla danych wektorowych w R - Dodatkowo ten pakiet wykorzystując biblioteki PROJ, GDAL oraz GEOS pozwala na tranformacje pomiędzy układami przestrzennych, wczytywanie i zapis wielu formatów danych oraz wykonywanie operacji geometryczych <!-- - Większość funkcji tego pakietu posiada intuicyjne nazwy zaczynające się of prefiksu `st_` --> ] --- # Dane rastrowe .lc[ - Pakiet **raster** zapewnia system klas dla danych rastrowych w R, składający się z prostych obiektów `RasterLayer` oraz wielowartwowych `RasterStack` oraz `RasterBrick` - Operacje na małych rastrach są wykonywane w pamięci RAM, a przetwarzanie większych rastrów odbywa się poprzez ich podzielenie na kawałki ] .rc[ <img src="figs/raster-intro-plot-1.png" height="200" style="display: block; margin: auto;" /> ```r library(raster) elev ``` ``` ## class : RasterLayer ## dimensions : 6, 6, 36 (nrow, ncol, ncell) ## resolution : 0.5, 0.5 (x, y) ## extent : -1.5, 1.5, -1.5, 1.5 (xmin, xmax, ymin, ymax) ## coord. ref. : +proj=longlat +datum=WGS84 +ellps=WGS84 +towgs84=0,0,0 ## data source : in memory ## names : layer ## values : 1, 36 (min, max) ``` ] --- # Tworzenie map - Rozdział 8 - *Making maps with R* - https://geocompr.robinlovelace.net/adv-map.html - Rozpoczyna się on od wprowadzenia w gramatykę tworzenia map z pakietem **tmap** <img src="figs/tmshape-1.png" height="500" style="display: block; margin: auto;" /> --- # Tworzenie map - Obejmuje to, między innymi, dodawanie kolejnych wartw na mapie, zmianę stylu czy umieszczenie dodatkowych elementów (skala, strzałka północy) <img src="figs/break-styles-1.png" height="500" style="display: block; margin: auto;" /> --- # Tworzenie map - Dodatkowo opisane jest tworzenie tzw. "inset maps"... <img src="figs/insetmap2-1.png" height="500" style="display: block; margin: auto;" /> --- # Tworzenie map - ... "facet maps" ... <img src="figs/urban-facet-1.png" height="500" style="display: block; margin: auto;" /> --- # Tworzenie map - ... "cartogram maps" ... <img src="figs/cartogram1.png" height="500" style="display: block; margin: auto;" /> --- # Tworzenie map - ... czy animacji: <img src="figs/usa_anim.gif" height="500" style="display: block; margin: auto;" /> --- # Tworzenie map .pull-left[