欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Python调用C2RCC实现批量数据的大气校正

程序员文章站 2024-03-24 22:27:04
...

目录

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变量中,若没有则加入。
Python调用C2RCC实现批量数据的大气校正
c.打开命令行窗口,输出gpt -h。可以查看gpt工具的帮助文档。打印出来的内容比较长。分表代表了:gpt工具应该输出参数、选项和支持的工具。可以看到有c2rcc.meris、c2rcc.olci、c2rcc.landsat8等,代表c2rcc大气校正方法支持的传感器。
Python调用C2RCC实现批量数据的大气校正
d.在命令行工具中,再输出 gpt c2rcc.olic -h (这里以校正OLCI数据为例,其他传感器的数据也可以参考该方法)。可以看到使用该工具应该输出的参数等。根据此,使用python调用命令行工具来进行批处理。
Python调用C2RCC实现批量数据的大气校正

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的时候运行的时候就会报错,之后加装了内存条就可以顺利运行