主要参考博客
感谢爱记录的科研伙伴们
Windows7 64位环境6sv2.1大气传输模型修改源码添加国产高分卫星GF-1 GF-2光谱响应支持 - 吴长明 - 博客园
6S大气传输模型修改源码添加、自定义卫星光谱响应(以HJ-1B CCD为例)_hj卫星的光谱响应函数-CSDN博客
遥感影像大气校正一:6S模型使用_6s模型大气校正-CSDN博客
https://py6s.readthedocs.io/en/latest/installation.html
6S大气传输模型修改源码添加、自定义CASI传感器光谱响应_6s模型大气校正matlab代码-CSDN博客
写在前面的话
6SV模型目前网上已有版本6SV1.1和6SV2.1。因为6SV2.1没有提供python接口,个人比较喜欢python编程,所以我使用的是6SV1.1。2.1版本的同学同样可以参考,方法是一样的。
操作步骤
下载源码
6SV2.1网址S.A.L.S.A.
6SV1.1网址https://rtwilson.com/downloads/6SV-1.1.tar
需要安装的软件参考“主要参考博客”里的最后一个网址。和我一样是windows 64位,不想自己下载可以去我主页找资源列表,我这里打包了一下,免费下载https://download.csdn.net/download/weixin_39282491/89919782
Step 1 修改main.f文件
解压6SV-1.1.tar,找到找到main.f文件,修改以下一些内容:以下涉及的所有修改,注意和原来格式保持一致,尤其是缩进和字符。
大概在410行左右,添加自定义传感器名称+对应的波段号
可以在源码中ctrl+F搜索“data nsat/”,定位到这一步骤该修改的地方。如图所示,我这里模拟添加MODIS 1km的12个波段。
在文件的280几行,修改nsat的size
可以在源码中ctrl+F搜索“nsat(”,定位到这一步骤该修改的地方。源码中是166,那么新的应该是166+12=178 修改为nsat(178)*17
代码大约1100行,补充新增波段的spectral conditions说明
可以在源码中ctrl+F搜索“spectral conditions”,定位到这一步骤该修改的地方。加入波段名和(wavelength-min, wavelength-max)。
在文件中找到大约1325行左右,给每个传感器的和编号对应起来。
可以在源码中ctrl+F搜索"c 159 VIIRS band",定位到这一步骤该修改的地方。刚才加入的是spectral conditions波段编号是166-177,这一步的操作就是告诉代码,用户后面输入的166-177都属于MODIS1KM,并且给这个语句赋值了一个编号。也就是上图中的“162”。这一步要注意,赋值的编号要在整个代码中是唯一的。比如后面有一个语句是166的编号,也就意味的自己起编号的时候就不能用166了。可以ctrl+F搜索一下,再使用编号。
在” goto”语句中,加入新的标号行
可以在源码中ctrl+F搜索"18 goto",定位到这一步骤该修改的地方。加入新的标号行,这部分输入的含义是,告诉代码,如果用户输入是166-177,则goto 到162编号的行。因为新增了15个波段,所以加入15个162的编号。
增加调用新的光谱响应函数的指令
可以在源码中ctrl+F搜索"call viirs",定位到这一步骤该修改的地方。照猫画虎,写编号为162的代码行了,在编号159的下方,稍微修改一下函数名就好。减去的数据表示波段号。spectral conditions步骤中,165以及之前的波段是其他卫星数据的,从166才开始是你定义的,所以要减去前面的波段号。
至此,对mian.f的修改完成!
Step 2 制作传感器文件
下面是重头戏,制作自定义传感器文件。
新建一个文件,取名为xxxx.f,注意文件名和上一步call的函数名一致。
首先可以打开一个6s自带的传感器文件,全部复制粘贴过来,看看他们的格式。
因为自己编辑比较麻烦,再加上有的时候要做好多波段的,我就索性写了代码用来将光谱响应函数插值到6s要求的2.5nm间隔,读取光谱响应函数,自动生成传感器.f文件。
Step 3编译写好的传感器文件.f
cmd命令中输入g77 –c xxxx.f编译刚写好的传感器参数文件
Step 4 修改makefile
上一步编译的结果是一个同文件名的.o文件。所以这一步要修改一下makefile,很简单。
打开makefile,在那一长串的字符最后加上xxxx.f对应的xxxx.o。
Step 5 生成exe文件
执行make命令,生成exe
Step 6 对编译好的exe进行测试
这一步我之前做的时候忘记截图记录了。现在补一个新的测试。
运行生成的exe程序 像我图中所示,输入6s参数
这里的287是我自定义的 VIIRS-JPSS band 14编号。
输入完,换行得到运行结果。
编译成功。记录到此为止。
有疑问的,或者编译出错的宝子们可以在评论区留言,我一般没有看私信的习惯。留言大家都可以看到,互相帮助探讨一下,辐射定标拯救全人类!