本文介绍基于Python语言,结合已知研究区域中所覆盖的全部遥感影像分幅条带号,从大量的遥感影像文件中筛选落在这一研究区域中遥感影像文件的方法。

  首先,先来明确一下本文所需实现的需求。现已知一个研究区域(四川省),且已知覆盖这一研究区域所需的全部遥感影像的分幅条带号(这里就以Sentinel-2数据所采用的分幅规则为例来介绍),如下图所示。

  其中,矢量图层上的标签Label)就是所需的遥感影像的分幅条带号;且这一矢量要素的属性表中,有具体每一个分幅条带号的具体字段(如上图红色方框所示的那一列)。

  同时,我们还下载好了大量的遥感影像——这些遥感影像数量众多,既有位于这一研究区域内的遥感影像,同时还有位于研究区域外的。其中,这里所有的遥感影像都保存在一个大文件夹下,而这一大文件夹下还有多个子文件夹,具体遥感影像就存在于子文件夹中;如下图所示。

  其中,红色框内的文件夹即为前述“大文件夹”,紫色框内的每一个文件夹即为前述“子文件夹”。此外,每一个子文件夹的命名也是和遥感影像的分幅条带号对应的,比如43LCC这一个子文件夹就是保存了UTM编号为43的网格内的全部遥感影像。这里关于Sentinel-2遥感影像分幅条带号的介绍,如果大家有需要,可以参考哨兵2号Sentinel-2分幅条带介绍与MGRS网格矢量文件获取这篇文章。

  同时,在每一个遥感影像文件文件名中,都有分幅条带号这一字段;例如,打开43LCC这一子文件夹,如下图所示。

  我们希望实现的,就是基于上图所示的研究区域内遥感影像的分幅条带号信息,在大量的遥感影像中筛选出这些分幅对应的遥感影像文件,并将其通过复制的方式放入到一个新的结果文件夹中。

  了解了具体需求,我们就可以开始代码的撰写。首先,本文所需的完整代码如下所示。

# -*- coding: utf-8 -*-
"""
Created on Fri Feb 3 18:33:11 2023 @author: fkxxgis
""" import os
import xlrd
import shutil xls_file = r"E:\02_Project\Sentinel.xls"
tif_path = r"G:\S2_CSI_LCC_product\LCC_10days_2020"
result_path = r"G:\Select" book = xlrd.open_workbook(xls_file)
sh = book.sheet_by_index(0)
row_num = sh.nrows for row in range(1, row_num):
mgrs = sh.cell(row,6).value
utm = mgrs[0:2]
for root, dirs, files in os.walk(tif_path):
for name in dirs:
if name[0:2] == utm:
for root_1, dirs_1, files_1 in os.walk(os.path.join(root, name)):
for name_1 in files_1:
if name_1.find(mgrs) != -1:
if not os.path.exists(os.path.join(result_path, mgrs)):
os.makedirs(os.path.join(result_path, mgrs))
print("Make " + mgrs + " path.")
shutil.copy(os.path.join(root, name, name_1), os.path.join(result_path, mgrs, name_1))

  其中,我们需要导入osxlrdshutil3Python库,分别实现系统文件遍历、Excel数据读取与研究区域内遥感影像数据的复制。其中,关于xlrd库的配置,如果大家是用的Anaconda环境,可以参考Python表格处理模块xlrd在Anaconda中的安装这篇文章。此外,我们首先需要将本文开头提及的表示遥感影像数据分幅条带号的矢量文件的属性表导出(通过“System Toolboxes”→“Conversion Tools.tbx”→“Excel”→“Table To Excel”选项,如下图所示),保存为.xls格式的表格文件,从而方便我们后期代码对数据的读取。

  在代码中,xls_file表示我们将属性表导出后得到的.xls格式的表格文件,tif_path表示存放所有遥感影像的大文件夹,result_path则表示找到我们所需的结果遥感影像文件后,希望将其复制到的路径。

  随后,我们通过xlrd.open_workbook()函数打开.xls格式的表格文件,读取其中的数据并获取其行数row_num;接下来,我们即可对这一表格文件的单元格数据加以遍历,也就是代码中的第1for循环——我们从第2行开始(因为第1行是表头),读取每一行第7列的数据(也就是存放有遥感影像分幅条带号的那一列),从而依次获取所需的遥感影像条带号。

  接下来,由于遥感影像的分幅条带号的前两位,以及前述子文件夹名称的前两位,都是表示UTM编号的两位数字,因此我们通过utm = mgrs[0:2]这句代码,截取当前遥感影像分幅条带号的前两位,并通过os.walk()函数进行遍历,通过一个if判断语句找到大文件夹下对应的子文件夹;随后,在这一子文件夹中同样通过os.walk()函数,进行遥感影像文件的遍历——也就是代码中第2个、第3个、第4for循环所做的事情。

  接下来,针对遍历得到的子文件夹中每一个遥感影像文件,我们通过.find()函数找到所有满足这一分幅条带号的遥感影像文件,也就是代码中第5for循环与第2if判断语句的工作。找到符合当前分幅条带号的遥感影像文件后,我们即可开始将其复制到目标文件夹中。

  这里还有一个需求,因为我们这里保存的是多时相遥感影像数据(即每一个分幅条带号对应着多个不同时相的遥感影像文件),因此我们希望在目标文件夹中,同样用各个分幅条带号作为名称,创建多个子文件夹;然后将当前分幅条带号对应的全部遥感影像数据放入这一文件夹中。基于此,我们通过os.path.exists()函数判断是否存在指定的子文件夹,如果不存在的话就新建这一文件夹;随后,通过shutil.copy()函数复制这些遥感影像文件。

  运行上述代码,最终我们得到的结果如下图所示;其中,每一个子文件夹都表示一个分幅条带号,子文件夹内即为这一分幅条带号所对应的全部时相的遥感影像文件。

  至此,大功告成。

