合并 GOES17、EUMETSAT、GK-2A 气象卫星图像
Merging GOES17, EUMETSAT, GK-2A Meteorological satellite image
我想使用 GOES17、EUMETSAT 和 GK-2A 生成全球气象卫星图像。
我想让它成为 Plate carree 坐标。 ()
首先,使用Satpy,我制作了plate carree图像。
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()
喜欢这种方法,我想制作其他卫星图像并合并到 1 个图像文件。但是有什么简单或最容易的方法来生成全球天气图像吗?我的最终目标是生成全球卫星图像的 numpy 数组。
-- 我的整个代码--
from satpy import Scene, MultiScene
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('E:/Global/GOES_17/OR_ABI-L1b-RadF-M6C13_G17_s20212130000319_e20212130009396_c20212130009445.nc')
goes17_scene = Scene(reader="abi_l1b", filenames=goes17)
goes17_scene.load(['C13'])
gk2a = glob('E:/Global/GK-2A/gk2a_ami_le1b_ir105_fd020ge_202108010000.nc')
gk2a_scene = Scene(reader="ami_l1b", filenames=gk2a)
gk2a_scene.load(['IR105'])
eumetsat = glob('E:/Global/EUMETSAT/MSG4-SEVI-MSG15-0100-NA-20210801000010.306000000Z-20210801001259-4774254.nat')
eumetsat_scene = Scene(reader='seviri_l1b_native', filenames=eumetsat)
eumetsat_scene.load(['IR_108'])
from satpy import MultiScene, DataQuery
mscn = MultiScene([goes17_scene, gk2a_scene, eumetsat_scene])
groups = {DataQuery(name='IR_group', wavelength=(10.35, 10.35, 10.8)): ['C13', 'IR105', 'IR_108']}
mscn.group(groups)
from pyresample.geometry import AreaDefinition
resampled = mscn.resample(area_def, reduce_data=False)
resampled.load(['IR_group'])
blended = resampled.blend()
blended.show(['IR_group'])
在 Satpy 中有一些方法可以做到这一点,但通常人们有特定的方法希望将数据连接在一起。这是您在选择所需代码之前必须回答的问题。首先,虽然您需要为最终图像中想要的每个单独的卫星图像制作一个场景,并将它们重新采样到同一个网格。 DynamicAreaDefinition(如您现在使用的那样)不适合整个过程,因为每个重新采样的场景将位于不同的最终区域(基于重新采样的卫星数据“冻结”了 DynamicAreaDefinition)。
您的合并选项:
- Satpy 有一个
BackgroundCompositor
,您可以在其中将一张图片放在另一张图片之上。有一些用于创建自定义复合材料的文档,您可以在其中制作这样的复合材料。可以将一系列这些复合材料链接在一起以获得您正在寻找的整体全球复合材料。您可以将所有数据集放在同一个场景中以简化操作:
scn = Scene()
scn["C13"] = resampled_goes17_scene["C13"]
... and so on for the other sensors ...
scn.load(["custom_composite"])
- 使用 Satpy MultiScene,给它所有重新采样的场景和 运行“混合”方法将图像连接在一起。 https://satpy.readthedocs.io/en/stable/multiscene.html#blending-scenes-in-multiscene
- 使用 xarray 和 dask
.where
函数以及自定义蒙版数组来说明每个图像在整个图像中的显示位置。有些人用太阳天顶角做这种事情,在图像之间有很好的融合,而不是仅仅将一个叠加在另一个之上。
- 为每个重新采样的传感器创建单独的 geotiff,并使用 GDAL 的
gdal_merge.py
实用程序将它们合并为一个 geotiff。
我想使用 GOES17、EUMETSAT 和 GK-2A 生成全球气象卫星图像。
我想让它成为 Plate carree 坐标。 (
首先,使用Satpy,我制作了plate carree图像。
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()
喜欢这种方法,我想制作其他卫星图像并合并到 1 个图像文件。但是有什么简单或最容易的方法来生成全球天气图像吗?我的最终目标是生成全球卫星图像的 numpy 数组。
-- 我的整个代码--
from satpy import Scene, MultiScene
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('E:/Global/GOES_17/OR_ABI-L1b-RadF-M6C13_G17_s20212130000319_e20212130009396_c20212130009445.nc')
goes17_scene = Scene(reader="abi_l1b", filenames=goes17)
goes17_scene.load(['C13'])
gk2a = glob('E:/Global/GK-2A/gk2a_ami_le1b_ir105_fd020ge_202108010000.nc')
gk2a_scene = Scene(reader="ami_l1b", filenames=gk2a)
gk2a_scene.load(['IR105'])
eumetsat = glob('E:/Global/EUMETSAT/MSG4-SEVI-MSG15-0100-NA-20210801000010.306000000Z-20210801001259-4774254.nat')
eumetsat_scene = Scene(reader='seviri_l1b_native', filenames=eumetsat)
eumetsat_scene.load(['IR_108'])
from satpy import MultiScene, DataQuery
mscn = MultiScene([goes17_scene, gk2a_scene, eumetsat_scene])
groups = {DataQuery(name='IR_group', wavelength=(10.35, 10.35, 10.8)): ['C13', 'IR105', 'IR_108']}
mscn.group(groups)
from pyresample.geometry import AreaDefinition
resampled = mscn.resample(area_def, reduce_data=False)
resampled.load(['IR_group'])
blended = resampled.blend()
blended.show(['IR_group'])
在 Satpy 中有一些方法可以做到这一点,但通常人们有特定的方法希望将数据连接在一起。这是您在选择所需代码之前必须回答的问题。首先,虽然您需要为最终图像中想要的每个单独的卫星图像制作一个场景,并将它们重新采样到同一个网格。 DynamicAreaDefinition(如您现在使用的那样)不适合整个过程,因为每个重新采样的场景将位于不同的最终区域(基于重新采样的卫星数据“冻结”了 DynamicAreaDefinition)。
您的合并选项:
- Satpy 有一个
BackgroundCompositor
,您可以在其中将一张图片放在另一张图片之上。有一些用于创建自定义复合材料的文档,您可以在其中制作这样的复合材料。可以将一系列这些复合材料链接在一起以获得您正在寻找的整体全球复合材料。您可以将所有数据集放在同一个场景中以简化操作:
scn = Scene()
scn["C13"] = resampled_goes17_scene["C13"]
... and so on for the other sensors ...
scn.load(["custom_composite"])
- 使用 Satpy MultiScene,给它所有重新采样的场景和 运行“混合”方法将图像连接在一起。 https://satpy.readthedocs.io/en/stable/multiscene.html#blending-scenes-in-multiscene
- 使用 xarray 和 dask
.where
函数以及自定义蒙版数组来说明每个图像在整个图像中的显示位置。有些人用太阳天顶角做这种事情,在图像之间有很好的融合,而不是仅仅将一个叠加在另一个之上。 - 为每个重新采样的传感器创建单独的 geotiff,并使用 GDAL 的
gdal_merge.py
实用程序将它们合并为一个 geotiff。