服务器之家:专注于VPS、云服务器配置技术及软件下载分享
分类导航

PHP教程|ASP.NET教程|Java教程|ASP教程|编程技术|正则表达式|C/C++|IOS|C#|Swift|Android|VB|R语言|JavaScript|易语言|vb.net|

服务器之家 - 编程语言 - R语言 - R语言读取栅格数据的方法(raster包读取)

R语言读取栅格数据的方法(raster包读取)

2023-05-17 14:20疯狂学习GIS R语言

这篇文章主要介绍了R语言读取栅格数据的方法,本文就只是对R语言raster包读取、处理栅格数据加以基本的方法介绍,需要的朋友可以参考下

R语言读取栅格数据的方法(raster包读取)

本文介绍基于R语言中的raster包,读取单张或批量读取多张栅格图像,并对栅格图像数据加以基本处理的方法。

1 包的安装与导入

首先,我们需要配置好对应的R语言包;前面也提到,我们这里选择基于raster包来实现栅格图像数据的读取与处理工作。首先,如果有需要的话,我们可以先到raster包在R语言的官方网站中,查阅raster包的基本情况,比如其作者信息、当前的版本、所依赖的其他包等等;如下图所示。

R语言读取栅格数据的方法(raster包读取)

当然,这些内容看不看都不影响我们接下来的操作。接下来,我们开始安装raster包;这里我是在RStudio中进行代码的撰写的。

首先,我们输入如下的代码,从而开始raster包的下载与自动配置。

?
1
install.packages("raster")

随后,按下回车键,运行代码,如下图所示。

R语言读取栅格数据的方法(raster包读取)

可以看到,我们在安装raster包时,会自动将其所需依赖的其他包(如果在此之前没有配置过)都一并配置好,非常方便。

接下来,输入如下的代码,从而将刚刚配置好的raster包导入。

?
1
library(raster)

随后,按下回车键,运行代码,如下图所示。

R语言读取栅格数据的方法(raster包读取)

此时,在RStudio右下方的“Packages”中,可以看到raster包以及其所依赖的sp包都处于选中的状态,表明二者都已经配置成功,且完成导入。

R语言读取栅格数据的方法(raster包读取)

2 单一栅格图像读取与处理

接下来,我们首先开始读取、处理单独一景栅格图像数据。

首先,我们输入如下的代码;其中第一句是指定接下来要打开的栅格图像的路径与文件名,第二句则是通过raster()函数打开这一栅格图像。

?
1
2
tif_file_name <- r"(E:\02_Project\01_Chlorophyll\ClimateZone\Split\A_LCC0.TIF)"
tif_file <- raster(tif_file_name)

运行上述代码。此时,我们可以在RStudio中右上方的“Environment”中看到我们刚刚新建的两个变量,以及其对应的值。

R语言读取栅格数据的方法(raster包读取)

接下来,我们可以直接通过plot()函数,对刚刚读取到的栅格图像数据加以绘制。

?
1
plot(tif_file)

运行代码后,可以在RStudio中右下方的“Plots”看到绘制完毕的图像。可以说,这一绘制栅格图像的方式,相较于Python、**C++**等语言都更为方便。

R语言读取栅格数据的方法(raster包读取)

随后,我们简单介绍一下对这一栅格图像数据的处理操作。例如,我们可以通过mean()函数与sd()函数,计算栅格图像全部像元数值的平均值和标准差;这里我们用到了na.rm = TRUE参数,具体含义稍后会提到。

?
1
2
tif_mean <- mean(tif_file[], na.rm = TRUE)
tif_std <- sd(tif_file[], na.rm = TRUE)

运行上述代码,随后输入如下的代码,即可查看我们刚刚计算得到的平均值与标准差。

?
1
tif_meantif_std

结果图下图所示。

R语言读取栅格数据的方法(raster包读取)

前面我们提到了na.rm = TRUE参数,这一参数表示是否消除数据集中无效值NA的影响;如果我们不将其设置为TRUE,那么就表示不消除数据集中的无效值;而如果我们的栅格图像中出现无效值(NoData值),那么就会使得平均值、标准差等计算结果同样为无效值NA;如下图所示。

R语言读取栅格数据的方法(raster包读取)

3 大量栅格图像读取与处理

接下来,我们介绍一下基于raster包批量读取大量栅格图像的方法。

首先,我们需要将存放有大量栅格图像的文件夹明确,并将其带入list.files()函数中;这一函数可以对指定路径下的文件加以遍历。其中,pattern是对文件名称加以匹配,我们用".tif$"表示只筛选出文件名称是以.tif结尾的文件;full.names表示是否将文件的全名(即路径名称加文件名称)返回,ignore.case表示是否不考虑匹配文件名称时的大小写差异。

