R w QGIS
Język R możemy wykorzystać do rozszerzenie funkcjonalności wielu programów. Jednym z nich jest QGIS pozwalający wykorzystywać skrypty napisane w tym języku. Dzisiaj pokażemy Wam jak w prosty sposób zrobić własne narzędzie rozszerzające podstawową funkcjonalność QGIS. Najpierw otwórzmy QGIS w wersji 2.18. Nowsza wersja niestety nie daje możliwości pisania skryptów w R. Po otwarciu QGIS musimy najpierw go skonfigurować do obsługi R. Wybieramy z menu górnego Geoprocessing -> Opcje. Otwiera nam się okno Opcje geoprocessingu:
Rozwijamy w nim zakładkę Dostawcy algorytmów -> R scripts. Aktywujemy obsługę skryptów R poprzez zaznaczenie Activate i poprawne ustawienie ścieżki do lokalizacji instalacji R. Następnie klikamy OK.
Teraz otwieramy okno Narzędzia wybierając Geoprocessing -> Narzędzia.
W oknie mamy już aktywną obsługę skryptów w R. Wchodzimy w R scripts -> Tools -> Create new R script, aby utworzyć swój mini program. Dla przykładu wybraliśmy dla Was skrypt do wycinania rastra na podstawie warstwy wektorowej. Zaczynamy od zdefiniowania danych wejściowych: warstwy wektorowej i rastra:
##Layer=vector ##Raster=raster
Następnie danej wyjściowej:
##output=output raster
Dodajemy również grupę w której wyświetlany będzie skrypt w Narzędziach geoprocessingu (działanie tej linijki będzie dla Was bardziej zrozumiałe później):
##My scripts=group
No i piszemy nasz kod z R:
library(raster) #wczytanie biblioteki new_raster <- crop(Raster,Layer) #przycięcie rastra do prostokąta new_raster <- mask(new_raster,Layer) #wymaskowanie wartości leżących poza wektorem projection(new_raster) <- CRS("+init=EPSG:2180") #nadanie układu współrzędnych
Ostatnia linijka powinna zawierać zapis przetworzonej warstwy do wyjściowej zmiennej:
output <- new_raster
Ostatecznie skrypt wygląda tak w oknie Edytora skryptów:
Zapisujemy go. I wychodzimy z edytora. W Narzędziach geoprocessingu w skryptach R pojawiła się nowa pozycja My scripts. To jest grupa, którą zdefiniowaliśmy w naszym pliku. Wszystkie skrypty z taką grupą pojawią się właśnie tutaj:
Teraz sprawdźmy jak działa skrypt. Do tego celu potrzebujemy dane. My użyjemy NMT dla Mazowsza oraz warstwy wektorowej gmin w tym województwie. W przypadku warstw wektorowych dodatkową ciekawą funkcją jest to, że skrypty działają na wyselekcjonowanych elementach. Ograniczmy sobie zatem działanie naszego skryptu do jednej wybranej gminy. Tak wygląda to u nas:
Klikamy na nasz skrypt. Pojawia nam się okno, gdzie wybieramy warstwy wejściowe i miejsce zapisu danych wyjściowych:
Zostawiamy domyślne ustawienia i uruchamiamy nasz skrypt klikając Run. Po zakończeniu do okna mapy zostaje wczytany wynik działania skryptu:
Skrypty w R umożliwiają również wyświetlanie wykresów na podstawie uzyskanych z warstw danych. Zmodyfikujemy nasz skrypt tak, aby wyświetlał histogram wysokości dla wybranego regionu. W Edytorze skryptów napiszmy:
##My scripts=group ##Layer=vector ##Raster=raster ##showplots library(raster) h <- extract(Raster, Layer) hist(unlist(h),main = "Histogram")
Napisany skrypt nie zwraca nic, tylko wyświetla wykres. Takie działanie definiujemy poprzez dodanie #showplots do kodu. Zapiszmy skrypt i zobaczmy jak działa:
Wyświetlony został histogram wartości wysokości dla wybranej przez nas gminy.
Przedstawiony w poście przykład pokazuje, że znając język R możemy w łatwy sposób rozbudować funkcjonalność QGIS-a o nowe narzędzia do przetwarzania danych GIS, jak również ich analizy. Miłej zabawy:)