使用shapefile在IRIS多维数据集中剪切定义的区域

时间:2016-10-12 09:04:52

标签: python-2.7 cube shapefile clip python-iris

我处理包含气象数据(lon,lat,降水,温度......)的虹膜立方体,我有兴趣计算定义区域(例如国家)的统计数据。

这个post解释了如何用方框(min lon,min lat,max lon,max lat)裁剪立方体,但我想更进一步,使用shapefile选择一个精确的区域。 / p>

这个post解释了可以使用与面具相关联的shapefile裁剪图像,但我不知道如何使其适用于我的虹膜立方体。

如果有人可以给我一个例子或解释我该怎么做,那将非常有用。

PS:我对python

非常不满意

1 个答案:

答案 0 :(得分:1)

使用例如读取shapefile Fiona这样的事情应该有效:

from shapely.geometry import MultiPoint

# Create a mask for the data
mask = np.ones(cube.shape, dtype=bool)

# Create a set of x,y points from the cube
x, y = np.meshgrid(cube.coord(axis='X').points, cube.coord(axis='Y').points)
lat_lon_points = np.vstack([x.flat, y.flat])
points = MultiPoint(lat_lon_points.T)

# Find all points within the region of interest (a Shapely geometry)
indices = [i for i, p in enumerate(points) if region.contains(p)]

mask[np.unravel_index(indices)] = False

# Then apply the mask
if isinstance(cube.data, np.ma.MaskedArray):
    cube.data.mask &= mask
else:
    cube.data = np.ma.masked_array(cube.data, mask)

这仅适用于2D立方体,但只需要调整更高的尺寸,以便蒙版仅在纬度/经度尺寸上。

我最近在CIS实际执行了此行为,以便您可以cube.subset(shape=region)执行此操作。