1.下载Polymer开源代码
GitHub:
HYGEOS - polymerhttps://www.hygeos.com/polymer
2.安装及环境配置
需要安装虚拟机 Ubuntu 和 anaconda,ctrl+alt+T可以打开终端界面,右击也可进入终端。
安装anaconda:
bash Anaconda3-2024.06-1-Linux-x86_64.sh
在安装好的conda文件夹下打开终端,创建一个新的环境:
conda create -n polymer python=3.8.18(需要的版本号)
查看拥有的环境:
conda env list
进入环境:
conda activate polymer
安装库:
conda install numpy==1.18.5
conda install numpy
也可以一键安装,会出现各种问题,不好用!
conda create -n polymer -c conda-forge mamba
conda activate polymer
mamba env update -f environment.yml
conda install xx 失败可以试一下
pip install xx
在环境下查看所包含的库:
conda list
在Linux终端输入jupyter notebook,进入网页进行编译,将虚拟环境添加进去(新建文件的时候选择配置好的虚拟环境)。
#查看虚拟环境
conda list #查看包含的库
Linux-Anaconda安装和虚拟环境配置 - 知乎 (zhihu.com)https://zhuanlan.zhihu.com/p/440548295
3.运行常见错误
①安装gcc:(终端输入)
sudo apt-get install gcc
②安装需要的库:
进入环境 输入 conda install xxx
- python 3.8.18
- scipy 1.10.1
- xarray 2023.1.0
- cython 3.0.7
- pyhdf 0.11.3
- netcdf4 1.6.4
- python-dateutil 2.8.2
- pyepr 1.1.5
- gdal 3.7.0
- cdsapi 0.6.1
- pygrib 2.1.5
- bioconda::ecmwfapi 1.4.1
- xlrd 1.2.0
- glymur 0.12.9.post1
- pyproj 3.5.0
- lxml 4.9.3
- pytest 7.4.4
- pytest-html 4.1.1
- pytest-xdist 3.5.0
- matplotlib 3.7.3
- h5py 3.9.0
论坛中提到的完整软件包列表:
Name Version Build Channel
────────────────────────────────────────────────────────────────────────────────
_libgcc_mutex 0.1 conda_forge conda-forge
_openmp_mutex 4.5 2_gnu conda-forge
alsa-lib 1.2.9 hd590300_0 conda-forge
attr 2.5.1 h166bdaf_1 conda-forge
blosc 1.21.5 h0f2a231_0 conda-forge
boost-cpp 1.78.0 h6582d0a_3 conda-forge
brotli 1.1.0 hd590300_1 conda-forge
brotli-bin 1.1.0 hd590300_1 conda-forge
brotli-python 1.1.0 py38h17151c0_1 conda-forge
bzip2 1.0.8 hd590300_5 conda-forge
c-ares 1.25.0 hd590300_0 conda-forge
ca-certificates 2023.11.17 hbcca054_0 conda-forge
cached-property 1.5.2 hd8ed1ab_1 conda-forge
cached_property 1.5.2 pyha770c72_1 conda-forge
cairo 1.16.0 hbbf8b49_1016 conda-forge
cdsapi 0.6.1 pyhd8ed1ab_0 conda-forge
certifi 2023.11.17 pyhd8ed1ab_0 conda-forge
cfitsio 4.2.0 hd9d235c_0 conda-forge
cftime 1.6.3 py38h7f0c24c_0 conda-forge
charset-normalizer 3.3.2 pyhd8ed1ab_0 conda-forge
colorama 0.4.6 pyhd8ed1ab_0 conda-forge
contourpy 1.1.1 py38h7f3f72f_1 conda-forge
curl 8.4.0 hca28451_0 conda-forge
cycler 0.12.1 pyhd8ed1ab_0 conda-forge
cython 3.0.7 py38h17151c0_0 conda-forge
dbus 1.13.6 h5008d03_3 conda-forge
eccodes 2.30.2 h1f30a5c_0 conda-forge
ecmwfapi 1.4.1 py_2 bioconda
exceptiongroup 1.2.0 pyhd8ed1ab_2 conda-forge
execnet 2.0.2 pyhd8ed1ab_0 conda-forge
expat 2.5.0 hcb278e6_1 conda-forge
font-ttf-dejavu-sans-mono 2.37 hab24e00_0 conda-forge
font-ttf-inconsolata 3.000 h77eed37_0 conda-forge
font-ttf-source-code-pro 2.038 h77eed37_0 conda-forge
font-ttf-ubuntu 0.83 h77eed37_1 conda-forge
fontconfig 2.14.2 h14ed4e7_0 conda-forge
fonts-conda-ecosystem 1 0 conda-forge
fonts-conda-forge 1 0 conda-forge
fonttools 4.47.2 py38h01eb140_0 conda-forge
freeglut 3.2.2 hac7e632_2 conda-forge
freetype 2.12.1 h267a509_2 conda-forge
freexl 1.0.6 h166bdaf_1 conda-forge
gdal 3.7.0 py38ha708418_1 conda-forge
geos 3.11.2 hcb278e6_0 conda-forge
geotiff 1.7.1 h480ec47_8 conda-forge
gettext 0.21.1 h27087fc_0 conda-forge
giflib 5.2.1 h0b41bf4_3 conda-forge
glib 2.78.1 hfc55251_0 conda-forge
glib-tools 2.78.1 hfc55251_0 conda-forge
glymur 0.12.9.post1 pyhd8ed1ab_0 conda-forge
graphite2 1.3.13 h58526e2_1001 conda-forge
gst-plugins-base 1.22.5 hf7dbed1_0 conda-forge
gstreamer 1.22.5 h98fc4e7_0 conda-forge
h5py 3.9.0 nompi_py38h89e2d6c_100 conda-forge
harfbuzz 7.3.0 hdb3a94d_0 conda-forge
hdf4 4.2.15 h501b40f_6 conda-forge
hdf5 1.14.0 nompi_hb72d44e_103 conda-forge
icu 72.1 hcb278e6_0 conda-forge
idna 3.6 pyhd8ed1ab_0 conda-forge
importlib-resources 6.1.1 pyhd8ed1ab_0 conda-forge
importlib_resources 6.1.1 pyhd8ed1ab_0 conda-forge
iniconfig 2.0.0 pyhd8ed1ab_0 conda-forge
jasper 4.0.0 h32699f2_1 conda-forge
jinja2 3.1.3 pyhd8ed1ab_0 conda-forge
json-c 0.16 hc379101_0 conda-forge
kealib 1.5.1 h3845be2_3 conda-forge
keyutils 1.6.1 h166bdaf_0 conda-forge
kiwisolver 1.4.5 py38h7f3f72f_1 conda-forge
krb5 1.21.2 h659d440_0 conda-forge
lame 3.100 h166bdaf_1003 conda-forge
lcms2 2.15 haa2dc70_1 conda-forge
ld_impl_linux-64 2.40 h41732ed_0 conda-forge
lerc 4.0.0 h27087fc_0 conda-forge
libaec 1.1.2 h59595ed_1 conda-forge
libarchive 3.6.2 h039dbb9_1 conda-forge
libblas 3.9.0 21_linux64_openblas conda-forge
libbrotlicommon 1.1.0 hd590300_1 conda-forge
libbrotlidec 1.1.0 hd590300_1 conda-forge
libbrotlienc 1.1.0 hd590300_1 conda-forge
libcap 2.69 h0f662aa_0 conda-forge
libcblas 3.9.0 21_linux64_openblas conda-forge
libclang 15.0.7 default_hb11cfb5_4 conda-forge
libclang13 15.0.7 default_ha2b6cf4_4 conda-forge
libcups 2.3.3 h4637d8d_4 conda-forge
libcurl 8.4.0 hca28451_0 conda-forge
libdeflate 1.18 h0b41bf4_0 conda-forge
libedit 3.1.20191231 he28a2e2_2 conda-forge
libev 4.33 hd590300_2 conda-forge
libevent 2.1.12 hf998b51_1 conda-forge
libexpat 2.5.0 hcb278e6_1 conda-forge
libffi 3.4.2 h7f98852_5 conda-forge
libflac 1.4.3 h59595ed_0 conda-forge
libgcc-ng 13.2.0 h807b86a_3 conda-forge
libgcrypt 1.10.3 hd590300_0 conda-forge
libgdal 3.7.0 h9f4e061_1 conda-forge
libgfortran-ng 13.2.0 h69a702a_3 conda-forge
libgfortran5 13.2.0 ha4646dd_3 conda-forge
libglib 2.78.1 hebfc3b9_0 conda-forge
libglu 9.0.0 hac7e632_1003 conda-forge
libgomp 13.2.0 h807b86a_3 conda-forge
libgpg-error 1.47 h71f35ed_0 conda-forge
libiconv 1.17 hd590300_2 conda-forge
libjpeg-turbo 2.1.5.1 hd590300_1 conda-forge
libkml 1.3.0 h01aab08_1016 conda-forge
liblapack 3.9.0 21_linux64_openblas conda-forge
libllvm15 15.0.7 h5cf9203_3 conda-forge
libnetcdf 4.9.2 nompi_h0f3d0bb_105 conda-forge
libnghttp2 1.58.0 h47da74e_0 conda-forge
libnsl 2.0.1 hd590300_0 conda-forge
libogg 1.3.4 h7f98852_1 conda-forge
libopenblas 0.3.26 pthreads_h413a1c8_0 conda-forge
libopus 1.3.1 h7f98852_1 conda-forge
libpng 1.6.39 h753d276_0 conda-forge
libpq 15.4 hfc447b1_2 conda-forge
librttopo 1.1.0 h0d5128d_13 conda-forge
libsndfile 1.2.2 hc60ed4a_1 conda-forge
libspatialite 5.0.1 hb46c372_26 conda-forge
libsqlite 3.44.2 h2797004_0 conda-forge
libssh2 1.11.0 h0841786_0 conda-forge
libstdcxx-ng 13.2.0 h7e041cc_3 conda-forge
libsystemd0 255 h3516f8a_0 conda-forge
libtiff 4.5.1 h8b53f26_1 conda-forge
libuuid 2.38.1 h0b41bf4_0 conda-forge
libvorbis 1.3.7 h9c3ff4c_0 conda-forge
libwebp-base 1.3.2 hd590300_0 conda-forge
libxcb 1.15 h0b41bf4_0 conda-forge
libxkbcommon 1.6.0 h5d7e998_0 conda-forge
libxml2 2.11.5 h0d562d8_0 conda-forge
libxslt 1.1.37 h0054252_1 conda-forge
libzip 1.10.1 h2629f0a_3 conda-forge
libzlib 1.2.13 hd590300_5 conda-forge
lxml 4.9.3 py38h0ef1326_1 conda-forge
lz4-c 1.9.4 hcb278e6_0 conda-forge
lzo 2.10 h516909a_1000 conda-forge
markupsafe 2.1.4 py38h01eb140_0 conda-forge
matplotlib 3.7.3 py38h578d9bd_0 conda-forge
matplotlib-base 3.7.3 py38h58ed7fa_0 conda-forge
mpg123 1.32.4 h59595ed_0 conda-forge
munkres 1.1.4 pyh9f0ad1d_0 conda-forge
mysql-common 8.0.33 hf1915f5_6 conda-forge
mysql-libs 8.0.33 hca2cd23_6 conda-forge
ncurses 6.4 h59595ed_2 conda-forge
netcdf4 1.6.4 nompi_py38hdfa7aa7_100 conda-forge
nomkl 1.0 h5ca1d4c_0 conda-forge
nspr 4.35 h27087fc_0 conda-forge
nss 3.97 h1d7d5a4_0 conda-forge
numexpr 2.8.4 py38hb2af0cf_101 conda-forge
numpy 1.24.4 py38h59b608b_0 conda-forge
openjpeg 2.5.0 hfec8fc6_2 conda-forge
openssl 3.1.4 hd590300_0 conda-forge
packaging 23.2 pyhd8ed1ab_0 conda-forge
pandas 1.5.3 py38hdc8b05c_1 conda-forge
pcre2 10.40 hc3806b6_0 conda-forge
pillow 10.0.0 py38h885162f_0 conda-forge
pip 23.3.2 pyhd8ed1ab_0 conda-forge
pixman 0.43.0 h59595ed_0 conda-forge
platformdirs 4.1.0 pyhd8ed1ab_0 conda-forge
pluggy 1.3.0 pyhd8ed1ab_0 conda-forge
ply 3.11 py_1 conda-forge
pooch 1.8.0 pyhd8ed1ab_0 conda-forge
poppler 23.05.0 hd18248d_1 conda-forge
poppler-data 0.4.12 hd8ed1ab_0 conda-forge
postgresql 15.4 h8972f4a_2 conda-forge
proj 9.2.0 h8ffa02c_0 conda-forge
pthread-stubs 0.4 h36c2ea0_1001 conda-forge
pulseaudio-client 16.1 hb77b528_5 conda-forge
pyepr 1.1.5 py38h01eb140_0 conda-forge
pygrib 2.1.5 py38h014c87c_1 conda-forge
pyhdf 0.11.3 py38h3d0ad98_2 conda-forge
pyparsing 3.1.1 pyhd8ed1ab_0 conda-forge
pyproj 3.5.0 py38h2f62729_1 conda-forge
pyqt 5.15.9 py38hffdaa6c_5 conda-forge
pyqt5-sip 12.12.2 py38h17151c0_5 conda-forge
pysocks 1.7.1 pyha2e5f31_6 conda-forge
pytest 7.4.4 pyhd8ed1ab_0 conda-forge
pytest-html 4.1.1 pyhd8ed1ab_0 conda-forge
pytest-metadata 3.0.0 pyhd8ed1ab_1 conda-forge
pytest-xdist 3.5.0 pyhd8ed1ab_0 conda-forge
python 3.8.18 hd12c33a_0_cpython conda-forge
python-dateutil 2.8.2 pyhd8ed1ab_0 conda-forge
python_abi 3.8 4_cp38 conda-forge
pytz 2023.3.post1 pyhd8ed1ab_0 conda-forge
qt-main 5.15.8 h7fe3ca9_15 conda-forge
readline 8.2 h8228510_1 conda-forge
requests 2.31.0 pyhd8ed1ab_0 conda-forge
scipy 1.10.1 py38h59b608b_3 conda-forge
setuptools 69.0.3 pyhd8ed1ab_0 conda-forge
sip 6.7.12 py38h17151c0_0 conda-forge
six 1.16.0 pyh6c4a22f_0 conda-forge
snappy 1.1.10 h9fff704_0 conda-forge
sqlite 3.44.2 h2c6b66d_0 conda-forge
tiledb 2.13.2 hd532e3d_0 conda-forge
tk 8.6.13 noxft_h4845f30_101 conda-forge
toml 0.10.2 pyhd8ed1ab_0 conda-forge
tomli 2.0.1 pyhd8ed1ab_0 conda-forge
tornado 6.3.3 py38h01eb140_1 conda-forge
tqdm 4.66.1 pyhd8ed1ab_0 conda-forge
tzcode 2023d h3f72095_0 conda-forge
tzdata 2023d h0c530f3_0 conda-forge
unicodedata2 15.1.0 py38h01eb140_0 conda-forge
uriparser 0.9.7 hcb278e6_1 conda-forge
urllib3 2.1.0 pyhd8ed1ab_0 conda-forge
wheel 0.42.0 pyhd8ed1ab_0 conda-forge
xarray 2023.1.0 pyhd8ed1ab_0 conda-forge
xcb-util 0.4.0 hd590300_1 conda-forge
xcb-util-image 0.4.0 h8ee46fc_1 conda-forge
xcb-util-keysyms 0.4.0 h8ee46fc_1 conda-forge
xcb-util-renderutil 0.3.9 hd590300_1 conda-forge
xcb-util-wm 0.4.1 h8ee46fc_1 conda-forge
xerces-c 3.2.4 h8d71039_2 conda-forge
xkeyboard-config 2.40 hd590300_0 conda-forge
xlrd 1.2.0 pyh9f0ad1d_1 conda-forge
xorg-fixesproto 5.0 h7f98852_1002 conda-forge
xorg-inputproto 2.3.2 h7f98852_1002 conda-forge
xorg-kbproto 1.0.7 h7f98852_1002 conda-forge
xorg-libice 1.1.1 hd590300_0 conda-forge
xorg-libsm 1.2.4 h7391055_0 conda-forge
xorg-libx11 1.8.7 h8ee46fc_0 conda-forge
xorg-libxau 1.0.11 hd590300_0 conda-forge
xorg-libxdmcp 1.1.3 h7f98852_0 conda-forge
xorg-libxext 1.3.4 h0b41bf4_2 conda-forge
xorg-libxfixes 5.0.3 h7f98852_1004 conda-forge
xorg-libxi 1.7.10 h7f98852_0 conda-forge
xorg-libxrender 0.9.11 hd590300_0 conda-forge
xorg-renderproto 0.11.1 h7f98852_1002 conda-forge
xorg-xextproto 7.3.0 h0b41bf4_1003 conda-forge
xorg-xf86vidmodeproto 2.3.1 h7f98852_1002 conda-forge
xorg-xproto 7.0.31 h7f98852_1007 conda-forge
xz 5.2.6 h166bdaf_0 conda-forge
zipp 3.17.0 pyhd8ed1ab_0 conda-forge
zlib 1.2.13 hd590300_5 conda-forge
zstd 1.5.5 hfc55251_0 conda-forge
检查一下有没有这些必备的库,安不上库看这里:
Linux anaconda 装库指南_linux anaconda 安装库-优快云博客https://blog.youkuaiyun.com/full_adder/article/details/116991307③别忘了make一下(README有写)
在包含 makefile 的目录的终端直接输入make
还需创建一下文件夹
make ancillary
④下载NASA辅助数据,只定义了.netrc文件运行还是不成功,根据下面代码再生成另外两个文件(.dodsrc和.urs_cookies)就可以正常登录下载了,建议使用代码自动生成。
sudo apt install make
make auxdata_all
运行代码自动生成配置文件:(成功运行后找不到就是被隐藏了,看看文件夹)
from subprocess import Popen
from getpass import getpass
import platform
import os
import shutil
urs = 'urs.earthdata.nasa.gov' # Earthdata URL to call for authentication
prompts = ['Enter NASA Earthdata Login Username \n(or create an account at urs.earthdata.nasa.gov): ',
'Enter NASA Earthdata Login Password: ']
homeDir = os.path.expanduser("~") + os.sep
with open(homeDir + '.netrc', 'w') as file:
file.write('machine {} login {} password {}'.format(urs, getpass(prompt=prompts[0]), getpass(prompt=prompts[1])))
file.close()
with open(homeDir + '.urs_cookies', 'w') as file:
file.write('')
file.close()
with open(homeDir + '.dodsrc', 'w') as file:
file.write('HTTP.COOKIEJAR={}.urs_cookies\n'.format(homeDir))
file.write('HTTP.NETRC={}.netrc'.format(homeDir))
file.close()
print('Saved .netrc, .urs_cookies, and .dodsrc to:', homeDir)
# Set appropriate permissions for Linux/macOS
if platform.system() != "Windows":
Popen('chmod og-rw ~/.netrc', shell=True)
else:
# Copy dodsrc to working directory in Windows
shutil.copy2(homeDir + '.dodsrc', os.getcwd())
print('Copied .dodsrc to:', os.getcwd())
参考网站:
4.jupyter notebook
4.1 首先确保已激活新创建的环境并进入环境
conda activate polymer
4.2 为当前环境安装ipykernel
conda install ipykernel
4.3 将环境添加到jupyter notebook
python -m ipykernel install --user --name polymer --display-name polymer
4.4 打开jupyter notebook
在polymer文件夹下打开终端输入jupyter notebook
在 Jupyter Notebook 中,打开或创建一个新的 Notebook 文件。点击右上角的内核选项(通常显示为 “Python 3” 或其他),选择你刚刚添加的内核。
5.处理OLCI代码:
参考博主的
Polymer大气校正环境配置-优快云博客https://blog.youkuaiyun.com/mrzhy1/article/details/110826116
import os
import sys
import time
import datetime
import traceback
from subprocess import call
sys.path.append('/home/wangqw/polymer-master')
from polymer.main import run_atm_corr
from polymer.level1 import Level1
from polymer.level2 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='/media/wangqw/DATA/mexico/OLCI/OLCI-B-L1-matchtime/'
outputDir='/media/wangqw/DATA/mexico/OLCI/OLCI-B-polymer'
#--------------------------------------------------------------
inputFilePathList=[]
outputFilePathList=[]
fileList1=os.listdir(inputFilePath)
for fl1 in fileList1:
outputFilePath=outputDir+fl1+'_Polymer.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 Exception as e:
print(f'{ifpl} 处理失败')
print(f'错误详情: {str(e)}')
traceback.print_exc()
continue
处理MERIS代码:
import os
import sys
import time
import datetime
import traceback
from subprocess import call
sys.path.append('/home/wangqw/polymer-master')
from polymer.main import run_atm_corr
from polymer.level1 import Level1
from polymer.level2 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_meris import Level1_MERIS
from polymer.ancillary import Ancillary_NASA
def Process_OLCI(inputFile,outputFile):
run_atm_corr(Level1_MERIS(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=[412,443,490,510,560,620,665,681,709,754,779,865])
#--------------------------------------------------------------
#需要更改的变量
inputFilePath='/media/wangqw/DATA/mexico/MERIS/MERIS-L1-matchtime/'
outputDir='/media/wangqw/DATA/mexico/MERIS/MERIS-polymer/'
#--------------------------------------------------------------
inputFilePathList=[]
outputFilePathList=[]
fileList1=os.listdir(inputFilePath)
for fl1 in fileList1:
outputFilePath=outputDir+fl1+'_Polymer.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 Exception as e:
print(f'{ifpl} 处理失败')
print(f'错误详情: {str(e)}')
traceback.print_exc()
continue