R语言raster包批量读取单一或大量栅格图像

news2024/11/17 15:27:24

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

1 包的安装与导入

  首先,我们需要配置好对应的R语言包;前面也提到,我们这里选择基于raster包来实现栅格图像数据的读取与处理工作。首先,如果有需要的话,我们可以先到raster包在R语言的官方网站(https://cran.r-project.org/web/packages/raster/index.html)中,查阅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”看到绘制完毕的图像。可以说,这一绘制栅格图像的方式,相较于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中ArcPy栅格裁剪栅格:批量对齐栅格图像范围并统一行数与列数(https://blog.csdn.net/zhebushibiaoshifu/article/details/128489099),对各个栅格图像加以统一。

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包读取、处理栅格数据加以基本的方法介绍,至于更加深入的用法,我们将在后期的文章中加以介绍。

欢迎关注:疯狂学习GIS

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/128827.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

TestStand-单执行界面

文章目录用户界面运行流程例程创建前面板设置用户界面主窗口前面板控件配置用户事件用户界面运行流程 用户界面设计的基本元素&#xff1a;管理控件、可视化控件、连接、应用程序启动及关闭、注册事件、处理事件。 LabVIEW中通过Regesiter Event Callback注册事件。 LabVIEW-Te…

flink内存管理, 增加Task内存大小,减少ManageMemory, network内存的方法

问题描述 flink默认分配的内存&#xff0c;不合理&#xff0c;jvm 堆内存太小&#xff0c;其他内存太大。向yarn申请8G内存&#xff0c;最后分配到heap的大小才3.2G&#xff0c;不是让人抓狂吗&#xff1f; 以上是&#xff0c;向yarn申请8G内存&#xff0c;实时分配的内存是上…

“破壁者”氚云,打破低代码之困

互联网云大厂的“火”已经烧红了低代码领域的半边天。 自低代码在国内盛行以来&#xff0c;尤其是时至2022年末&#xff0c;阿里、腾讯、华为等云大厂的跑马圈地仍如火如荼&#xff0c;动作密集程度堪比机关枪。 面对日益增长的企业数字化业务需求&#xff0c;产品经理只需少…

编译器设计(十三)——指令调度

一、简介 对程序块或过程中的操作进行排序以有效利用处理器资源的任务称为指令调度&#xff08;instruction scheduling&#xff09;。调度器的输入是由目标机汇编语言操作组成的一个部分有序的列表&#xff0c;输出是同一列表的一个有序版本。 一组指令的执行时间严重依赖于…

什么是云存储?有什么优势?

在云计算中&#xff0c;用户将数据保存在远程位置。它可以通过互联网连接访问&#xff0c;而不是在本地或物理上(在硬盘上)访问。而云存储成为最实用有效的方式之一。它有助于在线存储数据。 什么是云存储? 云存储是指安全、全局和可扩展的数据存储。它用于存储不可变数据&…

智慧工厂的大脑——APS生产排程系统

生产计划排程是生产管理中的核心工作&#xff0c;或许很多人不同意这个观点&#xff0c;只是因为这个观点的前提是生产计划排程在生产管理中真正起到了作用&#xff0c;目前国内制造业的现状还不能体现出生产计划排程的真正作用&#xff0c;所以也没有人认为它是最核心的工作&a…

蓝桥杯Python练习题11-闰年判断

资源限制   内存限制&#xff1a;256.0MB C/C时间限制&#xff1a;1.0s Java时间限制&#xff1a;3.0s Python时间限制&#xff1a;5.0s 问题描述   给定一个年份&#xff0c;判断这一年是不是闰年。 当以下情况之一满足时&#xff0c;这一年是闰年&#xff1a;   1. 年…

“集合划分问题”如何解决?这里教你个妙招,轻松掌握这类问题~

目录 “集合划分”这类问题的解题思路 一、划分为k个相等的子集 二、火柴拼正方形 “集合划分”这类问题的解题思路 这类题一般都会描述成这个样子&#xff1a;“给你一个数组&#xff0c;是否能将他划分成n个数值相等的子集&#xff1f;”&#xff0c;再或者有些可能题目描述…

MinIO高性能对象存储

一、MinIO高性能对象存储 MinIO是一个高性能对象存储解决方案&#xff0c;它提供了与Amazon Web Services S3兼容的API&#xff0c;并支持所有核心S3功能。 MinIO旨在部署任何地方—公共或私有云、裸机基础设施、协调环境和边缘基础设施。本文档说的是Windows平台上MinIO部署的…

接口测试自动化框架选型

1、fiddler fiddler 是一个 HTTP 协议调试代理工具&#xff0c;Web 和手机测试都会用到&#xff0c;同时也支持接口测试。它能够记录并检查所有你的电脑和互联网之间的 http 通讯&#xff0c;设置断点&#xff0c;查看所有的“进出”Fiddler 的数据(指 cookie,html,js,css 等文…

ASP.NET大型药品销售ERP系统源码

ASP.NET医药ERP管理系统源码 药品销售管理系统源码 源码分享&#xff01;需要源码学习可私信我。 一、源码特点 1、渠道销售商在把药品从厂商销售到医院时&#xff0c;需要管理大量的数据&#xff0c;这些通常包括药品从厂商采购数据、药品销售到商业公司的数据&#xff0c;以…

Python文件基础操作(6)

python学习之旅(六) &#x1f44d;基础语法部分笔记(一) &#x1f44d;条件判断部分笔记(二) &#x1f44d;循环语句部分笔记(三) &#x1f44d;函数使用部分笔记(四) &#x1f44d;数据容器部分笔记(五) &#x1f44d;文件操作部分笔记(六) 一.文件编码 编码就是一种规则集合&…

数据湖---hudi核心概念

文章目录TimelineTable & Query TypesTable Types查询类型COWMOR索引Hudi索引类型索引选择策略File Layouts元数据表元数据表的动机研究中的一些数字&#xff1a;支持多模态索引写操作操作类型UPSERTINSERTBULK_INSERTDELETE写入路径schema 演进key生成并发控制Datasource …

强强联合,怿星科技艾拉比携手斩获“铃轩奖”

12月23日—24日&#xff0c;汽车行业的年度盛典2022中国汽车供应链峰会&#xff08;CASCS2022&#xff09;盛大开幕&#xff0c;全国汽车供应链大咖再次聚首中国车谷&#xff0c;怿星科技CEO潘凯在圆桌《新汽车软件到底怎么办》上分享了观点。会议同期&#xff0c;国内最具权威…

十年底层创新,2023年亚马逊云科技或再创新高

2006年&#xff0c;亚马逊云科技推出了第一代公有云产品Amazon S3和Amazon EC2&#xff0c;由此开创了企业IT的历史——云计算从此开始改变整个企业IT市场。2013年&#xff0c;亚马逊云科技再次开创了历史&#xff0c;推出了首个自研芯片Amazon Nitro&#xff0c;由此打开了全球…

屏幕录制下载安装?这3个软件,亲测好用

很多小伙伴在使用电脑进行学习、娱乐和工作的时候&#xff0c;或多或少遇到过需要使用屏幕录制功能的时候。那么有什么特别好用的屏幕录制软件吗&#xff1f;屏幕录制下载安装怎么进行&#xff1f;今天小编分享3款软件&#xff0c;特别好用。 屏幕录制下载1&#xff1a;爱拍录屏…

朗润国际期货技术分析——日内交易图表类型

一张图表胜过千言万语。你以前听说过这句话&#xff0c;对吗&#xff1f;在日内交易员的世界里&#xff0c;一张图表往往比千言万语更有价值。它不仅告诉我们过去发生了什么&#xff0c;而且告诉我们一个市场在未来可能会做什么。它将继续走高还是走低&#xff1f;它是否处于一…

第十一篇 1+X考证 Web前端测试题MySQL篇(新)

单选题 1、下列关于MySQL备份的说法中&#xff0c;错误的是&#xff08; B &#xff09; A、备份数据库的命令是mysqldump B、备份数据库的文件扩展名必须是.sql C、“mysql”命令可以还原数据库 D、可以同时备份一个或多个数据库 [ 解析&#xff1a;.txt ] 2、在MySQL…

DBSCAN聚类的python实现

文章目录介绍DBSCAN()函数介绍实例参数选择实例整理数据选择eps和min_samples建立模型作者&#xff1a;张双双介绍 DBSCAN&#xff08;Density-Based Spatial Clustering of Applications with Noise&#xff09;是一种基于密度的聚类算法&#xff0c;python中的sklearn.clust…

BACnet协议详解——初识BACnet架构

文章目录BACnet协议架构BACnet简化的架构简化的四层BACnet体系结构选取BACnet 网络的拓扑结构安全BACnet协议架构 国际标准化组织在制定计算机网络通讯协议标准时定义了一个模型&#xff0c;称为开放系统互联参考模型&#xff08;OSI&#xff08;ISO 7498&#xff09;。模型的…