将网格数据插值到地理点位置

2024-05-29 02:10:57 发布

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

我是MetPy的忠实粉丝,曾看过他们的插值函数(https://unidata.github.io/MetPy/latest/api/generated/metpy.interpolate.html),但找不到我想要的

我正在寻找一个函数,将栅格2D(lon和lat)或3D(lon、lat和垂直水平)气候数据字段插值到特定的地理位置(lat/lon)

该函数将包含5个参数:一个2D/3D数据变量和相关的纬度和经度变量,以及两个所需的纬度和经度坐标值。返回的是单个值(对于二维字段)或垂直轮廓(对于三维字段)

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

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

你能给我指一下正确的方向吗


Tags: 数据函数httpsiogithub粉丝插值气候
3条回答

这可以通过我的nctoolkit包(https://nctoolkit.readthedocs.io/en/latest/)轻松完成。它使用CDO作为后端,默认为双线性插值。下面将把.nc文件重新栅格化为单个网格点,然后将其转换为xarray数据集

import nctoolkit as nc
import pandas as pd
data = nc.open_data("example.nc")
grid = pd.DataFrame({"lon":[0], "lat":[50]})
data.regrid(grid)
ds = data.to_xarray()

如果您已经在使用多维netCDF文件,并且想要一个Python解决方案,那么再添加一个解决方案:查看xarray的interpolation tools。它们支持多维的、基于标签的插值,其用法类似于xarray的索引接口。它们构建在前面提到的相同的scipy.interpolate之上,并且xarray也是MetPy依赖项

我认为您所寻找的已经存在于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.))

相关问题 更多 >

    热门问题