我正在處理R中的Landsat 8場景以計算NDVI並運行土地覆蓋分類算法。 我遇到了柵格包中writeRaster函數的問題,特別是當它在磁盤上寫入光柵堆棧時。在R中使用writeRaster在光盤上寫入光柵堆棧將更改每個圖層的值的範圍
我開始加載landsat 8場景的12個波段,並將它們作爲圖層堆疊在光柵棧中。由於它們是以16位圖像的形式提供的,因此所有圖層的值範圍從0到65535不等。將光柵堆棧寫入磁盤後,當我在R環境中從磁盤上重新加載新創建的文件時,值範圍對於所有圖層而言都與原始值不同。我無法弄清楚爲什麼,並且我在互聯網上找不到任何解決方案。
這是代碼:
library(raster)
# Load the individual bands of the Landsat scene.
b01 <- raster(list.files(dirname, pattern = "B1.TIF", full.names = TRUE))
b02 <- raster(list.files(dirname, pattern = "B2.TIF", full.names = TRUE))
b03 <- raster(list.files(dirname, pattern = "B3.TIF", full.names = TRUE))
b04 <- raster(list.files(dirname, pattern = "B4.TIF", full.names = TRUE))
b05 <- raster(list.files(dirname, pattern = "B5.TIF", full.names = TRUE))
b06 <- raster(list.files(dirname, pattern = "B6.TIF", full.names = TRUE))
b07 <- raster(list.files(dirname, pattern = "B7.TIF", full.names = TRUE))
b08 <- raster(list.files(dirname, pattern = "B8.TIF", full.names = TRUE))
b09 <- raster(list.files(dirname, pattern = "B9.TIF", full.names = TRUE))
b10 <- raster(list.files(dirname, pattern = "B10.TIF", full.names = TRUE))
b11 <- raster(list.files(dirname, pattern = "B11.TIF", full.names = TRUE))
b12 <- raster(list.files(dirname, pattern = "BQA.TIF", full.names = TRUE))
# Since the band 8 has a 15m resolution, compared to 30m of all other bands, I
# need to resample it to match the other bands.
b08 <- resample(b08, b01)
allbands <- c(b01, b02, b03, b04, b05, b06, b07, b08, b09, b10, b11, b12)
rast.stack <- stack(allbands)
當我檢查rast.stack對象的特性,我可以看到,對於所有頻帶的值的範圍是0 - > 65535 接着,我寫磁盤上的光柵堆棧:
writeRaster(rast.stack, filename = "LT820103720161114.tif", overwrite = TRUE)
當我加載在R環境中,該新文件,
rast.stack <- stack("LT820103720161114.tif")
波段的值範圍低於原始柵格堆棧中的值範圍。 我試着將文件保存爲.tif和原始的柵格.grd格式,但這沒有什麼區別。我也試圖與datatype參數指定數據類型 如下:
writeRaster(rast.stack, filename = "LT820103720161114.tif", datatype = "INT2U", overwrite = TRUE)
我也嘗試使用writeValues函數寫在塊磁盤上的光柵。這些都沒有解決這個問題。有誰知道什麼是錯的,以及如何解決這個問題?如果你想運行這段代碼,我使用的場景是2016年11月14日記錄的第201行,第037行,可以在EarthExplorer上免費下載。 感謝
是否要將多光譜GeoTiff保存到磁盤?如果是這樣,'writeRaster'中的選項參數應該是'options =「INTERLEAVE = BAND」'。 – www
該選項似乎無法解決將文件寫入磁盤後,我的圖層的值範圍發生更改的問題。 –