如何检查一个shapefile多边形是否包含numpy网格化的经纬度点?

3
我有一个形状为1750 X 1750的numpy网格,包含经度和纬度点以及与之对应的相同形状的数据(降雨量)。我需要找出落在由shape文件读取的多边形内的数据点的平均值。
如果我的逻辑正确,我需要先找到落在多边形内的纬度和经度点的索引,然后使用该索引来过滤数据并计算平均值。
我已经在Matlab中成功实现了此功能,使用Inpolygon函数。但我想在Python中重新编写代码。我已经尝试使用matplotlib Path.contains_points函数,但它无法在numpy ND数组上工作。
请问是否有合适的方法?非常感谢你的帮助!

1
这个有帮助吗?https://dev59.com/UIDba4cB1Zd3GeqPK_fd - paddyg
类似:https://dev59.com/imIk5IYBdhLWcg3wTcYr - Christophe Roussy
1个回答

4

要检查一个多边形是否包含某些点,您可以简单地使用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模块,该模块具有更普遍的实现方式,可用于处理地理空间数据。


非常感谢你的解决方案,它对我有用。 - pkv

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接