Python依据遥感影像的分幅筛选出对应的栅格文件的更多相关文章

  1. Python核对遥感影像批量下载情况的方法

      本文介绍批量下载遥感影像时,利用Python实现已下载影像文件的核对,并自动生成未下载影像的下载链接列表的方法.   批量下载大量遥感影像数据对于GIS学生与从业人员可谓十分常见.然而,对于动辄成 ...

  2. Python gdal读取MODIS遥感影像并结合质量控制QC波段掩膜数据

      本文介绍基于Python中GDAL模块,实现MODIS遥感影像数据的读取.计算,并基于质量控制QC波段进行图像掩膜的方法.   前期的文章Python GDAL读取栅格数据并基于质量评估波段QA对 ...

  3. Python ArcPy批量掩膜、重采样大量遥感影像

      本文介绍基于Python中ArcPy模块,对大量栅格遥感影像文件进行批量掩膜与批量重采样的操作.   首先,我们来明确一下本文的具体需求.现有一个存储有大量.tif格式遥感影像的文件夹:且其中除了 ...

  4. Python中用max()筛选出列表中出现次数最多的元素

    1 List = [1,2,3,4,2,3,2] # 随意创建一个只有数字的列表 2 maxTimes = max(List,key=List.count) # maxTimes指列表中出现次数最多的 ...

  5. 批量下载Landsat遥感影像的方法

      本文介绍在USGS网站批量下载Landsat系列遥感影像的方法.   首先,打开EarthExplorer的官网,首先完成注册与登录.   接下来,点击左侧"Search Criteri ...

  6. 使用Python以优雅的方式实现根据shp数据对栅格影像进行切割

    目录 前言 涉及到的技术 优雅切割 总结 一.前言        前面一篇文章(使用Python实现子区域数据分类统计)讲述了通过geopandas库实现对子区域数据的分类统计,说白了也就是如何根据一 ...

  7. 基于VC++ Win32+CUDA+OpenGL组合与VC++ MFC SDI+CUDA+OpenGL组合两种方案的遥感影像显示:获得的重要结论!

    1.基于VC++ Win32+CUDA+OpenGL组合的遥感影像显示 在该组合方案下,初始化时将OpenGL设置为下面两种方式,效果一样 //设置方式1 glutInitDisplayMode (G ...

  8. Earthdata批量下载MODIS遥感影像的方法

      本文介绍在Earthdata网站中,批量下载MODIS遥感影像的方法.   首先,打开网页:https://search.earthdata.nasa.gov/search ,如果没有Earthd ...

  9. HDF格式遥感影像批量转为TIFF格式:ArcPy实现

      本文介绍基于Python中ArcPy模块,实现大量HDF格式栅格图像文件批量转换为TIFF格式的方法.   首先,来看看我们想要实现的需求.   在一个名为HDF的文件夹下,有五个子文件夹:每一个 ...

  10. 遥感影像滤波处理软件 — timesat3.2

    最近因为要做遥感影像的滤波处理,经过女神推荐,决定用Timesat,可是该软件3.1版本只适合xp系统以及2011的matlab,后来在官网上找到了最新的3.2版本.支持64位操作系统以及2014的m ...

