簡體   English   中英

將網格數據插值到地理點位置

[英]Interpolation gridded data to geographical point location

我是 MetPy 的忠實粉絲,並查看了它們的插值函數( https://unidata.github.io/MetPy/latest/api/generated/metpy.interpolate.html ),但找不到我要找的東西。

我正在尋找一個函數來將網格化的 2D(經度和緯度)或 3D(經度、緯度和垂直水平)氣候數據字段插入到特定的地理位置(緯度/經度)。

該函數將采用 5 個參數:一個 2D/3D 數據變量和相關的緯度和經度變量,以及兩個所需的緯度和經度坐標值。 返回的是單個值(對於 2D 字段)或垂直剖面(對於 3D 字段)。

我基本上是在尋找與舊底圖函數 bm.interp() 等效的函數。 Cartopy 沒有等價物。 CDO(氣候數據運算符)運算符 'remapbil,lon=/lat=' 做同樣的事情,但直接從命令行處理 netCDF 文件,我正在尋找 Python 解決方案。

我認為這樣的函數將是 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.))

這可以通過我的 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 的插值工具 它們支持多維、基於標簽的插值,其用法類似於 xarray 的索引接口。 它們建立在相同的scipy.interpolate另外提到,並且 xarray 也是 MetPy 依賴項。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM