我的形状为1750 X 1750的lat和lon点的网格网格及其相应形状的相应数据(降雨量)。我需要找到落在多边形内的数据点的平均值,从形状文件中读取。
如果我的逻辑是正确的,我将找出落在多边形内的纬度和离子点的索引,然后使用该索引过滤数据然后进行平均。
我已经使用Inpolygon函数在Matlab中成功实现了它,但我想用Python重写代码。我已经使用了matplotlib的Path.contains_points函数,但它在numpy ND-array上不起作用。
有人建议合适的方法吗? 我们将非常感谢您的帮助。
答案 0 :(得分:4)
要检查多边形是否包含某些点,您只需使用matplotlib
,更准确地说,Path.contains_points
中实现的matplotlib.path
是解决方案。它确实接受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模块,该模块具有更多用于处理地理空间数据的常规实现。