Projekt RTele-Foto

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:

raster1_2
raster1_3