我已经建立了形状为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模块,它具有处理地理空间数据的更通用的实现。