当前位置:首页 > 后端开发 > 正文内容

根据R言语的raster包读取遥感印象

邻居的猫1个月前 (12-09)后端开发695

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

1 包的装置与导入

  首要,咱们需求装备好对应的R言语包;前面也说到,咱们这儿挑选根据raster包来完结栅格图画数据的读取与处理工作。首要,假如有需求的话,咱们能够先到raster包在R言语的官方网站中,查阅raster包的根本情况,比如其作者信息、当时的版别、所依靠的其他包等等;如下图所示。

image

  当然,这些内容看不看都不影响咱们接下来的操作。接下来,咱们开端装置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”看到制作结束的图画。能够说,这一制作栅格图画的办法,相较于PythonC++等言语都更为便利。

  随后,咱们简略介绍一下对这一栅格图画数据的处理操作。例如,咱们能够经过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 valuesmax 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包读取、处理栅格数据加以根本的办法介绍,至于愈加深化的用法,咱们将在后期的文章中加以介绍。

扫描二维码推送至手机访问。

版权声明:本文由51Blog发布,如需转载请注明出处。

本文链接:https://www.51blog.vip/?id=229

分享给朋友:

“根据R言语的raster包读取遥感印象” 的相关文章

java获取当前时间, Java中的日期时间类

在Java中,你可以使用`java.time`包中的类来获取当前时间。以下是获取当前日期和时间的几种方法:1. 使用`LocalDateTime`类:```javaimport java.time.LocalDateTime;public class CurrentTime { public...

delphi为什么没人用了,Delphi为何逐渐淡出开发者视野?

Delphi 是一种编程语言和集成开发环境(IDE),由 Borland(现在的 Embarcadero Technologies)开发,主要面向 Windows 平台。它在 1990 年代和 2000 年代初期非常流行,尤其是在桌面应用开发领域。随着时间的推移,Delphi 的使用逐渐减少,原因可...

java开源项目,助力开发者高效编程的利器

java开源项目,助力开发者高效编程的利器

1. JavaGuide 提供了丰富的Java开源项目资源,包括框架、工具和教程等,灵感来源于 awesomejava 项目。你可以访问以下链接了解 2. CSDN 上有多篇文章介绍了基于Spring Boot的优质Java开源项目,涵盖了电商、微服务、支付、秒杀、博客、管理后台等多个...

r语言apply函数,数据处理与计算的利器

`apply` 函数是 R 语言中的一个强大工具,它允许用户对矩阵或数据框的列或行应用一个函数。这个函数特别适用于需要对矩阵或数据框的每一列或每一行进行相同的操作,比如计算每一列或每一行的平均值、标准差、最大值、最小值等。 基本语法`apply` `X`: 一个矩阵或数据框。 `MARGIN`: 应...

pascal教程,Pascal编程语言入门教程

1. 菜鸟教程:该教程适合想要学习Pascal编程语言的软件专业人员,介绍了Pascal的功能、数据类型、编程结构、面向对象等概念。你可以在这里了解Pascal的历史、应用、优势和与其他语言的关系,以及如何使用Pascal编写简单的程序。2. W3Cschool Pascal教程:这个教程提供了Pa...

b rust,性能与安全的完美结合

B树是一种自平衡的树数据结构,它维持数据有序,并且允许搜索、顺序访问、插入和删除操作都在对数时间内完成。Rust是一种系统编程语言,以其内存安全性和高性能著称。在Rust中实现B树是一个很好的练习,可以帮助你理解数据结构和Rust语言的特性。以下是一个简单的B树实现的示例代码:```rustuse...