如何检查一个形状文件多边形包含numpy网格的纵横点



我已经建立了形状为1750 X 1750的经纬点网格及其对应的相同形状的数据(降雨量)。我需要找到数据点的平均值落在一个多边形,从形状文件读取。

如果我的逻辑是正确的,我必须找出落在多边形内的纬度点和长度点的索引,然后使用该索引过滤数据,然后进行平均。

我已经成功地实现了它在Matlab中使用Inpolygon函数,但我想在Python中重写代码。我使用了matplotlib路径。contains_points函数,但在numpy ND-array上不起作用。

谁能提出一个合适的方法?非常感谢您的帮助。

要检查多边形是否包含一些点,您可以简单地使用matplotlib,更准确地说,matplotlib.path中实现的Path.contains_points是解决方案。它接受ND数组,你只需要事先把它们平铺,

import numpy as np
from matplotlib.path import Path
X, Y = np.meshgrid(x, y)  # X, Y are 2D ndarrays
XY = np.dstack((X, Y))
XY_flat = XY.reshape((-1, 2))
mpath = Path( vertices ) # the vertices of the polygon
mask_flat = mpath.contains_points(XY_flat)
mask = mask_flat.reshape(X.shape)  

或者,您可以查看一下GeoPandas模块,它具有处理地理空间数据的更通用的实现。

最新更新