?
1
tif_file_path <- list.files(r"(E:\02_Project\01_Chlorophyll\ClimateZone\Split\0)", pattern = ".tif$", full.names = TRUE, ignore.case = TRUE)

运行上述代码,并将这一变量打印出来,结果如下图所示。可以看到,此时我们已经将指定路径下的.tif格式的栅格图像全部提取出来了。

R语言读取栅格数据的方法(raster包读取)

接下来,我们通过stack()函数,将全部栅格图像的数据放入同一个变量中;随后,我们可以打印一下这个变量,查看其中的内容。这里需要注意,如果通过这种方法批量读取栅格图像,需要保证每一景图像的空间参考信息、行数与列数完全一致,否则会弹出报错信息。如果大家的栅格图像行数与列数不完全一致,可以参考文章# Python ArcPy用栅格裁剪栅格并使得各个栅格行数、列数一致,对各个栅格图像加以统一。

?
1
2
tif_file_all <- stack(tif_file_path)
tif_file_all

运行上述代码,得到如下所示的结果。可以看到,这一变量中保存了12个图层(虽然栅格图像只有7景,但是其中有几景是具有多个波段的);其中,除了最基本的栅格图像维度、空间范围、空间参考信息等内容,names还展示了12个图层各自的名称,min valuesmax values则还展示了每一个图层的最小值与最大值。

R语言读取栅格数据的方法(raster包读取)

此外,我们还可以继续基于plot()函数,直接批量绘制多个图层各自的栅格图像。

?
1
plot(tif_file_all)

运行上述代码,结果如下所示。

R语言读取栅格数据的方法(raster包读取)

此外,我们还可以基于mean()等函数,对栅格图像的基本数学统计信息加以计算。不过在对多个栅格图像数据加以计算时需要注意,在tif_file_all后是否添加[]符号,得到的结果是不一样的——如果不添加[]符号,我们相当于是加以逐像元分析,对每一个位置的像元在12个图层中的数值加以统计,并计算该像元在12个图层中的平均值;因此最终所得结果是一景新的栅格图像,图像中的每一个像元数值都表示该像元在12个图层中的平均值。而如果我们添加了[]符号,那么就和前述单一栅格图像的处理一样,计算的结果就是一个数值,即12个图层中每一个像元对应数值的总体的平均值。

?
1
2
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语言读取栅格数据的方法(raster包读取)的文章就介绍到这了,更多相关R语言栅格数据内容请搜索服务器之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持服务器之家!

原文链接:https://juejin.cn/post/7232287476442071101

延伸 · 阅读

精彩推荐
  • R语言R语言及其IDE(RStudio)下载安装详细流程

    R语言及其IDE(RStudio)下载安装详细流程

    这篇文章主要介绍了R语言及其IDE(RStudio)下载安装详细流程,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参...

    Leo Susan6722021-12-24
  • R语言Rstudio更换默认下载镜像(下载源)的操作教程

    Rstudio更换默认下载镜像(下载源)的操作教程

    这篇文章主要介绍了Rstudio更换默认下载镜像(下载源)的操作教程,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...

    周迪新10362022-01-05
  • R语言R语言-如何给直方图加标签

    R语言-如何给直方图加标签

    这篇文章主要介绍了R语言-如何给直方图加标签,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...

    dltan7712022-01-10
  • R语言R语言学习RcppEigen进行矩阵运算

    R语言学习RcppEigen进行矩阵运算

    这篇文章主要为大家介绍了R语言学习如何利用RcppEigen进行矩阵运算的实现方式,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步...

    Kanny广小隶12102022-01-19
  • R语言R语言关于随机森林算法的知识点详解

    R语言关于随机森林算法的知识点详解

    在本篇文章里小编给大家整理的是一篇关于R语言关于随机森林算法的知识点详解内容,有兴趣的朋友们可以跟着学习下。...

    w3cschool6582022-01-17
  • R语言使用R语言绘制棒棒糖图火柴杆图教程

    使用R语言绘制棒棒糖图火柴杆图教程

    本篇文章为大家介绍几种利用R语言绘制棒棒糖图(火柴杆图)的方法,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪...

    Kanny广小隶5312022-01-19
  • R语言R语言编码问题的解决

    R语言编码问题的解决

    这篇文章主要介绍了R语言编码问题的解决,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...

    rokia_xmu10322022-01-07
  • R语言R语言 出现矩阵/缺失值的解决方案

    R语言 出现矩阵/缺失值的解决方案

    这篇文章主要介绍了R语言 出现矩阵/缺失值的解决方案,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...

    亓了个葩10192021-12-23