根据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_mean
tif_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完结snap:对齐多张遥感印象的空间规模,对各个栅格图画加以一致。
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
包读取、处理栅格数据加以根本的办法介绍,至于愈加深化的用法,咱们将在后期的文章中加以介绍。