08-SNAP的命令行处理工具gpt及其批处理(Sentinel-1和Sentinel-2为例)
转载自:https://blog.csdn.net/lidahuilidahui/article/details/107005979
08-SNAP的命令行处理工具gpt及其批处理(Sentinel-1和Sentinel-2为例)
- 导语
- 前言
- gpt命令行工具简介
- gpt命令行工具的位置
- gpt命令行语法参数
- 数据源
- Sentinel-1数据
- Sentinel-2数据
- gpt实现单一操作
- 单个数据集单一操作处理
- Sentinel-2 NDVI计算
- Sentinel-1 轨道校正
- 多个数据集批量单一操作处理
- Sentinel-2时序NDVI计算
- Sentinel-1批量轨道校正
- gpt搭配流程图实现流程式处理
- 单个数据集流程图处理
- Sentinel-2 L2A 数据集流程式处理
- 保存流程图文件
- Sentinel-1 IW GRDH 数据集流程式处理
- 多个数据集批量流程图处理
- Sentinel-2 L2A 数据集批量流程式处理
- Sentinel-1 IW GRDH 数据集批量流程式处理
- 后语
- 参考文献
导语
如果我告诉你,SNAP中仅需一行代码即可以完成某地整年Sentinel卫星影像的预处理,而仅仅需要数小时而已,你是否该对SNAP该“刮目相看”了?
前言
尽管本文是以Windows10系统为例的,但是在linux,mac系统使用SNAP的gpt工具命令是类似的。
gpt命令行工具简介
gpt命令行工具的位置
gpt命令行语法参数
gpt -h
(可能需要等待数十秒,因为这个命令行包括的操作和命令太多了,稍后会显示一大片的英文文档说明,鼠标往前拉,先看下前面的参数。绝大数情况下,我们不要记住那么多得参数,只需要在用到的时候找到其即可)
# <op>表示某一操作符,<graph-file>表示SNAP流程图文件(xml文件);见Arguments参数
# <options>表示可选参数,-h, -e, -f等等,见Options选项
# <source-file-1>表示源数据文件,当然后面还可以多个源数据文件
gpt <op>|<graph-file> [options] [<source-file-1> <source-file-2> ...]
(#号表示的是注释说明)
有几个Options参数是比较重要的(你可能暂时看不懂-S和-P参数的说明,不过,不重要,带着疑问继续往下看,后面展示其用法时,再讨论其表示的意思):
- -h: 显示帮助命令;
- -t <file>: 表示输出文件名(用file表示),如果没有这个参数,默认输出的文件名是target.dim;
- -f <format>:表示输出的格式(用format表示),默认的是“BEAM-DIMAP”,当然你也可以输入“GeoTIFF”, "ENVI"等格式输出;
- -S<source>=<file> :这是由xml文件定义的源文件参数变量${<source>}指示(为什么是-S?答案是简写,S表示source的第一个字母)。
- -P<name>=<value>:这个参数和-S<source>=<value>是类似的,但是更加通用,可以在xml文件设置名称字值对变量(为什么是-P?答案也是简写,P表示parameters的第一个字母)。后面批处理是会展示其用法;
如果你继续往下拉,可以看到Opterators,其下均是SNAP支持的操作(按字母升序排列,A->Z):
数据源
Sentinel-1数据
以覆盖上海市的sentinel-1 IW GRDH 产品数据(2019年6月-2020年5月)为例(源数据无需解压):
范围如下:
Sentinel-2数据
以覆盖位于山东省东营市的黄河三角洲区域为例,以下为其2019年1月-201912月的近似无云(云量少于5%)的Sentinel-2 L2A影像(源数据无需解压):
范围如下:
gpt实现单一操作
单个数据集单一操作处理
Sentinel-2 NDVI计算
gpt NdviOp -h
可以看到如下的参数说明:
源文件参数 -Ssource=<file>,表示源数据,file用文件名代替,尖括号表示该参数是必须的,不可缺失,后面float,string的尖括号也表示相同的意思;
-PnirSourceBand=<string> , -PredSourceBand=<string> 分别表示近红外波段,红光波段,string表示波段名;
# optional表示可选项参数,即上面带-的相关参数,如-Ssource等
gpt NdviOp [optional]
# 虽然是一句命令,但是添加路径后,显得很长。可以将最后一行命令复制到一个.txt文件中,
# 在.txt文本中也容易编辑命令。确认命令无误后,
# 打开命令行界面(在命令行界面中点击鼠标右键则可以粘贴拷贝的文本了)
# -Ssource表示源文件的绝对路径(尽管也可以使用相对路径,但是绝对路径安全一些),
# 为什么在路径中添加了双引号,这样可以避免路径中出现空格导致路径被分隔开识别
# -PnirSourceBand表示近红外波段名,Sentinel-2对应的近红外波段名为B8
# -PredSourceBand表示红光波段名,Sentinel-2对应的红光波段名为B4,
# B8与B4分辨率均为10m,且栅格影像大小一样,所以可以直接进行ndvi的计算
# -t 表示输出的文件名,路径也是添加了双引号,注意博主加了后缀_ndvi.dim
gpt NdviOp -Ssource="G:\2019_S2_data\S2A_MSIL2A_20190122T025021_N0211_R132_T50SPG_20190122T065329.zip" -PnirSourceBand="B8" -PredSourceBand="B4" -t "G:\2019_S2_data\Test_NDVI\S2A_MSIL2A_20190122T025021_N0211_R132_T50SPG_20190122T065329_ndvi.dim"
Sentinel-1 轨道校正
其实使用辐射定标操作演示更好的,但是轨道校正通常是SNAP中SAR数据处理的第一步,也无妨,这里仅仅演示Sentinel-1的gpt单一操作命令行处理。
gpt -h
找到轨道校正的操作符命令名称:Apply-Orbit-File(如果你熟悉SNAP的GUI界面是很容知道的)
gpt Apply-Orbit-File -h
可以看到其用法和参数(注意到其中Parameter Options下的三个-Pxxx参数都有默认值,我们在使用命令行命令中可以不加以设置):
这里以该景Sentinel-1 IW GRDH数据为例:
S1A_IW_GRDH_1SDV_20190617T095445_20190617T095510_027718_0320F1_218D.zip
# 虽然是一句命令,但是添加路径后,显得很长。可以将最后一行命令复制到一个.txt文件中,
# 在.txt文本中也容易编辑命令。确认命令无误后,
# 打开命令行界面(在命令行界面中点击鼠标右键则可以粘贴拷贝的文本了)
# -Ssource表示源文件的绝对路径(尽管也可以使用相对路径,但是绝对路径安全一些),
# 为什么在路径中添加了双引号,这样可以避免路径中出现空格导致路径被分隔开识别
# -t 表示输出的文件名,路径也是添加了双引号,注意博主加入后缀_Orb.dim
gpt Apply-Orbit-File -Ssource="D:\temp_SAR\S1A_IW_GRDH_1SDV_20190617T095445_20190617T095510_027718_0320F1_218D.zip" -t "D:\temp_SAR\test_apply_orbit_file\S1A_IW_GRDH_1SDV_20190617T095445_20190617T095510_027718_0320F1_218D_Orb.dim"
运行结果(大概一两分钟的时间):
将原始数据和轨道校正后的数据导入看看结果正确与否:
perfect!正确无误。好了,接着讲一下单一操作的批处理了。
多个数据集批量单一操作处理
(批量处理时要确保你的硬盘有足够的存储空间,下载数据集最后单独放在一个文件夹下,不用使用中文路径)
Sentinel-2时序NDVI计算
cmd
# 虽然仍是一句命令,但是添加路径后,显得很长。可以将最后一行命令复制到一个.txt文件中,
# 在.txt文本中也容易编辑命令。确认命令无误后,
# 打开命令行界面(在命令行界面中点击鼠标右键则可以粘贴拷贝的文本了)
# /r "G:\2019_S2_data" 表示在该路径下迭代文件,这是博主存放源数据的目录
# %X是迭代变量,这里用于表示迭代的zip文件绝对路径
# *.zip 是正则表达式语法,这里是后缀含有.zip的文件
# -Ssource=%X 表示gpt的源文件
# -t "G:\2019_S2_data\Test_NDVI\%~nX_ndvi.dim" 表示输出文件完整绝对路径,
# G:\2019_S2_data\Test_NDVI是博主的输出文件路径,
# %~nX表示获取XXXX.zip文件不带后缀.zip的文件名。
# 注意博主这里的输出文件添加了后缀_ndvi.dim
for /r "G:\2019_S2_data" %X in (*.zip) do (gpt NdviOp -Ssource=%X -PnirSourceBand="B8" -PredSourceBand="B4" -t "G:\2019_S2_data\Test_NDVI\%~nX_ndvi.dim")
当然,黄河三角洲2019年各月份的NDVI影像我们已经有了,接下来看下如何在SNAP GUI界面中查看某点(通常可以是你的实测点,如果你有该点的经纬度坐标的话)的时序曲线:
为了让你看下Sentinel-2影像的几何校正(正射校正)效果,可以借助打开前四景ndvi影像,均匀分屏显示(并且我可以告诉你,连影像大小,栅格像素数都是一致):
均匀分屏:
Sentinel-1批量轨道校正
# 虽然仍是一句命令,但是添加路径后,显得很长。可以将最后一行命令复制到一个.txt文件中,
# 在.txt文本中也容易编辑命令。确认命令无误后,
# 打开命令行界面(在命令行界面中点击鼠标右键则可以粘贴拷贝的文本了)
# /r "D:\temp_SAR" 表示在该路径下迭代文件,这是博主存放源数据的目录
# %X是迭代变量,这里用于表示迭代的zip文件绝对路径
# *.zip 是正则表达式语法,这里是后缀含有.zip的文件
# -Ssource=%X 表示gpt的源文件
# -t "D:\temp_SAR\test_apply_orbit_file\%~nX_Orb.dim" 表示输出文件完整绝对路径,
# D:\temp_SAR\test_apply_orbit_file是博主的输出文件路径,
# %~nX表示获取XXXX.zip文件不带后缀.zip的文件名。
# 注意博主这里的输出文件添加了后缀_Orb.dim
for /r "D:\temp_SAR" %X in (*.zip) do (gpt Apply-Orbit-File -Ssource=%X -t "D:\temp_SAR\test_apply_orbit_file\%~nX_Orb.dim")
就单个操作的处理,对于Sentinel-1来说不是很有用,Sentinel-1(或者别的SAR数据)的预处理往往需要多步(类似流程图的处理操作)。
gpt搭配流程图实现流程式处理
如果仅仅在gpt中执行单个处理操作,未免有点“大材小用”了,gpt的高效处理在流程式操作才能体现出来。
本篇博客所用的流程图文件以及代码见百度云盘:
链接:https://pan.baidu.com/s/1vxkJX0S4_TWx-N1r7pOfTA
提取码:eak9
单个数据集流程图处理
Sentinel-2 L2A 数据集流程式处理
仍然以S2A_MSIL2A_20190122T025021_N0211_R132_T50SPG_20190122T065329.zip
这景数据为例。
来创建一个Sentinel-2 L2A 用于分类特征数据集,流程如下图(如果你对流程图的步骤不是很熟悉,可以看下04篇博客波段叠加部分):
BandMerge:
Write:
(博主创建了一个源数据目录下创建了一个S2_features文件夹用于保存生成的Sentinel-2特征数据集)
保存流程图文件
然后关闭流程图窗口,关闭SNAP,进入保存的流程图xml文件,查看流程图文件:
可以看下其节点内容(如果你熟悉html网页文件的话,应该可以识别每个节点的内容),先看看其内容,以增强你对流程图参数文件认识,不要改动其中的内容。
(上下拖动鼠标浏览后,可以关闭该xml文件)
我告诉你接下来,只需要使用gpt命名行输入一句命令即可以执行该景数据的预处理,启动一个PowerShell命令行窗口:
# G:\2019_S2_data\test_S2_features.xml为流程图文件的绝对路径,
# 你可能结合自己的流程图文件改动一下路径
# 因为我们在创建流程图时定义数据集的输入与输出
# 所以这里命令行参数没有输入和输出参数
gpt G:\2019_S2_data\test_S2_features.xml
- 1
- 2
- 3
- 4
- 5
不好意思,上述复杂的流程图计算,博主使用gpt命令行工具,仅用了两分钟(不到一个上小便的时间)就完成计算了(当然,博主把研究区裁剪到了近似原来的1/10,数据量少了很多,但是其效率仍然很高):
生成的数据集:
将该数据导入SNAP看下效果:
perfect!就是这样轻松愉快就得到了一个用于分类的数据集。
如果你想利用这个数据集来做随机森林分类,请参考05篇博客。
Sentinel-1 IW GRDH 数据集流程式处理
在源数据文件目录启动一个PowerShell窗口,输入以下一句命令:
# D:\temp_SAR\S1_iw_grd_preprocess.xml为流程图文件的绝对路径,
# 你可能结合自己的流程图文件改动一下路径
# 因为我们在创建流程图时定义数据集的输入与输出
# 所以这里命令行参数没有输入和输出参数
gpt D:\temp_SAR\S1_iw_grd_preprocess.xml
大概需要耗费10左右分钟的时间,便处理完成。
将预处理后的数据导入SNAP查看一下效果:
多个数据集批量流程图处理
绝大多数SNAP中的功能在流程图中都能找到其操作名,包括部分添加到SNAP的第三插件,而只要是流程图带有的节点操作,在SNAP的gpt中都是可以实现的。
Sentinel-2 L2A 数据集批量流程式处理
(我估算了一下运算量,应该8G运行内存的电脑是可以实现这个流程图的批处理的,因为流程图做做了裁剪操作,运行内存的电脑跑这个批处理可能比较吃力)
有时候我们希望得到同一地区多景Sentinel-2特征数据集,以便分析其时序特征或时序变化化又或者进行多时相的分类或变化检测等。幸运的是利用流程图文件和gpt命令行工具,我们很容易实现数据量批处理。
利用上述Sentinel-2 L2A 数据集流程式处理部分,创建的流程图文件和gpt工具很容易实现获取多景Sentinel-2特征数据集的批量处理。但是,我们需要对流程图xml文件做一些小修改:
先打开相应的流程图文件:
我们需要修改输入和输出节点的文件,设置gpt命令行-P参数变量:
完成这两处的修改后,关闭该xml文件,到源数据目录下启动一个PowerShell窗口:
注意,批处理先要进入windows标准命令行窗口(先输入cmd)
# 你可能需要结合实际调整一下你的输入目录和输出目录
# /r "G:\2019_S2_data" 表示迭代目录
# %X 表示设置的迭代变量,即某个(.zip)文件名的绝对路径
# G:\2019_S2_data\test_S2_features.xml 表示要处理的流程图文件的绝对路径
# -Pinput=%X 其中-Pinput表示流程图中input变量(-P参数变量),%X表示引用的文件名
# -Poutput="G:\2019_S2_data\S2_features\Subset_%~nX_features.dim" ,
# -Poutput表示流程图中的output变量(-P参数变量), G:\2019_S2_data\S2_features表示输出文件的父目录
# Subset_%~nX_features.dim 取出去掉文件名的后缀名.zip,
# 并加了前缀Subset_, 后缀_features.dim
for /r "G:\2019_S2_data" %X in (*.zip) do (gpt G:\2019_S2_data\test_S2_features.xml -Pinput=%X -Poutput="G:\2019_S2_data\S2_features\Subset_%~nX_features.dim")
大概花费了半小时(12景数据),还算可以啦!
打开SNAP检查一下数据(很nice):
Sentinel-1 IW GRDH 数据集批量流程式处理
同样,如果你需要对Sentinel-1 IW GRDH数据做同样的处理,定义gpt命令行工具的输入和输出的-P参数变量(当然,还可以有其它的-P参数变量)。
这次博主使用的流程图见07篇 博客方式3:TOPSAR技术镶嵌,该流程图比较复杂,如下:
(有两个输入,1个输出,该流程图的参数与07篇 博客方式3:TOPSAR技术镶嵌,这里不再重复赘述了)
思路已有,接下来。我们需要修改流程图文件(这里文件名为:S1_mosaic2.xml),定义3个-P参数变量:
# -*- coding: utf-8 -*-
# Author: 超级禾欠水
# Python 3.6.7 win64# 导入相关库
import os
import glob
import subprocess
import time# Sentinel-1 IW GDRH元数据压缩包存放目录,输入目录
data_path = r'D:\temp_SAR'# 保险起见, 对找到的元数据(.zip)按文件名进行排序
# 这样同一天的影像相邻的
datas = sorted(glob.glob(os.path.join(data_path, '*.zip')))# 流程图文件路径
xml_file = r'D:\temp_SAR\S1_mosaic2.xml'# 输出目录
output_path = r'D:\temp_SAR\Sentinel_1_processed'# 将同一天的两景影像分别存于两个列表part1_datas, part2_datas
# 因为排序过文件名,可以确定同一天相邻的两景影像分别存于两个
part1_datas = datas[::2]
part2_datas = datas[1::2]for input1, input2 in zip(part1_datas, part2_datas):# 获取输入文件的文件名basename_input1 = os.path.basename(input1)# 提取日期时间date = basename_input1.split('_')[4][:8]# 打印日期print("date:", date)# 输出的文件名, 后缀名'.dim'表示这里使用SNAP的标准文件格式(BEAM-DIMAP)out_file = 'S1_Shanghai_' + date + '.dim'# 输出文件的绝对路径output = os.path.join(output_path, out_file)# 要调用的命令行参数列表command = ['gpt', xml_file, '-Pinput1=' + input1,'-Pinput2=' + input2, '-Poutput=' + output]# 如果你想看实际的命令行窗口命令可以取消下面print语句的注释#print(' '.join(command))# 以“杀死进程”的方式调用cmd(windows标准命令行窗口)# 相当于在命名行执行命令“gpt xml_file -Pinput1=input1 -Pinput2=input2 -Poutput=output”subprocess.check_output(command)# “以退为进”----分布式爬虫的处理“哲学”,休眠30s,等待释放内存# 避免gpt因为内存不能及时释放,拖慢程序运行或者导致出错time.sleep(30)
print("All done!")
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
- 43
- 44
- 45
- 46
- 47
- 48
- 49
- 50
- 51
- 52
- 53
- 54
- 55
- 56
只需在python中执行该程序就可以(你应该可以听到你电脑的“唰唰唰”的风扇,因为CPU的利用率很可能飙升到100%,要知道gpt默认调用所用CPU核来计算,你电脑有多少个,便调用多少个核)。
Pycharm中的运行界面(大约25分钟的时间得到一景镶嵌后的上海市全境影像, 由于数据量很大,需要耐心等待一下):
后语
参考文献
08-SNAP的命令行处理工具gpt及其批处理(Sentinel-1和Sentinel-2为例)相关推荐
- linux开源炫酷命令行工具,Linux上超酷的命令行扩展工具Oh My Zsh
Oh My Zsh 是一款社区驱动的命令行工具,正如它的主页上说的,Oh My Zsh 是一种生活方式.它基于 zsh 命令行,提供了主题配置,插件机制,已经内置的便捷操作.给我们一种全新的方式使用命 ...
- ASM管理命令行三工具:KFOD、KFED和AMDU
ASM管理命令行三工具:KFOD.KFED和AMDU ASM(Automatic Storage Management)是Oracle目前主推的软集群存储策略.一般而言,管理ASM的工具包括使用sql ...
- curl 命令行下载工具使用方法小结
获取curl curl 命令行下载工具 curl的官方网站为: http://curl.haxx.se 官方下载页面为:http://curl.haxx.se/download.html ...
- [转]12款最佳Linux命令行终端工具
摘要 "工欲善其事必先利其器",作为菜鸟,也是从别人那里偷学来的一些东东.今天看到同事用到一个终端命令行工具,觉得自己弱爆了.然后在网上搜了下该工具.发现类似的工具还是挺多的,只是 ...
- python之命令行解析工具argparse
以前写python的时候都会自己在文件开头写一个usgae函数,用来加上各种注释,给用这个脚本的人提供帮助文档. 今天才知道原来python已经有一个自带的命令行解析工具argparse,用了一下,效 ...
- grub shell 错误_grub命令_Linux grub 命令用法详解:多重引导程序grub的命令行shell工具...
grub命令是多重引导程序grub的命令行shell工具. 语法grub(选项) 选项--batch:打开批处理模式: --boot-drive=:指定stage2的引导驱动器: --config-f ...
- 从零开发一个命令行脚手架工具 等
大家好,我是若川.今天周末,话不多说,这一次花了几小时精心为大家挑选了20余篇好文,供大家阅读学习.本文阅读技巧,先粗看标题,感兴趣可以都关注一波,绝对不亏. 前端宇宙 小编就职于某大厂,是个爱前端爱 ...
- java命令行参数工具_Java方法中的参数太多,第8部分:工具
java命令行参数工具 在我的系列文章的前七篇文章中,有关处理Java方法中期望的参数过多的内容集中在减少方法或构造函数期望的参数数量的替代方法上. 在本系列的第八篇文章中,我将介绍一些工具,这些工具 ...
- PowerCmd(命令行增强工具) 2.2 免费版
软件名称: PowerCmd(命令行增强工具) 2.2 免费版 软件语言: 英文 授权方式: 免费软件 运行环境: Win7 / Vista / Win2003 / WinXP 软件大小: 1.8MB ...
最新文章
- python实现STM32单片机通信
- 【linux高级程序设计】(第十二章)Linux多线程编程 4
- Android应用程序绑定服务(bindService)的过程源代码分析
- 极度丝滑!CentOS/Unbuntu系统下快速设置虚拟内存,一行命令快速搞定!!!
- python中文字体怎么设置_python matplotlib 中文字体设置
- 用计算机弹传说之下鱼姐的bgm,传说之下战斗曲曲谱_传说之下打托丽尔的bgm
- 支撑200并发_搞清楚系统到底怎样支撑高并发以及架构图的绘制(面试向)
- JavaScript Cookie
- android活动中的变量,在不同的活动中保持变量值Android Studio
- 使用计算机粘贴板的步骤,电脑自带剪贴板怎么打开?剪贴板打开教程
- html展开收起样式,前端网页内容实现展开/收起全文的操作(js+css控制高度实现)...
- 梯度、散度、旋度的关系
- mysql slave是什么_是mysql表里
- Ultra Recal 一款DIY的个人管理软件
- 连续七年 领跑未来丨山石网科入选Gartner 2020网络防火墙魔力象限
- Mysql全站最全笔记,从入门到资深!
- vinted是什么平台以及特点
- Vuze--Java路径配置
- sarscape5.6.2 结果在arcgis中制图(2可以在envi里调好色带导入arcgis)
- 实习日记(9)——C++编译出现error in locking authority file ~/.Xauthority
热门文章
- 基于三星ARM9(S3C2410)的交通违章抓拍系统的开发
- BPFT1.7,全名BaiduPanFilesTransfers免费的百度网盘批量转存工具【精】
- Flask框架使用教程-运行第一步
- U盘无法格式化(提示U盘文件系统变为了RAW格式)【一般应用】
- java.jpi在线_JPI中常使用的类介绍:
- 网络安全工程师的入门学习的路径
- 订单超过 7 天不允许退货
- 七个习惯让你免费学好英语
- 用友ERP-NC用户常见的问题
- 打开共享文件提示服务器空间不足,访问网络共享报告“服务器存储空间不足,无法处理此命令”...