如何检查形状文件多边形包含lat和lon点的numpy meshgrid

时间:2015-05-25 06:51:25

标签: python numpy matplotlib shapefile

我的形状为1750 X 1750的lat和lon点的网格网格及其相应形状的相应数据(降雨量)。我需要找到落在多边形内的数据点的平均值,从形状文件中读取。

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

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

有人建议合适的方法吗? 我们将非常感谢您的帮助。

1 个答案:

答案 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模块,该模块具有更多用于处理地理空间数据的常规实现。