首页 > 解决方案 > 将网格数据插值到地理位置

问题描述

我是 MetPy 的忠实粉丝,并查看了它们的插值函数 ( https://unidata.github.io/MetPy/latest/api/generated/metpy.interpolate.html ),但找不到我想要的东西。

我正在寻找一种将网格 2D(经度和纬度)或 3D(经度、纬度和垂直水平)气候数据字段插入特定地理位置(纬度/经度)的功能。

该函数将采用 5 个参数:一个 2D/3D 数据变量和相关的纬度和经度变量,以及两个所需的纬度和经度坐标值。返回的是单个值(对于 2D 字段)或垂直配置文件(对于 3D 字段)。

我基本上是在寻找与旧 Basemap 函数 bm.interp() 等效的函数。Cartopy 没有等价物。CDO(气候数据操作员)操作员 'remapbil,lon=/lat=' 做同样的事情,但直接从命令行处理 netCDF 文件,我正在寻找 Python 解决方案。

我认为这样的功能将是对 MetPy 库的有用补充,因为它允许将网格数据(例如模型或卫星数据)与来自气象站或无线电探空仪剖面(此处仅视为垂直剖面)等点观测数据进行比较。

你能为我指出正确的方向吗?

标签: pythonmetpy

解决方案


我认为您正在寻找的东西已经存在scipy.interpolate(scipy 是 MetPy 的依赖项之一)。在这里,我们可以使用interpn在 n 维上进行线性插值:

import numpy as np
from scipy.interpolate import interpn

# Array of synthetic grid to interpolate--ordered z,y,x
a = np.arange(24).reshape(2, 3, 4)

# Locations of grid points along each dimension
z = np.array([1.5, 2.5])
y = np.array([-1., 0., 1.])
x = np.array([-3.5, -1, 1, 3.5])

interpn((z, y, x), a, (2., 0.5, 2.))

推荐阅读