Python调用C2RCC实现批量数据的大气校正
目录
1.前言
2.配置环境
3.程序
1.前言
C2RCC大气校正方法在SNAP中作为一个工具出现,安装好SNAP后,就会有该工具。但是发现在SNAP中直接打开C2RCC对OLCI数据进行大气校正时,运行时间很长(目前我还不清楚原因)。偶然间发现SNAP提供了GPT工具,能够直接使用命令行调用,使用命令行中调用C2RCC时,运行速度较快(运行的时候,CPU占满),而且使用命令行调用该工具还可以方便的进行批量操作。下面介绍Python调用C2RCC实现批量数据的大气校正。
2.配置环境
a.首先当然要安装SNAP。SNAP安装包下载地址:
http://step.esa.int/main/download/snap-download/
b.安装成功后,在环境变量里查看SNAP的路径是否位于Path变量中,若没有则加入。
c.打开命令行窗口,输出gpt -h。可以查看gpt工具的帮助文档。打印出来的内容比较长。分表代表了:gpt工具应该输出参数、选项和支持的工具。可以看到有c2rcc.meris、c2rcc.olci、c2rcc.landsat8等,代表c2rcc大气校正方法支持的传感器。
d.在命令行工具中,再输出 gpt c2rcc.olic -h (这里以校正OLCI数据为例,其他传感器的数据也可以参考该方法)。可以看到使用该工具应该输出的参数等。根据此,使用python调用命令行工具来进行批处理。
3. 程序
将下载好的OLCI数据解压好,放在一个文件夹里。我这里在调用C2RCC进行大气校正时,只设置了输入输出文件的路径,输出文件格式,输出Rrs。其他参数我这里都采用默认,可以根据需要更改。
#-*-coding: utf-8-*-
#@Author: zhaohaiyang
#@E-mail: aaa@qq.com
#对Sentinel-3数据进行批处理C2RCC大气校正
#
#
#
################################################
import os
import time
import datetime
from subprocess import call
#--------------------------------------------------------------
#需要更改的变量
filepath1='H:/Data/' #原始数据的路径
outputdir='H:/C2RCC/' #C2RCC大气校正的数据路径
#--------------------------------------------------------------
filelist1=os.listdir(filepath1)
inputlist=[]
outputlist=[]
for fl1 in filelist1:
outfile1=outputdir+fl1+'_C2RCC.nc'
if os.path.exists(outfile1):
continue
else:
outputlist.append(outfile1)
filepath2=filepath1+fl1
filelist2=os.listdir(filepath2)
filepath3=filepath2+'/'+filelist2[0]
filelist3=os.listdir(filepath3)
for fl3 in filelist3:
fl3l=fl3.split('.')
if fl3l[-1]=='xml':
filepath4=filepath3+'/'+fl3
inputlist.append(filepath4)
else:
continue
for inputfile,outputfile in zip(inputlist,outputlist):
try:
print('开始处理-----------'+str(datetime.datetime.now()))
print(inputfile)
cmdline='gpt c2rcc.olci -SsourceProduct="'+inputfile+'" -PoutputAsRrs="true" -t "'+outputfile+'" -f "NetCDF4-BEAM"'
call(cmdline)
print('处理结束-----------'+str(datetime.datetime.now()))
print('\n\n')
except:
print(inputfile+'处理失败')
continue
之后就是快乐运行了,运行的时候,我的CPU直接拉满。
值得注意的是,这种方法需要电脑的内存较高,我电脑8G的时候运行的时候就会报错,之后加装了内存条就可以顺利运行。