【Py6S】b‘invalid number: incomprehensible list input\r\napparent state报错解决办法

感谢二位前辈提供的高分影像6S+python大气校正思路:
https://zhuanlan.zhihu.com/p/364889134
https://github.com/Zhaoguanhua/AtmosphericCorrection/blob/master/AtmosphericCorrection_GF.py

在用Py6S进行高分六号的大气校正参数获取时,水汽、臭氧、海拔等参数获取都非常顺利,唯独到了最后一步,要设置传感器光谱响应函数时,python一直报错:

b’invalid number: incomprehensible list input\r\napparent state: unit 5 (unnamed)\r\nlast format: list io\r\nlately reading direct formatted external IO\r\n\r\nabnormal program termination\r\n’

我印象里跑大佬的代码是没问题的,虽然他是针对高分一号进行处理,于是仔细排查发现了问题所在:
Py6S要求对自定义的波谱响应函数重采样到2.5 nm光谱分辨率,并且在调用响应函数时,定义起止波长:

    # 设置波长
    # 校正波段(根据波段名称)
    if BandId == 1:
        SRFband = config["Parameter"]["GF1D"]["PMS"]["SRF"]["1"]
        s.wavelength = Wavelength(0.450,0.520,SRFband)

    elif BandId == 2:
        SRFband = config["Parameter"]["GF1D"]["PMS"]["SRF"]["2"]

        s.wavelength = Wavelength(0.520,0.590,SRFband)

    elif BandId == 3:
        SRFband = config["Parameter"]["GF1D"]["PMS"]["SRF"]["3"]

        s.wavelength = Wavelength(0.630,0.690,SRFband)

    elif BandId == 4:
        SRFband = config["Parameter"]["GF1D"]["PMS"]["SRF"]["4"]
        s.wavelength = Wavelength(0.760,0.890,SRFband)
    # 运行模型
    s.run()

因此,以NIR波段(第四波段)为例,设置了760 - 890 nm的区间范围,模型又确定了2.5 nm的采样间隔,那么相当于你的wavelength行数和响应值的行数就对应了,而我自作主张把源代码中的0.760 - 0.890改成了0.770 - 0.890,响应值的行数未变,这就造成了输入数据维数不一致,6S无法正确运行。

解决方法:把自己手里的高分六号(或者任意你需要的卫星的光谱响应函数)重采样(以2.5 nm为间隔),再更新源代码中s.wavelength后面跟着的起止波长,就可以正常运行了。

总结,在每个波段的s.wavelength定义中,(终止波长nm-起始波长nm)/2.5 nm应该等于该波段光谱响应函数的总行数-1。

s.wavelength = Wavelength(0.520,0.590,SRFband)

对应的SRFband输入为:

在这里插入图片描述

共29行。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值