0

我需要在任意坐标集合上从 240x240 结构化网格中对 hdf4/netcdf4/hdf5 文件的一些空气数据进行双线性插值。我不知道该怎么做。我曾尝试使用pyresample,但这需要目标网格的 AreaDefinition,这在我的非结构化目标数据(任意点)的情况下是不可能的。这是我的代码:

import numpy as np
import pyresample
from   netCDF4 import Dataset

air_file  = Dataset('air.hdf', mode='r')
air_data  = air_file.variables['air_2m' ][:].flatten()
air_lon   = air_file.variables['air_lon'][:].flatten()
air_lat   = air_file.variables['air_lat'][:].flatten()
air_data  = air_data.reshape(240,240)
air_lon   = air_lon. reshape(240,240) # grid size is 240x240
air_lat   = air_lat. reshape(240,240)

tar_lon   = 100 * np.random.random((100,1)) # random points 
tar_lat   = 100 * np.random.random((100,1)) # random points

source_def = pyresample.geometry.SwathDefinition(lons=air_lon, lats=air_lat)
target_def = pyresample.geometry.SwathDefinition(lons=tar_lon, lats=tar_lat)
result     = pyresample.bilinear.resample_bilinear(gmt_1500, source_def, target_def, radius=50e3, neighbours=32, nprocs=1, fill_value=None, reduce_data=True, segments=None, epsilon=0)

我收到以下错误(这被理解为它需要一个 AreaDefinition 作为目标):

AttributeError: 'SwathDefinition' object has no attribute 'proj_str'

有没有其他方法可以做到这一点?

4

1 回答 1

0

我不熟悉 pyresample 包,但对于 python 中的双线性插值,我建议参考这个较早的 stackexchange 线程,它提供了许多有用的示例:

如何在 Python 中执行双线性插值

ps:顺便说一句,如果有人想从命令行执行这个任务,你也可以使用双线性插值和 cdo 提取一组点

# some bash loop over a pairs of x and y
cdo remapbil,lon=${x}/lat=${x} in.nc mypoint_${x}_${y}.nc
于 2019-07-31T09:13:51.913 回答