使用python处理遥感光谱数据,免不了进行大气校正,基本上免费的就是使用Py6s,而py6s库只是一个接口,还需要自己配置6S模型,可以查到很多资料,6S模型是古老的fortran语言写的,基本配置流程就是安装 Fortran 77 编译器+UNIX工具,然后下载6S模型,用g77编译成exe文件给py6s调用(参考PY6S说明文档)。但对于曾经被C++环境配置搞崩溃的代码小白来说,这无疑是一个难过的坎,可是之前的资源卫星02D光谱数据处理软件已经基本完成,就差这一步了,放弃就太可惜了,花了半天时间确认没有更简单的替代方案了,还是硬着头皮开始搞。
但是跟着调研的资料一步步弄不是很顺利,比如g77编译器找不到(添加环境变量后,需要重启终端),找到g77编译器后编译频繁出错,利用AI修改了多轮makefile都不成功,更换了gfortran也不行。基本上是两种问题不停的重复。
用gfortran编译的错误提示如下:
Warning: Deleted feature: ASSIGN statement at (1)
AKTOOL.f:629:72:
629 | assign 48 to l4
用g77编译的错误如下:
g77 -O -O -c -o AKTOOL.o AKTOOL.f
C:\Users\MSI-NB\AppData\Local\Temp\ccIVjaaa.s: Assembler messages:
C:\Users\MSI-NB\AppData\Local\Temp\ccIVjaaa.s:19: Error: invalid instruction suffix for `push'
C:\Users\MSI-NB\AppData\Local\Temp\ccIVjaaa.s:23: Error: invalid instruction suffix for `push'
C:\Users\MSI-NB\AppData\Local\Temp\ccIVjaaa.s:24: Error: invalid instruction suffix for `push'
C:\Users\MSI-NB\AppData\Local\Temp\ccIVjaaa.s:28: Error: invalid instruction suffix for `push'
C:\Users\MSI-NB\AppData\Local\Temp\ccIVjaaa.s:29: Error: invalid instruction suffix for `push'
C:\Users\MSI-NB\AppData\Local\Temp\ccIVjaaa.s:34: Error: invalid instruction suffix for `push'
C:\Users\MSI-NB\AppData\Local\Temp\ccIVjaaa.s:35: Error: invalid instruction suffix for `push'
C:\Users\MSI-NB\AppData\Local\Temp\ccIVjaaa.s:39: Error: invalid instruction suffix for `push'
C:\Users\MSI-NB\AppData\Local\Temp\ccIVjaaa.s:40: Error: invalid instruction suffix for `push'
如果你也遇到这样的问题,那基本上查到的攻略都不行。最后在github上找了一个6S模型的复制版本,并且针对更高级的gfortran编译器调整了makefile文件,我简单看了一下makefile内容,确实是使用gfortran编译器,感觉有点靠谱,尝试看一下居然成功了,虽然也提示了小错误,但是至少编译成功了。为了验证编译是否正确(毕竟还是出现错误了),把exe文件拷贝到官网下载的文件夹中,用如下代码测试
sixs.exe < ..\Examples\Example_In_1.txt
体验一下成功的喜悦吧:
总结:
1.很多教程都行不通
2.github上下载6s模型satelligence / 6SV1.1 · GitLab
3.使用gfortran编译器(我下载的是这个版本,在线安装的版本总是出错)
4.使用官网6s模型文件夹验证编译是否成功
如果编译不成功可以直接下载执行文件