Wczytanie i zapis rastra w R
Odczyt i zapis rastrów z georeferencją w R wykonujemy z zastosowaniem biblioteki raster. Instalację biblioteki wykonujemy używając linii kodu:
install.packages(‘raster’)
Po zainstalowaniu należy ją zainicjować (włączyć), aby funkcje w niej zawarte były dostępne do wykorzystania:
library(raster)
Na potrzeby tego ćwiczenia pobrałem zobrazowanie składające się z 4 kanałów (niebieskiego, zielonego, czerwonego i bliskiej podczerwieni) z Sentinela 2 dostępne nieodpłatnie. Każdy z kanałów jest zapisany w innym pliku, które należy wczytać do R. Używając funkcji raster.
b2 = raster(’F:/B02.tif')
b3 = raster(’F:/B03.tif')
b4 = raster(’F:/B04.tif')
b8 = raster(’F:/B08.tif')
Możemy wyświetlić podstawowe informacje o każdym z nich wprowadzając w konsoli nazwę zmiennej do której zostały zapisane:
b2
class : RasterLayer
dimensions : 10980, 10980, 120560400 (nrow, ncol, ncell)
resolution : 10, 10 (x, y)
extent : 399960, 509760, 5690220, 5800020 (xmin, xmax, ymin, ymax)
coord. ref. : +proj=utm +zone=34 +datum=WGS84 +units=m +no_defs +ellps=WGS84 +towgs84=0,0,0
data source : F:\B02.tif
names : B02
values : 0, 15810 (min, max)
Dane teledetekcyjne składają się najczęściej z wielu kanałów, które są zapisane w jednym lub wielu plikach (w przykładzie oddzielne pliki) . Do łączenia kanałów i odczytywania danych rastrowych z wielokanałowych służy funkcja (struktura) stack. Jako zmienne funkcji wstawiamy zestaw kanałów, który chcemy zapisać pod jedną zmienną.
b_all = stack(b2,b3,b4,b8)
Po wyświetleniu w konsoli zmiennej b_all
b_all
class : RasterStack
dimensions : 10980, 10980, 120560400, 4 (nrow, ncol, ncell, nlayers)
resolution : 10, 10 (x, y)
extent : 399960, 509760, 5690220, 5800020 (xmin, xmax, ymin, ymax)
coord. ref. : +proj=utm +zone=34 +datum=WGS84 +units=m +no_defs +ellps=WGS84 +towgs84=0,0,0
names : B02, B03, B04, B08
min values : 0, 0, 0, 0
max values : 15810, 18613, 28000, 25910
Można podejrzeć informację o każdym z kanałów. Przy wczytywaniu pliku z wieloma kanałami używamy również tej funkcji z tym, że jako argument wstawiamy ścieżkę do pliku:
b_all = stack('F:/B_ALL.tif')
W zmiennej b_all, która jest listą plików rastrowych nadal mamy możliwość wydobycia pojedynczych kanałów używając:
b_all[[1]]
class : RasterLayer dimensions : 10980, 10980, 120560400 (nrow, ncol, ncell)
resolution : 10, 10 (x, y)
extent : 399960, 509760, 5690220, 5800020 (xmin, xmax, ymin, ymax)
coord. ref. : +proj=utm +zone=34 +datum=WGS84 +units=m +no_defs +ellps=WGS84 +towgs84=0,0,0
data source : F:\B02.tif
names : B02
values : 0, 15810 (min, max)
Zapis pliku rastrowego dokonujemy funkcją writeRaster(‘nazwa zmiennej’, filename = ”ścieżka zapisu”,format = ”format zapisu”):
writeRaster(b_all, filename = "F:/B_all.tif", format = "GTiff")
Formaty w których można zapisać dane rastrowe można podejrzeć wpisując:
writeFormats()
Zapisany plik GeoTIFF zawiera 4 kanały, które można wykorzystać do tworzenia kompozycji barwnych: