【问题标题】:Interpolation gridded data to geographical point location将网格数据插值到地理位置
【发布时间】:2020-11-25 03:30:03
【问题描述】:

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

我正在寻找一种函数,可以将网格化 2D(经度和纬度)或 3D(经度、纬度和垂直水平)气候数据字段插入到特定地理位置 (lat/lon)。

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

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

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

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

【问题讨论】:

    标签: python metpy


    【解决方案1】:

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

    【讨论】:

      【解决方案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()
      

      【讨论】:

        【解决方案3】:

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

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2019-05-12
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2019-12-31
          相关资源
          最近更新 更多