随机推荐

  1. 鸿蒙HarmonyOS实战-ArkUI组件(Tabs)

    一.Tabs Tabs组件是一种常见的用户界面(UI)组件,它是一个可以容纳多个选项卡的容器组件.每个选项卡通常包含一个面板和一个标签,用户可以通过点击标签来切换面板.Tabs组件通常用于展示多个相关 ...

  2. Mac 上fiddler与charles 抓包https 小程序请求 内容

    为什么选择charles 之前讲过<wireshark使用教程及过滤语法总结--血泪史的汇聚>, 很强大,但是很难用. fiddler 很好用,之前mac 上面没有,现在有了 fiddle ...

  3. 物联网浏览器(IoTBrowser)-使用深度学习开发防浸水远程报警

    一.起因 新房子买在2楼,反水概率较大,加上无良开发商的劣质材料,就我所在楼栋已经发生几起反水事件,而且是高层反水,有几户重复出现反水,原因是管道中间有一个钢筋 :( 二.解决方案 1.水浸传感器+W ...

  4. 【笔记】connect by中的nocycle

    connect by主要用于父子,祖孙,上下级等层级关系的查询 常用的是prior,nocycle prior: 查询父行的限定符,格式: prior column1 = column2 or col ...

  5. 聊聊日志硬扫描,阿里 Log Scan 的设计与实践

    简介: SLS 新推出 Scan 功能,让未索引的字段也支持搜索(硬扫描模式),节省全量索引产生的构建和存储费用,同时 Scan 的运行时计算模式对于杂乱结构的日志数据有更好的适配,帮助企业客户实现数 ...

  6. Apache Flink 误用之痛

    摘要:本文根据 Flink Forward 全球在线会议 · 中文精华版整理而成,围绕着项目的开始.需求分析.开发,以及测试.上线.运维整个生命周期展开,介绍了 Apache Flink 实践中的一些 ...

  7. [FE] nvm-windows: Microsoft/NPM/Google 推荐 Windows 的 Node.js 版本管理器, posix 的 nvm-sh/nvm

    1. 到 github 下载 nvm-setup.zip 并安装. Releases · coreybutler/nvm-windows (github.com) 2. 安装一个版本的 nodejs. ...

  8. 读取 k8s 存储在 etcd 上的数据

    读取 k8s 存储在 etcd 上的数据 Etcd Assistant 是一款 Etcd 可视化管理工具,便捷高效地操作您的 etcd 集群:支持多种键的视图:管理租约.用户.角色和权限. etcd是 ...

  9. 一键启动的AI离线知识库,无需复杂环境依赖,小白都能上手了

    简介 在人工智能技术飞速发展的今天,我们经常面临一个挑战:如何快速.简便地部署和使用AI技术?AntSK项目,一个开源的AI知识库和智能体,就是为了解决这一问题而诞生的.现在,我们自豪地宣布,AntS ...

  10. 防抖节流的含义使用场景及js实现原理

    1.防抖:n 秒后在执行该事件,若在 n 秒内被重复触发,则重新计时.代码实现重在清零 clearTimeout. 应用:登录,提交,浏览器窗口的resizes事件,文本编辑保存 <script ...