library("terra")
Pakiet terra wspiera obsługę wielu formatów danych
rastrowych i wektorowych poprzez GDAL.
Możesz uzyskać listę wspieranych sterowników używając funkcji
gdal(drivers = TRUE)
.
W niniejszym pakiecie znajdziemy kilka przykładów danych rastrowych, tj.:
elev.tif
logo.tif
meuse.tif
Do wczytania danych rastrowych służy funkcja rast()
i
wymaga podania ścieżki do pliku lub plików. Spróbujmy zatem wczytać
przykładowy plik elev.tif
, który domyślnie zawarty jest w
pakiecie (w podfolderze ex
). W tym celu należy uprzednio
wywołać funkcję system.file()
, która zwróci nam ścieżkę do
tego pliku.
sciezka_do_rastra = system.file("ex/elev.tif", package = "terra")
sciezka_do_rastra # wyświetl
## [1] "C:/Users/Krzysztof/AppData/Local/R/win-library/4.3/terra/ex/elev.tif"
Funkcję system.file()
stosuje się jedynie jeśli chcemy
odwołać się do danych pochodzących z jakiegoś pakietu. W przypadku
standardowej pracy, ten krok jest pomijany.
Następnie wczytajmy dane do sesji ze wskazanej lokalizacji.
raster = rast(sciezka_do_rastra)
Wpisując nazwę obiektu (tj. raster
) możemy wyświetlić
jego metadane.
raster
## class : SpatRaster
## dimensions : 90, 95, 1 (nrow, ncol, nlyr)
## resolution : 0.008333333, 0.008333333 (x, y)
## extent : 5.741667, 6.533333, 49.44167, 50.19167 (xmin, xmax, ymin, ymax)
## coord. ref. : lon/lat WGS 84 (EPSG:4326)
## source : elev.tif
## name : elevation
## min value : 141
## max value : 547
Możemy zauważyć, że metadane składają się z 9 atrybutów:
Co ważne, pakiet terra przy otwieraniu rastra nie wczytuje go do pamięci, a jedynie tworzy wskaźnik do niego (dane przetwarzane są blokowo, co pozwala przetwarzać dane, które nie mieszczą się w pamięci).
Do zapisu danych rastrowych służy funkcja writeRaster()
,
w której trzeba zdefiniować zapisywany obiekt oraz ścieżkę do zapisu.
Ścieżkę do pliku można zdefiniować na dwa sposoby. Pierwszy (łatwiejszy)
to podanie ścieżki bezwzględnej, tj. wskazanie
dokładnej lokalizacji, w której znajduje się plik. Na przykład:
sciezka = "C:/Users/Krzysztof/Desktop/raster.tif"
Jednak nie jest to zalecana metoda, gdyż uniemożliwia zlokalizowanie
plików na różnych systemach operacyjnych. Drugi sposób polega na
określeniu ścieżki względnej. W tym przypadku podajemy
lokalizację pliku względem bieżącego katalogu roboczego (lub projektu).
Aby dowiedzieć się, gdzie znajduje się katalog roboczy, możemy użyć
funkcji getwd()
, a do jego zmiany funkcji
setwd()
. Na przykład:
getwd()
#> "C:/Users/Krzysztof/Documents"
sciezka = "raster.tif"
Teraz zapiszmy nasz obiekt w aktualnym katalogu roboczym podając
nazwę raster.tif
. Typ pliku (w tym przypadku
geotiff) jest określany automatycznie na podstawie jego
rozszerzenia w nazwie.
writeRaster(raster, filename = "raster.tif")
W powyższej funkcji można zdefiniować również inne argumenty, np. typ
danych (datatype = "INT1U"
) czy kompresję
(gdal = c("COMPRESS=LZW")
).
Procedura wczytania danych wektorowych wygląda podobnie jak w
przypadku danych rastrowych. Do tego celu służy funkcja
vect()
, która również przyjmuje ścieżkę do pliku. Tym razem
wczytamy plik ex/lux.shp
również dostarczony z pakietem
terra.
sciezka_do_wektora = system.file("ex/lux.shp", package = "terra")
wektor = vect(sciezka_do_wektora)
wektor
## class : SpatVector
## geometry : polygons
## dimensions : 12, 6 (geometries, attributes)
## extent : 5.74414, 6.528252, 49.44781, 50.18162 (xmin, xmax, ymin, ymax)
## source : lux.shp
## coord. ref. : lon/lat WGS 84 (EPSG:4326)
## names : ID_1 NAME_1 ID_2 NAME_2 AREA POP
## type : <num> <chr> <num> <chr> <num> <int>
## values : 1 Diekirch 1 Clervaux 312 18081
## 1 Diekirch 2 Diekirch 218 32543
## 1 Diekirch 3 Redange 259 18664
Tak jak poprzednio otrzymujemy metadane tej warstwy, które zawierają następujące atrybuty:
Należy wspomnieć, że dane wektorowe domyślnie wczytywane są do
pamięci w przeciwieństwie do rastrów. Chyba, że zdefiniuje się argument
proxy = TRUE
.
Do zapisu danych wektorowych służy funkcja
writeVector()
. Działa ona analogicznie jak funkcja
writeRaster()
. Zapiszmy naszą warstwę wektorową jako
geopackage (.gpkg) w katalogu roboczym.
writeVector(wektor, filename = "wektor.gpkg")
Do podstawowej wizualizacji danych zarówno rastrowych i wektorowych
służy funkcja plot()
.
plot(raster)
# wyświetla tylko geometrie
# jeśli nie zdefiniowano żadnego atrybutu
plot(wektor)
Warstwy można na siebie nakładać używając argumentu
add = TRUE
. Pamiętaj żeby przed wyświetleniem sprawdzić czy
warstwy mają jednakowe układy współrzędnych.
plot(raster)
plot(wektor, add = TRUE)
Parametry wizualizacji oczywiście można dostosować. Sprawdź ich wykaz
w dokumentacji funkcji (?terra::plot
). Dla przykładu możemy
nadać kolory na podstawie atrybutu NAME_1
(gmina) używając
argumentu col
i definiując wybrane kolory. Oprócz tego,
możemy zmienić kolor tła (argument background
) oraz granic
poligonów (argument border
). Możemy również nadać rycinie
tytuł używając argumentu main
. Alternatywnie, zamiast nazw
kolorów, można wykorzystać kod szesnastkowy, np. #ffff00
będzie reprezentował odcień żółtego.
plot(wektor, "NAME_1", col = c("red", "blue", "green"), background = "lightgrey",
border = "white" , main = "Luksemburg")
Do bardziej zaawansowanych wizualizacji możesz wykorzystać na przykład pakiety tmap czy ggplot2.
1. Wczytaj plik logo.tif
z pakietu i
sprawdź jego metadane.
2. Pobierz dowolnie wybrane przez siebie dane z Natural Earth i
przygotuj wizualizację. Funkcje download.file()
oraz
unzip()
mogą być przydatne w tym celu.