GOES 17 netcdf 文件转换为 Plate Carree

GOES 17 netcdf file convert to Plate Carree

示例文件可以从https://noaa-goes17.s3.amazonaws.com/ABI-L1b-RadF/2021/213/00/OR_ABI-L1b-RadF-M6C13_G17_s20212130000319_e20212130009396_c20212130009445.nc

下载

我正在尝试将投影转换为圆盘。

我使用 Satpy 加载了 netcdf。

from satpy import Scene
from glob import glob
goes17 = glob('./samplefile/*')
goes17_scene = Scene(reader="abi_l1b", filenames=goes17)

然后我想将它重新采样到 Plate carree 使用 https://satpy.readthedocs.io/en/stable/resample.html#create-custom-area-definition 但是没有示例代码。

该文档肯定可以改进(我不是在抱怨,我是作者之一)。首先,它应该指向 pyresample 中关于如何制作自定义 AreaDefinition 的文档:

https://pyresample.readthedocs.io/en/latest/geometry_utils.html

对于您想要重采样到板方格(等距柱状)投影的情况,您可以尝试这样的事情:

from pyresample import create_area_def
area_def = create_area_def("my_area_def", "+proj=eqc +datum=WGS84", resolution=2000)

这将生成所谓的 DynamicAreaDefinition,即未定义所有参数的 AreaDefinition。例如,这个区域没有extent/bounds。我确实将其定义为每像素 2km 的分辨率。我们可以向 Satpy 提供这个动态区域定义,它会使用 ABI 数据中的地理位置“冻结”它。所以你的代码看起来像这样:


from satpy import Scene
from glob import glob
from pyresample import create_area_def

area_def = create_area_def("my_area_def", "+proj=eqc +datum=WGS84", resolution=2000)
goes17 = glob('./samplefile/*')
goes17_scene = Scene(reader="abi_l1b", filenames=goes17)
goes17_scene.load(['C13']) 
new_scn = goes17_scene.resample(area_def)

# save to geotiffs
new_scn.save_datasets()

请注意,如果您在调用 create_area_def 时知道您所在区域的确切边界,则可以创建一个完全限定的 AreaDefinition,这在重采样时会表现得更好(因为 Satpy 不必计算动态区域的边界)。