Python中ArcPy实现对不同时相的栅格遥感影像依据其成像时间分别批量拼接

本文主要是介绍Python中ArcPy实现对不同时相的栅格遥感影像依据其成像时间分别批量拼接,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

  本文介绍基于PythonArcpy模块,对大量不同时相的栅格遥感影像按照其成像时间依次执行批量拼接的方法。

  在前期的文章Python中arcpy栅格创建与遥感影像多景数据批量拼接Mosaic(https://blog.csdn.net/zhebushibiaoshifu/article/details/118901707)中,我们已经介绍了利用Python实现栅格遥感影像批量拼接的方法;但这篇文章实现的操作是将某个保存路径下全部的栅格图像文件加以拼接,换句话说,是对不同空间位置同一时相的若干图像加以拼接,拼接结果就只有一景大的图像。而在实践中,我们经常还会需要对不同空间位置不同时相的图像分别加以拼接,拼接结果是很多景不同时相的大的图像。那么,这种需求该怎么实现呢?

  首先,我们来明确一下本文的具体需求。现有一个存储有大量.tif格式遥感影像的文件夹,其中每一个遥感影像的文件名中都包含有该图像的成像时间,如下图所示。

在这里插入图片描述

  我们希望,对于同一天成像的遥感影像进行拼接——例如,上图中具有2001年第185天成像的遥感影像10幅,每一幅都是这一天在不同空间位置的成像;同时有2001年第193天成像的遥感影像10幅。我们希望首先将第185天成像的10幅遥感影像加以拼接,随后再对第193天成像的10幅遥感影像加以拼接,以此类推。在遥感影像整体数量较少时,我们或许还可以逐一手动拼接;而当图像数量很多时,就需要借助代码来实现了。

  明确了需求后,我们就可以开始具体的操作。首先,本文所需用到的代码如下。

# -*- coding: utf-8 -*-
"""
Created on Fri Apr 15 13:21:55 2022@author: fkxxgis
"""import os
import arcpytif_file_path="E:/LST/Data/NDVI/02_TIFF/"
out_file_path="E:/LST/Data/NDVI/03_Mosaic/"
arcpy.env.workspace=tif_file_pathtif_file_name=arcpy.ListRasters("*","tif")
tif_file_date=tif_file_name[0][1:8]
one_day_tif_list=[]tif_file_example_path=tif_file_path+tif_file_name[0]
cell_size_x=arcpy.GetRasterProperties_management(tif_file_example_path,"CELLSIZEX")
cell_size=cell_size_x.getOutput(0)
value_type=arcpy.GetRasterProperties_management(tif_file_example_path,"VALUETYPE")
describe=arcpy.Describe(tif_file_example_path)
spatial_reference=describe.spatialReferencefor tif_file in tif_file_name:if tif_file[1:8]==tif_file_date:one_day_tif_list.append(tif_file)tif_file_temp=tif_fileif tif_file==tif_file_name[len(tif_file_name)-1]:out_file_name=tif_file[1:8]+".tif"arcpy.CreateRasterDataset_management(out_file_path,out_file_name,cell_size,"16_BIT_SIGNED",spatial_reference,"1")out_file=out_file_path+out_file_namefor tif_file_new in one_day_tif_list:arcpy.Mosaic_management([tif_file_path+tif_file_new],out_file)else:out_file_name=tif_file_temp[1:8]+".tif"arcpy.CreateRasterDataset_management(out_file_path,out_file_name,cell_size,"16_BIT_SIGNED",spatial_reference,"1")out_file=out_file_path+out_file_namefor tif_file_new in one_day_tif_list:arcpy.Mosaic_management([tif_file_path+tif_file_new],out_file)one_day_tif_list=[]one_day_tif_list.append(tif_file)tif_file_date=tif_file[1:8]

  其中,tif_file_path是原有拼接前遥感图像的保存路径,out_file_path是我们新生成的拼接后遥感影像的保存路径。

  在这里,我们需要首先在资源管理器中,将tif_file_path路径下的各文件以“名称”排序的方式进行排序;随后,利用arcpy.ListRasters()函数,获取路径下原有的全部.tif格式的图像文件,并截取第一个文件的部分文件名,从而获取其成像时间;接下来,做好创建一个新的栅格文件的准备,这一部分代码的含义在本文开头提及的那一篇博客(https://blog.csdn.net/zhebushibiaoshifu/article/details/118901707)中已有提及,这里就不再赘述。

  接下来,遍历tif_file_path路径下全部.tif格式图像文件。其中,我们通过一个简单的判断语句,来确定某一成像时间的遥感影像是否已经读取完毕——如果已经读取完毕,例如假如第185天成像的10幅遥感影像都已经遍历过了,那么就对这十景遥感影像加以拼接;如果还没有读取完毕,例如假如第185天成像的10幅遥感影像目前仅遍历到了第8幅,那么就不拼接,继续往下遍历。

  这里相信大家也看到了为什么我们要在前期先将文件夹中的文件按照“名称”排序——是为了保证同一成像时间的所有遥感影像都排列在一起,遍历时只要遇到一个新的成像时间,程序就知道上一个成像时间的所有图像都已经遍历完毕了,就可以将上一个成像时间的所有栅格图像加以拼接。

  最后,通过tif_file==tif_file_name[len(tif_file_name)-1]这个判断,来确认是否目前已经遍历到文件夹中的最后一个图像文件。如果是的话,就需要将当前成像时间的所有图像进行拼接,并完成代码的运行。

  代码运行完毕后,我们开看一下结果文件夹。可以看到,其中的图像已经是按照成像时间,分别完成拼接后的结果了。

在这里插入图片描述

欢迎关注公众号/CSDN/知乎/微博:疯狂学习GIS

这篇关于Python中ArcPy实现对不同时相的栅格遥感影像依据其成像时间分别批量拼接的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/757477

相关文章

服务器集群同步时间手记

1.时间服务器配置(必须root用户) (1)检查ntp是否安装 [root@node1 桌面]# rpm -qa|grep ntpntp-4.2.6p5-10.el6.centos.x86_64fontpackages-filesystem-1.41-1.1.el6.noarchntpdate-4.2.6p5-10.el6.centos.x86_64 (2)修改ntp配置文件 [r

python: 多模块(.py)中全局变量的导入

文章目录 global关键字可变类型和不可变类型数据的内存地址单模块(单个py文件)的全局变量示例总结 多模块(多个py文件)的全局变量from x import x导入全局变量示例 import x导入全局变量示例 总结 global关键字 global 的作用范围是模块(.py)级别: 当你在一个模块(文件)中使用 global 声明变量时,这个变量只在该模块的全局命名空

hdu1043(八数码问题,广搜 + hash(实现状态压缩) )

利用康拓展开将一个排列映射成一个自然数,然后就变成了普通的广搜题。 #include<iostream>#include<algorithm>#include<string>#include<stack>#include<queue>#include<map>#include<stdio.h>#include<stdlib.h>#include<ctype.h>#inclu

【C++】_list常用方法解析及模拟实现

相信自己的力量,只要对自己始终保持信心,尽自己最大努力去完成任何事,就算事情最终结果是失败了,努力了也不留遗憾。💓💓💓 目录   ✨说在前面 🍋知识点一:什么是list? •🌰1.list的定义 •🌰2.list的基本特性 •🌰3.常用接口介绍 🍋知识点二:list常用接口 •🌰1.默认成员函数 🔥构造函数(⭐) 🔥析构函数 •🌰2.list对象

【Prometheus】PromQL向量匹配实现不同标签的向量数据进行运算

✨✨ 欢迎大家来到景天科技苑✨✨ 🎈🎈 养成好习惯,先赞后看哦~🎈🎈 🏆 作者简介:景天科技苑 🏆《头衔》:大厂架构师,华为云开发者社区专家博主,阿里云开发者社区专家博主,CSDN全栈领域优质创作者,掘金优秀博主,51CTO博客专家等。 🏆《博客》:Python全栈,前后端开发,小程序开发,人工智能,js逆向,App逆向,网络系统安全,数据分析,Django,fastapi

让树莓派智能语音助手实现定时提醒功能

最初的时候是想直接在rasa 的chatbot上实现,因为rasa本身是带有remindschedule模块的。不过经过一番折腾后,忽然发现,chatbot上实现的定时,语音助手不一定会有响应。因为,我目前语音助手的代码设置了长时间无应答会结束对话,这样一来,chatbot定时提醒的触发就不会被语音助手获悉。那怎么让语音助手也具有定时提醒功能呢? 我最后选择的方法是用threading.Time

【Python编程】Linux创建虚拟环境并配置与notebook相连接

1.创建 使用 venv 创建虚拟环境。例如,在当前目录下创建一个名为 myenv 的虚拟环境: python3 -m venv myenv 2.激活 激活虚拟环境使其成为当前终端会话的活动环境。运行: source myenv/bin/activate 3.与notebook连接 在虚拟环境中,使用 pip 安装 Jupyter 和 ipykernel: pip instal

Android实现任意版本设置默认的锁屏壁纸和桌面壁纸(两张壁纸可不一致)

客户有些需求需要设置默认壁纸和锁屏壁纸  在默认情况下 这两个壁纸是相同的  如果需要默认的锁屏壁纸和桌面壁纸不一样 需要额外修改 Android13实现 替换默认桌面壁纸: 将图片文件替换frameworks/base/core/res/res/drawable-nodpi/default_wallpaper.*  (注意不能是bmp格式) 替换默认锁屏壁纸: 将图片资源放入vendo

C#实战|大乐透选号器[6]:实现实时显示已选择的红蓝球数量

哈喽,你好啊,我是雷工。 关于大乐透选号器在前面已经记录了5篇笔记,这是第6篇; 接下来实现实时显示当前选中红球数量,蓝球数量; 以下为练习笔记。 01 效果演示 当选择和取消选择红球或蓝球时,在对应的位置显示实时已选择的红球、蓝球的数量; 02 标签名称 分别设置Label标签名称为:lblRedCount、lblBlueCount

【机器学习】高斯过程的基本概念和应用领域以及在python中的实例

引言 高斯过程(Gaussian Process,简称GP)是一种概率模型,用于描述一组随机变量的联合概率分布,其中任何一个有限维度的子集都具有高斯分布 文章目录 引言一、高斯过程1.1 基本定义1.1.1 随机过程1.1.2 高斯分布 1.2 高斯过程的特性1.2.1 联合高斯性1.2.2 均值函数1.2.3 协方差函数(或核函数) 1.3 核函数1.4 高斯过程回归(Gauss