R語(yǔ)言讀取柵格數(shù)據(jù)的方法(raster包讀取)
本文介紹基于R語(yǔ)言中的raster
包,讀取單張或批量讀取多張柵格圖像,并對(duì)柵格圖像數(shù)據(jù)加以基本處理的方法。
1 包的安裝與導(dǎo)入
首先,我們需要配置好對(duì)應(yīng)的R語(yǔ)言包;前面也提到,我們這里選擇基于raster
包來(lái)實(shí)現(xiàn)柵格圖像數(shù)據(jù)的讀取與處理工作。首先,如果有需要的話(huà),我們可以先到raster
包在R語(yǔ)言的官方網(wǎng)站中,查閱raster
包的基本情況,比如其作者信息、當(dāng)前的版本、所依賴(lài)的其他包等等;如下圖所示。
當(dāng)然,這些內(nèi)容看不看都不影響我們接下來(lái)的操作。接下來(lái),我們開(kāi)始安裝raster
包;這里我是在RStudio中進(jìn)行代碼的撰寫(xiě)的。
首先,我們輸入如下的代碼,從而開(kāi)始raster
包的下載與自動(dòng)配置。
install.packages("raster")
隨后,按下回車(chē)
鍵,運(yùn)行代碼,如下圖所示。
可以看到,我們?cè)诎惭braster
包時(shí),會(huì)自動(dòng)將其所需依賴(lài)的其他包(如果在此之前沒(méi)有配置過(guò))都一并配置好,非常方便。
接下來(lái),輸入如下的代碼,從而將剛剛配置好的raster
包導(dǎo)入。
library(raster)
隨后,按下回車(chē)
鍵,運(yùn)行代碼,如下圖所示。
此時(shí),在RStudio右下方的“Packages”中,可以看到raster
包以及其所依賴(lài)的sp
包都處于選中的狀態(tài),表明二者都已經(jīng)配置成功,且完成導(dǎo)入。
2 單一柵格圖像讀取與處理
接下來(lái),我們首先開(kāi)始讀取、處理單獨(dú)一景柵格圖像數(shù)據(jù)。
首先,我們輸入如下的代碼;其中第一句是指定接下來(lái)要打開(kāi)的柵格圖像的路徑與文件名,第二句則是通過(guò)raster()
函數(shù)打開(kāi)這一柵格圖像。
tif_file_name <- r"(E:\02_Project\01_Chlorophyll\ClimateZone\Split\A_LCC0.TIF)" tif_file <- raster(tif_file_name)
運(yùn)行上述代碼。此時(shí),我們可以在RStudio中右上方的“Environment”中看到我們剛剛新建的兩個(gè)變量,以及其對(duì)應(yīng)的值。
接下來(lái),我們可以直接通過(guò)plot()
函數(shù),對(duì)剛剛讀取到的柵格圖像數(shù)據(jù)加以繪制。
plot(tif_file)
運(yùn)行代碼后,可以在RStudio中右下方的“Plots”看到繪制完畢的圖像??梢哉f(shuō),這一繪制柵格圖像的方式,相較于Python、**C++**等語(yǔ)言都更為方便。
隨后,我們簡(jiǎn)單介紹一下對(duì)這一柵格圖像數(shù)據(jù)的處理操作。例如,我們可以通過(guò)mean()
函數(shù)與sd()
函數(shù),計(jì)算柵格圖像全部像元數(shù)值的平均值和標(biāo)準(zhǔn)差;這里我們用到了na.rm = TRUE
參數(shù),具體含義稍后會(huì)提到。
tif_mean <- mean(tif_file[], na.rm = TRUE) tif_std <- sd(tif_file[], na.rm = TRUE)
運(yùn)行上述代碼,隨后輸入如下的代碼,即可查看我們剛剛計(jì)算得到的平均值與標(biāo)準(zhǔn)差。
tif_meantif_std
結(jié)果圖下圖所示。
前面我們提到了na.rm = TRUE
參數(shù),這一參數(shù)表示是否消除數(shù)據(jù)集中無(wú)效值NA
的影響;如果我們不將其設(shè)置為TRUE
,那么就表示不消除數(shù)據(jù)集中的無(wú)效值;而如果我們的柵格圖像中出現(xiàn)無(wú)效值(NoData值),那么就會(huì)使得平均值、標(biāo)準(zhǔn)差等計(jì)算結(jié)果同樣為無(wú)效值NA
;如下圖所示。
3 大量柵格圖像讀取與處理
接下來(lái),我們介紹一下基于raster
包批量讀取大量柵格圖像的方法。
首先,我們需要將存放有大量柵格圖像的文件夾明確,并將其帶入list.files()
函數(shù)中;這一函數(shù)可以對(duì)指定路徑下的文件加以遍歷。其中,pattern
是對(duì)文件名稱(chēng)加以匹配,我們用".tif$"
表示只篩選出文件名稱(chēng)是以.tif
結(jié)尾的文件;full.names
表示是否將文件的全名(即路徑名稱(chēng)加文件名稱(chēng))返回,ignore.case
表示是否不考慮匹配文件名稱(chēng)時(shí)的大小寫(xiě)差異。
tif_file_path <- list.files(r"(E:\02_Project\01_Chlorophyll\ClimateZone\Split\0)", pattern = ".tif$", full.names = TRUE, ignore.case = TRUE)
運(yùn)行上述代碼,并將這一變量打印出來(lái),結(jié)果如下圖所示??梢钥吹?,此時(shí)我們已經(jīng)將指定路徑下的.tif
格式的柵格圖像全部提取出來(lái)了。
接下來(lái),我們通過(guò)stack()
函數(shù),將全部柵格圖像的數(shù)據(jù)放入同一個(gè)變量中;隨后,我們可以打印一下這個(gè)變量,查看其中的內(nèi)容。這里需要注意,如果通過(guò)這種方法批量讀取柵格圖像,需要保證每一景圖像的空間參考信息、行數(shù)與列數(shù)完全一致,否則會(huì)彈出報(bào)錯(cuò)信息。如果大家的柵格圖像行數(shù)與列數(shù)不完全一致,可以參考文章# Python ArcPy用柵格裁剪柵格并使得各個(gè)柵格行數(shù)、列數(shù)一致,對(duì)各個(gè)柵格圖像加以統(tǒng)一。
tif_file_all <- stack(tif_file_path) tif_file_all
運(yùn)行上述代碼,得到如下所示的結(jié)果??梢钥吹剑@一變量中保存了12
個(gè)圖層(雖然柵格圖像只有7
景,但是其中有幾景是具有多個(gè)波段的);其中,除了最基本的柵格圖像維度、空間范圍、空間參考信息等內(nèi)容,names
還展示了12
個(gè)圖層各自的名稱(chēng),min values
與max values
則還展示了每一個(gè)圖層的最小值與最大值。
此外,我們還可以繼續(xù)基于plot()
函數(shù),直接批量繪制多個(gè)圖層各自的柵格圖像。
plot(tif_file_all)
運(yùn)行上述代碼,結(jié)果如下所示。
此外,我們還可以基于mean()
等函數(shù),對(duì)柵格圖像的基本數(shù)學(xué)統(tǒng)計(jì)信息加以計(jì)算。不過(guò)在對(duì)多個(gè)柵格圖像數(shù)據(jù)加以計(jì)算時(shí)需要注意,在tif_file_all
后是否添加[]
符號(hào),得到的結(jié)果是不一樣的——如果不添加[]
符號(hào),我們相當(dāng)于是加以逐像元分析,對(duì)每一個(gè)位置的像元在12
個(gè)圖層中的數(shù)值加以統(tǒng)計(jì),并計(jì)算該像元在12
個(gè)圖層中的平均值;因此最終所得結(jié)果是一景新的柵格圖像,圖像中的每一個(gè)像元數(shù)值都表示該像元在12
個(gè)圖層中的平均值。而如果我們添加了[]
符號(hào),那么就和前述單一柵格圖像的處理一樣,計(jì)算的結(jié)果就是一個(gè)數(shù)值,即12
個(gè)圖層中每一個(gè)像元對(duì)應(yīng)數(shù)值的總體的平均值。
tif_all_mean <- mean(tif_file_all, na.rm = TRUE) tif_all_mean_2 <- mean(tif_file_all[], na.rm = TRUE)
我們分別打印上述兩個(gè)變量,得到結(jié)果如下圖所示。
由此可以更加明顯地看出添加[]
符號(hào)與否的差異。
本文就只是對(duì)R語(yǔ)言raster
包讀取、處理柵格數(shù)據(jù)加以基本的方法介紹,至于更加深入的用法,我們將在后期的文章中加以介紹。
到此這篇關(guān)于R語(yǔ)言讀取柵格數(shù)據(jù)的方法(raster包讀取)的文章就介紹到這了,更多相關(guān)R語(yǔ)言柵格數(shù)據(jù)內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
使用R語(yǔ)言實(shí)現(xiàn)自動(dòng)文摘的方法
本文介紹了如何使用R語(yǔ)言實(shí)現(xiàn)自動(dòng)文摘,我們首先介紹了基于詞頻-逆文檔頻率(TF-IDF)的自動(dòng)文摘方法,包括創(chuàng)建詞項(xiàng)文檔矩陣,計(jì)算TF-IDF值,提取關(guān)鍵詞,以及根據(jù)關(guān)鍵詞生成摘要,需要的朋友一起學(xué)習(xí)下吧2023-05-05R語(yǔ)言-如何切換科學(xué)計(jì)數(shù)法和更換小數(shù)點(diǎn)位數(shù)
這篇文章主要介紹了R語(yǔ)言-切換科學(xué)計(jì)數(shù)法和更換小數(shù)點(diǎn)位數(shù)的操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2021-04-04Python調(diào)用R語(yǔ)言實(shí)例講解
這篇文章主要介紹了Python調(diào)用R語(yǔ)言實(shí)例講解,文中介紹的非常詳細(xì),有需要的同學(xué)可以研究下2021-03-03R語(yǔ)言編程學(xué)習(xí)繪制動(dòng)態(tài)圖實(shí)現(xiàn)示例
這篇文章主要介紹了R語(yǔ)言編程學(xué)習(xí)繪制動(dòng)態(tài)圖實(shí)現(xiàn)示例,有需要的的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2021-10-10R語(yǔ)言RCode與RStudio使用對(duì)比體驗(yàn)分析總結(jié)
這篇文章主要為大家介紹了R語(yǔ)言RCode與RStudio使用對(duì)比體驗(yàn)分析總結(jié),有需要的朋友可以借鑒參考下,希望能夠有所幫助祝大家多多進(jìn)步2021-11-11R語(yǔ)言which函數(shù)介紹及Rcpp改寫(xiě)詳解
有的時(shí)候我們需要找到一個(gè)數(shù)據(jù)子向量中的位置,我們就可以使用which函數(shù),下面這篇文章主要給大家介紹了關(guān)于R語(yǔ)言which函數(shù)介紹及Rcpp改寫(xiě)的相關(guān)資料,需要的朋友可以參考下2022-07-07R語(yǔ)言數(shù)據(jù)可視化繪圖bar chart條形圖實(shí)現(xiàn)示例
這篇文章主要為大家介紹了R語(yǔ)言數(shù)據(jù)可視化繪圖bar chart條形圖的實(shí)現(xiàn)示例,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步2022-02-02R語(yǔ)言邏輯型運(yùn)算的實(shí)現(xiàn)
本文主要介紹了R語(yǔ)言邏輯型運(yùn)算,邏輯型是 R 的基本數(shù)據(jù)類(lèi)型之一,只有兩個(gè)值 TRUE 和 FALSE, 缺失時(shí)為 NA,具有一定的參考價(jià)值,感興趣的可以了解一下2022-03-03