ArcPy批量对大量遥感影像相减做差
本文介绍基于Python中ArcPy模块,对大量栅格遥感影像文件批量进行相减做差的方法。
首先,我们来明确一下本文的具体需求。现有一个存储有多张.tif格式遥感影像的文件夹,其中每一个遥感影像的文件名中都包含有该图像的成像年份,且每一个遥感影像的空间范围、像元大小等都是一致的,可以直接进行栅格相减;且文件夹内除了.tif格式的遥感影像文件外,还具有其它格式的文件;如下图所示。

我们希望,对于同一年成像的两景遥感影像分别进行做差处理。例如,将上图中的2001.tif文件减去2001_N.tif文件,将2005.tif文件减去2005_N.tif文件,以此类推。
明确了需求后,我们就可以开始具体的操作。首先,本文所需用到的代码如下。
# -*- coding: utf-8 -*-
"""
Created on Sun Apr 24 11:12:37 2022
@author: fkxxgis
"""
import arcpy
tif_file_path="E:/LST/Data/MODIS/16_True/"
dif_file_path="E:/LST/Data/MODIS/17_Difference/"
arcpy.env.workspace=tif_file_path
tif_file_name=arcpy.ListRasters("*","tif")
tif_file_year=tif_file_name[0][0:4]
one_year_tif_list=[]
for tif_file in tif_file_name:
if tif_file[0:4]==tif_file_year:
one_year_tif_list.append(tif_file)
if tif_file==tif_file_name[len(tif_file_name)-1]:
arcpy.gp.Minus_sa(one_year_tif_list[0],
one_year_tif_list[1],
dif_file_path+tif_file_year+"_Dif.tif")
else:
arcpy.gp.Minus_sa(one_year_tif_list[0],
one_year_tif_list[1],
dif_file_path+tif_file_year+"_Dif.tif")
one_year_tif_list=[]
one_year_tif_list.append(tif_file)
tif_file_year=tif_file[0:4]
其中,tif_file_path是原有计算平均值前遥感图像的保存路径,dif_file_path是我们新生成的求取平均值后遥感影像的保存路径,也就是结果保存路径。
在这里,和我们前期的博客Python ArcPy批量拼接长时间序列栅格图像类似,需要首先在资源管理器中,将tif_file_path路径下的各文件以“名称”排序的方式进行排序;随后,利用arcpy.ListRasters()函数,获取路径下原有的全部.tif格式的图像文件,并截取第一个文件的部分文件名,从而获取其成像时间的具体年份。
接下来,遍历tif_file_path路径下全部.tif格式图像文件。其中,我们通过一个简单的判断语句if tif_file[0:4]==tif_file_year:,来确定某一年的遥感影像是否已经读取完毕——如果已经读取完毕,例如假如2001年成像的2幅遥感影像都已经遍历过了,那么就对这2景遥感影像做差,并开始对下一个年份(即2005年)成像的2景遥感影像继续加以计算;如果还没有读取完毕,例如假如2001年成像的2幅遥感影像目前仅遍历了第1幅,那么就不做差,继续往下遍历,直到遍历完2001年成像的2幅遥感影像。
这里相信大家也看到了为什么我们要在前期先将文件夹中的文件按照“名称”排序——首先,是为了保证同一年成像的2景遥感影像都排列在一起,遍历时只要遇到一个新的年份,程序就知道上一个年份的2张图像都已经遍历完毕了,就可以将上一个年份的2张栅格图像加以做差;其次,是为了保证我们的被减数(例如2005.tif文件)排在减数(例如2005_N.tif文件)的前面,从而方便我们进行做差运算。
在这里,我们实现两张栅格遥感影像相减操作的函数是arcpy.gp.Minus_sa()函数,其第一个参数是被减数,第二个参数是减数,第三个参数是结果保存路径与名称。
最后,通过if tif_file==tif_file_name[len(tif_file_name)-1]:这个判断,来确认是否目前已经遍历到文件夹中的最后一个图像文件。如果是的话,就需要将当前成像年份的2景图像进行差值的求取,并宣告代码完成运行。
在 IDLE (Python GUI) 中运行代码。代码运行完毕后,我们可以看到求取差值之后的遥感影像已经存在于我们的结果保存路径中了。

