R語言讀取柵格數據的方法(raster包讀取)
本文介紹基於R語言中的raster
包,讀取單張或批量讀取多張柵格圖像,並對柵格圖像數據加以基本處理的方法。
1 包的安裝與導入
首先,我們需要配置好對應的R語言包;前面也提到,我們這裡選擇基於raster
包來實現柵格圖像數據的讀取與處理工作。首先,如果有需要的話,我們可以先到raster
包在R語言的官方網站中,查閱raster
包的基本情況,比如其作者信息、當前的版本、所依賴的其他包等等;如下圖所示。
當然,這些內容看不看都不影響我們接下來的操作。接下來,我們開始安裝raster
包;這裡我是在RStudio中進行代碼的撰寫的。
首先,我們輸入如下的代碼,從而開始raster
包的下載與自動配置。
install.packages("raster")
隨後,按下回車
鍵,運行代碼,如下圖所示。
可以看到,我們在安裝raster
包時,會自動將其所需依賴的其他包(如果在此之前沒有配置過)都一並配置好,非常方便。
接下來,輸入如下的代碼,從而將剛剛配置好的raster
包導入。
library(raster)
隨後,按下回車
鍵,運行代碼,如下圖所示。
此時,在RStudio右下方的“Packages”中,可以看到raster
包以及其所依賴的sp
包都處於選中的狀態,表明二者都已經配置成功,且完成導入。
2 單一柵格圖像讀取與處理
接下來,我們首先開始讀取、處理單獨一景柵格圖像數據。
首先,我們輸入如下的代碼;其中第一句是指定接下來要打開的柵格圖像的路徑與文件名,第二句則是通過raster()
函數打開這一柵格圖像。
tif_file_name <- r"(E:\02_Project\01_Chlorophyll\ClimateZone\Split\A_LCC0.TIF)" tif_file <- raster(tif_file_name)
運行上述代碼。此時,我們可以在RStudio中右上方的“Environment”中看到我們剛剛新建的兩個變量,以及其對應的值。
接下來,我們可以直接通過plot()
函數,對剛剛讀取到的柵格圖像數據加以繪制。
plot(tif_file)
運行代碼後,可以在RStudio中右下方的“Plots”看到繪制完畢的圖像。可以說,這一繪制柵格圖像的方式,相較於Python、**C++**等語言都更為方便。
隨後,我們簡單介紹一下對這一柵格圖像數據的處理操作。例如,我們可以通過mean()
函數與sd()
函數,計算柵格圖像全部像元數值的平均值和標準差;這裡我們用到瞭na.rm = TRUE
參數,具體含義稍後會提到。
tif_mean <- mean(tif_file[], na.rm = TRUE) tif_std <- sd(tif_file[], na.rm = TRUE)
運行上述代碼,隨後輸入如下的代碼,即可查看我們剛剛計算得到的平均值與標準差。
tif_meantif_std
結果圖下圖所示。
前面我們提到瞭na.rm = TRUE
參數,這一參數表示是否消除數據集中無效值NA
的影響;如果我們不將其設置為TRUE
,那麼就表示不消除數據集中的無效值;而如果我們的柵格圖像中出現無效值(NoData值),那麼就會使得平均值、標準差等計算結果同樣為無效值NA
;如下圖所示。
3 大量柵格圖像讀取與處理
接下來,我們介紹一下基於raster
包批量讀取大量柵格圖像的方法。
首先,我們需要將存放有大量柵格圖像的文件夾明確,並將其帶入list.files()
函數中;這一函數可以對指定路徑下的文件加以遍歷。其中,pattern
是對文件名稱加以匹配,我們用".tif$"
表示隻篩選出文件名稱是以.tif
結尾的文件;full.names
表示是否將文件的全名(即路徑名稱加文件名稱)返回,ignore.case
表示是否不考慮匹配文件名稱時的大小寫差異。
tif_file_path <- list.files(r"(E:\02_Project\01_Chlorophyll\ClimateZone\Split\0)", pattern = ".tif$", full.names = TRUE, ignore.case = TRUE)
運行上述代碼,並將這一變量打印出來,結果如下圖所示。可以看到,此時我們已經將指定路徑下的.tif
格式的柵格圖像全部提取出來瞭。
接下來,我們通過stack()
函數,將全部柵格圖像的數據放入同一個變量中;隨後,我們可以打印一下這個變量,查看其中的內容。這裡需要註意,如果通過這種方法批量讀取柵格圖像,需要保證每一景圖像的空間參考信息、行數與列數完全一致,否則會彈出報錯信息。如果大傢的柵格圖像行數與列數不完全一致,可以參考文章# Python ArcPy用柵格裁剪柵格並使得各個柵格行數、列數一致,對各個柵格圖像加以統一。
tif_file_all <- stack(tif_file_path) tif_file_all
運行上述代碼,得到如下所示的結果。可以看到,這一變量中保存瞭12
個圖層(雖然柵格圖像隻有7
景,但是其中有幾景是具有多個波段的);其中,除瞭最基本的柵格圖像維度、空間范圍、空間參考信息等內容,names
還展示瞭12
個圖層各自的名稱,min values
與max values
則還展示瞭每一個圖層的最小值與最大值。
此外,我們還可以繼續基於plot()
函數,直接批量繪制多個圖層各自的柵格圖像。
plot(tif_file_all)
運行上述代碼,結果如下所示。
此外,我們還可以基於mean()
等函數,對柵格圖像的基本數學統計信息加以計算。不過在對多個柵格圖像數據加以計算時需要註意,在tif_file_all
後是否添加[]
符號,得到的結果是不一樣的——如果不添加[]
符號,我們相當於是加以逐像元分析,對每一個位置的像元在12
個圖層中的數值加以統計,並計算該像元在12
個圖層中的平均值;因此最終所得結果是一景新的柵格圖像,圖像中的每一個像元數值都表示該像元在12
個圖層中的平均值。而如果我們添加瞭[]
符號,那麼就和前述單一柵格圖像的處理一樣,計算的結果就是一個數值,即12
個圖層中每一個像元對應數值的總體的平均值。
tif_all_mean <- mean(tif_file_all, na.rm = TRUE) tif_all_mean_2 <- mean(tif_file_all[], na.rm = TRUE)
我們分別打印上述兩個變量,得到結果如下圖所示。
由此可以更加明顯地看出添加[]
符號與否的差異。
本文就隻是對R語言raster
包讀取、處理柵格數據加以基本的方法介紹,至於更加深入的用法,我們將在後期的文章中加以介紹。
到此這篇關於R語言讀取柵格數據的方法(raster包讀取)的文章就介紹到這瞭,更多相關R語言柵格數據內容請搜索WalkonNet以前的文章或繼續瀏覽下面的相關文章希望大傢以後多多支持WalkonNet!
推薦閱讀:
- 大數據分析R語言RStudio使用超詳細教程
- R語言安裝以及手動安裝devtools的詳細圖文教程
- Pandas使用stack和pivot實現數據透視的方法
- mysql中insert ignore、insert和replace的區別及說明
- Python遍歷目錄下文件、讀取、千萬條數據合並詳情