将GOES16地球同步数据投影到平板Carree Cartopy中

2024-04-29 13:53:22 发布

您现在位置:Python中文网/ 问答频道 /正文

我正拼命地将一些地球同步数据从GOES-16netcdf文件投影到另一个投影中。我可以得到背景地图重新投影,但似乎无法得到数据跟随。在

我还不太精通这个,但到目前为止我所掌握的是:

通过NetCDF4读取数据:

from netCDF4 import dataset
nc = Dataset('OR_ABI-L1b-RadF- 
    M3C13_G16_s20182831030383_e20182831041161_c20182831041217.nc')

data = nc.variables['Rad'][:]

在这里我试图得到地球静止轨道的信息:

^{pr2}$

这里我从.nc文件中获取投影数据:

proj_var = nc.variables['goes_imager_projection']

sat_height = proj_var.perspective_point_height
central_lon = proj_var.longitude_of_projection_origin
semi_major = proj_var.semi_major_axis
semi_minor = proj_var.semi_minor_axis
print proj_var

<type 'netCDF4._netCDF4.Variable'>
int32 goes_imager_projection()
    long_name: GOES-R ABI fixed grid projection
    grid_mapping_name: geostationary
    perspective_point_height: 35786023.0
    semi_major_axis: 6378137.0
    semi_minor_axis: 6356752.31414
    inverse_flattening: 298.2572221
    latitude_of_projection_origin: 0.0
    longitude_of_projection_origin: -75.0
    sweep_angle_axis: x
unlimited dimensions: 
current shape = ()
filling on, default _FillValue of -2147483647 used

下面是我的一小段相关代码:

fig = plt.figure(figsize=(30,20))

globe = ccrs.Globe(semimajor_axis=semi_major, semiminor_axis=semi_minor)
proj = ccrs.Geostationary(central_longitude=central_lon, 
    satellite_height=sat_height, globe=globe)

ax = fig.add_subplot(1, 1, 1, projection=proj)

IR_img = ax.imshow(data[:,:],origin='upper',extent=(X.min(), X.max(), Y.min(), Y.max()),
    cmap=IR_cmap,interpolation='nearest',vmin=162.,vmax=330.)

每个人都表现得很好: Data and map working

当我试着得到一个平板夹角投影时,我试着:

proj = ccrs.PlateCarree(central_longitude=central_lon,globe=globe)

以及我失败的形象: Data and map not working

我尝试过在imshow方法中扰乱范围,我尝试添加一个

transform=proj 

在imshow中没有运气,它只是挂断了,我必须重新启动内核。在

显然这是我缺乏理解。如果有人能快速方便地帮助/解释我想改变地球静止轨道的投影,我将不胜感激。在

我在经营古Python。在

谢谢你的关注。在

编辑:多亏了DopplerShift和ajdawson的洞察力,问题似乎得到了解决,我想我可能有点不耐烦/不知道一个完整的磁盘转换需要多长时间。在


Tags: ofvarorigin投影projcentralncheight
1条回答
网友
1楼 · 发布于 2024-04-29 13:53:22

看起来您需要为imshow指定transform关键字。这个关键字告诉cartopy你的数据所在的坐标,在这个例子中应该是地球同步的。在

我没有你的数据集,所以我不能测试它,但下面的片段说明了这个概念。投影和变换是独立的,因此您应该定义两者。对于数据集,transform参数的值(crs)是固定的,但是投影可以是您喜欢的任何东西(包括与crs相同的内容)。在

请看这个重新投影地球静止图像的示例:https://scitools.org.uk/cartopy/docs/v0.16/gallery/geostationary.html#sphx-glr-gallery-geostationary-py。另请参阅投影和转换参数指南:https://scitools.org.uk/cartopy/docs/v0.16/tutorials/understanding_transform.html。在

globe = ccrs.Globe(semimajor_axis=semi_major, semiminor_axis=semi_minor)
crs = ccrs.Geostationary(central_longitude=central_lon, 
                         satellite_height=sat_height, globe=globe)
proj = ccrs.PlateCarree(central_longitude=central_lon, globe=globe)

ax = fig.add_subplot(1, 1, 1, projection=proj)

IR_img = ax.imshow(data[:,:], origin='upper',
                   extent=(X.min(), X.max(), Y.min(), Y.max()),
                   transform=crs,
                   cmap=IR_cmap,
                   interpolation='nearest', vmin=162., vmax=330.)

相关问题 更多 >