至此,大功告成。
ArcPy批量对大量遥感影像相减做差的更多相关文章
- Earthdata批量下载MODIS遥感影像的方法
本文介绍在Earthdata网站中,批量下载MODIS遥感影像的方法. 首先,打开网页:https://search.earthdata.nasa.gov/search ,如果没有Earthd ...
- 批量下载Landsat遥感影像的方法
本文介绍在USGS网站批量下载Landsat系列遥感影像的方法. 首先,打开EarthExplorer的官网,首先完成注册与登录. 接下来,点击左侧"Search Criteri ...
- Python gdal读取MODIS遥感影像并结合质量控制QC波段掩膜数据
本文介绍基于Python中GDAL模块,实现MODIS遥感影像数据的读取.计算,并基于质量控制QC波段进行图像掩膜的方法. 前期的文章Python GDAL读取栅格数据并基于质量评估波段QA对 ...
- Alice and Bob 要用到辗转相减
Alice and BobTime Limit: 1 Sec Memory Limit: 64 MBSubmit: 255 Solved: 43 Description Alice is a be ...
- Python ArcPy批量掩膜、重采样大量遥感影像
本文介绍基于Python中ArcPy模块,对大量栅格遥感影像文件进行批量掩膜与批量重采样的操作. 首先,我们来明确一下本文的具体需求.现有一个存储有大量.tif格式遥感影像的文件夹:且其中除了 ...
- Python ArcPy批量计算多时相遥感影像的各项元平均值
本文介绍基于Python中ArcPy模块,对大量长时间序列栅格遥感影像文件的每一个像元进行多时序平均值的求取. 在遥感应用中,我们经常需要对某一景遥感影像中的全部像元的像素值进行平均值求取-- ...
- Python核对遥感影像批量下载情况的方法
本文介绍批量下载遥感影像时,利用Python实现已下载影像文件的核对,并自动生成未下载影像的下载链接列表的方法. 批量下载大量遥感影像数据对于GIS学生与从业人员可谓十分常见.然而,对于动辄成 ...
- Python ArcPy批量拼接长时间序列栅格图像
本文介绍基于Python中ArcPy模块,对大量不同时相的栅格遥感影像按照其成像时间依次执行批量拼接的方法. 在前期的文章Python arcpy创建栅格.批量拼接栅格中,我们介绍了利用Pyt ...
- C#-和时间有关的计算代码、时间相减 得到天数、小时、分钟、秒差
asp.net(C#)时间相减 得到天数.小时.分钟.秒差 asp.net(C#)时间相减 得到天数.小时.分钟.秒差 DateTime dtone = Convert.ToDateTime( ...
- 遥感影像滤波处理软件 — timesat3.2
最近因为要做遥感影像的滤波处理,经过女神推荐,决定用Timesat,可是该软件3.1版本只适合xp系统以及2011的matlab,后来在官网上找到了最新的3.2版本.支持64位操作系统以及2014的m ...
随机推荐
- R语言文本数据挖掘(三)
文本分词,就是对文本进行合理的分割,从而可以比较快捷地获取关键信息.例如,电商平台要想了解更多消费者的心声,就需要对消费者的文本评论数据进行内在信息的数据挖掘分析,而文本分词是文本挖掘的重要步骤.R语 ...
- 实现和CSS一样的easing动画?直接看Mozilla、Chromium源码!
前言 在上一篇丝滑的贝塞尔曲线:从数学原理到应用介绍贝塞尔曲线实现动画时给自己留了一个坑,实现的动画效果和CSS的transition-timing-function: cubic-bezier差别较 ...
- Kubernetes(k8s)集群安装JupyterHub以及Lab
背景 JupyterHub 为用户组带来了笔记本的强大功能.它使用户能够访问计算环境和资源,而不会给用户带来安装和维护任务的负担.用户--包括学生.研究人员和数据科学家--可以在他们自己的工作空间中完 ...
- 数组练习 fill sort
package day05; import java.util.Arrays; //fill sort equals public class testArrays { public static v ...
- PopupWindow点击空白区域消失
下面三个条件必须要有,要在popupWindow显示之前调用popupWindow.setOutsideTouchable(true);popupWindow.setFocusable(true);p ...
- git撤销某一次commit提交
一.使用git rebase命令 如果您想彻底删除 Git 中的某次提交的内容,可以使用 git rebase 命令并将该提交删除. 以下是删除 Git 提交内容的步骤: 找到要删除的提交的哈希值.可 ...
- 借助 APISIX Ingress,实现与注册中心的无缝集成
作者张晋涛,API7.ai 云原生技术专家,Apache APISIX PMC 成员,Apache APISIX Ingress Controller 项目维护者. 原文链接 云原生场景下是否需要服务 ...
- 安装node并创建vue项目
1.多版本管理工具 nvm https://github.com/coreybutler/nvm-windows/releases nvm-setup.zip 2. 打开nvm文件夹下的setting ...
- Python-获取Local Storage和Session Storage
一.简介 LocalStorage 是只读的.数据存储也是跨浏览器会话.LocalStorage 类似于SessionStorage. 区别在于,数据存储在 LocalStorage 是无期限的,而当 ...
- 【转】内存清零KILL进程
#include <Windows.h> #include <Ntsecapi.h> #include <Aclapi.h> #include <tlhelp ...