目录
1.polymer源码下载
2.配置环境
3.事例
建了一个QQ群,大家可以在里边聊聊水色遥感数据下载和数据处理方面的事情:1087024529
首先说一下我的系统及Python版本号
Ubuntu 20.04
Python 3.6.5
1.polymer大气校正
POLYMER(POLYnomial based approach applied to MERIS data)大气校正算法最初是为MERIS传感器开发的,该算法的主要优势是对太阳耀光区域进行大气校正。对于该算法的详细说明,请参考论文:
STEINMETZ F, DESCHAMPS P Y, RAMON D. Atmospheric correction in presence of sun glint: application to MERIS[J]. Opt Express, 2011,19(10): 9783-9800.
作者将该算法的源码进行了发布,并且提供了很多接口方便其他人使用(为作者的开源精神干杯)。
polymer官方链接(请大家不要再被骗积分了,有些无良博主也真是够了):
https://www.hygeos.com/polymer
polymer的作者建的有博客页(Forum),有不懂的问题可以在里边提问。
下载后,其实是一个压缩包(文件结构如下),需要自己配置环境然后才能使用。
2.配置环境
其实作者提供了一个说明书(README.md),可以按照里边的步骤一步一步安装。所以这里按照说明书种的步骤进行说明。
注意:作者在说明文档里说,他只在Linux系统下进行了测试,因此我这里也在Linux系统下安装
2.1.安装需要的软件,首先,需要系统中已经安装了python、cython和gcc软件。
我直接在系统中安装的anaconda,所以直接跳过了安装python和cython的步骤,这两个的安装比较常规,不再说明。安装gcc可以在终端中输入:
sudo apt-get install gcc
2.2.安装需要的python库,作者在说明文档里提供了所需python库的列表。如下:
numpy
scipy
python-hdf4 (or pyhdf)
pandas
pyepr
netCDF4
lxml
glymur
pyproj
ecmwf-api-client
cdsapi
xarray
pygrib
gdal
如果你使用的是anaconda,作者提供了一个一键安装的脚本:install-anaconda-deps.sh。不过我还是建议一个库一个库安装。
在安装gdal库前,需要系统中安装libgdal-dev,安装pyhdf前需要在系统中安装libhdf4-alt-dev。
sudo apt-get install libhdf4-alt-dev
sudo apt install libgdal-dev
2.3.以上装好之后,在polymer文件夹中打开终端,在终端中输入make,进行编译即可
make
即可。
3.事例
下面就可以利用polymer提供的接口处理自己的数据了,作者提供了很多事例,这里就不再介绍。最好在自己的脚本里把polymer的路径加上,在python程序中加入如下代码:
sys.path.append('/home/hyzhao/polymer-v4.13/')
之后就可以导入polymer提供的函数。
下面是我批量处理数据的一个例子。
ancillary参数,就是在大气校正时,利用的一些臭氧、风速等数据,Ancillary_NASA就是在校正的时候,从NASA上下载这些数据,还有其他数据源,利用不同的数据源,最后的结果可能会不同。对于OLCI的大气校正,可以不用指定该参数。
关于对OLCI的大气校正,我在polymer作者建立的博客页中做了提问,这里也贴出来供大家参考。
https://forum.hygeos.com/viewtopic.php?f=7&t=80
下边的代码,关键部分就是我定义的Process_OLCI函数。其他的只是在改变输入文件路径和输出文件路径。
import os
import sys
import time
import datetime
from subprocess import call
sys.path.append('/home/hyzhao/polymer-v4.13/')
from polymer.main import run_atm_corr
from polymer.main import Level1
from polymer.main import Level2
from polymer.level2_hdf import Level2_HDF
from polymer.level2_nc import Level2_NETCDF
from polymer.level1_nasa import Level1_NASA
from polymer.level1_olci import Level1_OLCI
from polymer.ancillary import Ancillary_NASA
def Process_OLCI(inputFile,outputFile):
run_atm_corr(Level1_OLCI(inputFile,ancillary=Ancillary_NASA()),
Level2_NETCDF(filename=outputFile),
calib=None,
bands_corr=[412,443,490,510,560,620,665,754,779,865],
bands_oc=[412,443,490,510,560,620,665,754,779,865],
bands_rw=[400,412,443,490,510,560,620,665,674,681,709,754,779,865,885,1020])
#--------------------------------------------------------------
#需要更改的变量
#inputFilePath='/home/hyzhao/321/Data/'
#outputDir='/home/hyzhao/321/Polymer/'
inputFilePath='/home/hyzhao/ShareWin/Data/'
outputDir='/home/hyzhao/ShareWin/Polymer/'
#--------------------------------------------------------------
inputFilePathList=[]
outputFilePathList=[]
fileList1=os.listdir(inputFilePath)
for fl1 in fileList1:
outputFilePath=outputDir+fl1+'_Polymer_Add_Para.nc'
if os.path.exists(outputFilePath):
continue
else:
outputFilePathList.append(outputFilePath)
filePath2=inputFilePath+fl1
fileList2=os.listdir(filePath2)
filepath3=filePath2+'/'+fileList2[0]
inputFilePathList.append(filepath3)
for ifpl,ofpl in zip(inputFilePathList,outputFilePathList):
try:
print('开始处理-----------'+str(datetime.datetime.now()))
print(ifpl)
Process_OLCI(ifpl,ofpl)
print('处理结束-----------'+str(datetime.datetime.now()))
time.sleep(5)
print('\n\n')
except:
print(ifpl+'处理失败')
continue