假设您有一个空气温度的网格数据集,更好的解决方案是将数据内插到给定的坐标点,而不是“标记”立方体中的数据点。
这可以通过遍历城市及其坐标和使用cube.interpolate()
方法来完成。有关示例,请参见https://scitools.org.uk/iris/docs/latest/userguide/interpolation_and_regridding.html#cube-interpolation-and-regridding。
trajectory
更优化的解决方案是使用该模块一次将数据内插到所有城市点:
import iris
import iris.analysis.trajectory as itraj
import numpy as np
# Create some dummy data
nx = 10
ny = 20
lonc = iris.coords.DimCoord(
np.linspace(-5, 10, nx), units="degrees", standard_name="longitude"
)
latc = iris.coords.DimCoord(
np.linspace(45, 55, ny), units="degrees", standard_name="latitude"
)
cube = iris.cube.Cube(
np.random.rand(ny, nx),
dim_coords_and_dims=((latc, 0), (lonc, 1)),
standard_name="x_wind",
units="m s^-1",
attributes=dict(title="dummy_data"),
)
# Create a Nx2 array of city coordinates
city_coords = np.array([[50.7184, -3.5339], [48.8566, 2.3522], [52.6401898, 1.2517445]])
# Interpolate the data to the given points
sample_points = [("latitude", city_coords[:, 0]), ("longitude", city_coords[:, 1])]
cube_values_in_cities = itraj.interpolate(cube, sample_points, "linear")
希望这可以帮助。