Przyspieszanie skryptów – zewnętrzny program (RSAGA)
Co w przypadku, gdy wszystkie funkcje które przetestowaliśmy/napisaliśmy nie pozwalają nam uzyskać zadowalających czasów wykonania zaplanowanego zadania? Możemy skorzystać z innych programów, które posiadają interesujące nas funkcje i mają zaimplementowaną bibliotekę w R.
Pokażemy Wam jak to zrobić na przykładzie poczciwego Zonal Statistics, który męczymy już od jakiegoś czasu. Do przetwarzania naszych danych wykorzystamy inne otwarte oprogramowanie jakim jest SAGA GIS (http://www.saga-gis.org).
Potrzeba nam będzie do tego biblioteka RSAGA:
install.packages(“RSAGA”)
library(RSAGA)
Biblioteka potrzebuje programu SAGA-GIS zainstalowanego na naszym komputerze. Domyślnie szuka dostępu do niego pod ścieżkami:
C:/Program Files/SAGA-GIS
C:/SAGA-GIS
C:/OSGeo4W64/apps/saga
C:/OSGeo4W64/apps/saga-ltr
W przypadku zainstalowania go w inny miejscu biblioteka będzie szukała go na całym dysku. W celu przyspieszenia całego procesu możemy podać ścieżkę do środowiska SAGI sami:
my_saga_env = rsaga.env("D:/programs/saga-7.0.0_x64/")
Sprawdźmy czy poprawnie utworzyliśmy środowisko wyświetlając wersję naszej SAGI:
rsaga.get.version(env = my_rsaga_env)
[1] "7.0.0"
SAGA-GIS umożliwia przetwarzanie danych poprzez swoje GUI (saga_gui.exe) oraz linię komend (saga_cmd.exe). Biblioteka RSAGA wykorzystuje linię komend. Jak tworzyć komendy można zapoznać się w dokumentacji każdej z wersji dostępnej tutaj: http://www.saga-gis.org/saga_tool_doc/
Krótko mówiąc narzędzia pogrupowane są w biblioteki. Dla każdego z narzędzi możemy zdefiniować parametry. W naszym przypadku skorzystamy z narzędzia “Grid Statistics for Polygons” znajdującego się w bibliotece “shapes_grid”. W R saga_cmd uruchomimy poprzez funkcję rsaga.geoprocessor:
rsaga.geoprocessor(lib = "shapes_grid",module = 2,param = list(GRIDS="d:/GIS_in_R/B08.tif",POLYGONS="d:/GIS_in_R/grid_10x100.shp",RESULT="d:/GIS_in_R/grid_100x100_result.shp"),env = my_rsaga_env)
,gdzie:
lib – to biblioteka z interesującym nas narzędziem
module – to numer porządkowy naszego narzędzia
param – to lista parametrów narzędzia
W celu zapoznania się jak powinna wyglądać nasza komenda najlepiej zajrzeć do dokumentacji. Na dole opisu każdego narzędzia jest przykład komendy:
http://www.saga-gis.org/saga_tool_doc/7.0.0/shapes_grid_2.html
Po wykonaniu w lokalizacji podanej w RESULT pojawi się plik wektorowy z przypisanymi wartościami statystyk z rastra. Wczytajmy go:
library(sf)
shp = read_sf("d:/GIS_in_R/grid_100x100_result.shp")
I przejrzyjmy statystyki:
> shp
Simple feature collection with 1000 features and 9 fields
geometry type: POLYGON
dimension: XY
bbox: xmin: 405440 ymin: 5690759 xmax: 504280 ymax: 5799481
epsg (SRID): 32634
proj4string: +proj=utm +zone=34 +datum=WGS84 +units=m +no_defs
# A tibble: 1,000 x 10
FID B08..CELLS. B08..MIN. B08..MAX. B08..RANGE. B08..SUM. B08..MEAN. B08..VARIAN B08..STDDEV geometry
<dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <POLYGON [m]>
1 0 4 2157 2219 62 8776 2194 601 24.5 ((405460 5690769, 405460 5690768~
2 1 4 1758 2468 710 8434 2108. 67641. 260. ((416440 5690769, 416440 5690768~
3 2 4 2217 2313 96 9042 2260. 1173. 34.2 ((427420 5690769, 427420 5690768~
4 3 4 2561 2735 174 10478 2620. 5017. 70.8 ((438400 5690769, 438400 5690768~
5 4 4 2770 2861 91 11274 2818. 1197. 34.6 ((449380 5690769, 449380 5690768~
6 5 4 2222 2367 145 9184 2296 3534. 59.4 ((460360 5690769, 460360 5690768~
7 6 4 2568 2869 301 10939 2735. 12941. 114. ((471340 5690769, 471340 5690768~
8 7 4 1774 1902 128 7360 1840 3252. 57.0 ((482320 5690769, 482320 5690768~
9 8 4 1970 2113 143 8161 2040. 4542. 67.4 ((493300 5690769, 493300 5690768~
10 9 4 1916 2092 176 7974 1994. 4463. 66.8 ((504280 5690769, 504280 5690768~
# ... with 990 more rows
Biblioteka RSAGA posiada zaimplementowaną część narzędzi SAGA-GIS bezpośrednio w R, których można użyć bez szczegółowej znajomości dokumentacji. Taką funkcją jest na przykład rsaga.contour służąca do generowania warstwic. Zapoznanie tych funkcji pozostawiamy już Wam.
Już niebawem w kolejnym wpisie pokażemy Wam jak możecie wykorzystać funkcje innych programów w Waszym kodzie, które nie mają jeszcze biblioteki w R.