如何检查形状文件多边形包含纬度和经度点的 numpy meshgrid
how to check a shape file polygon contains numpy meshgrid of lat and lon points
我有形状为 1750 X 1750 的纬度和经度点的 numpy 网格及其相同形状的相应数据(降雨量)。我需要找到落在多边形内的数据点的平均值,从形状文件中读取。
如果我的逻辑是正确的,我必须找出落在多边形内的纬度和经度点的索引,然后使用该索引过滤数据,然后进行平均。
我已经使用 Inpolygon 函数在 Matlab 中成功实现了它,但我想重写 Python 中的代码。我使用了 matplotlib Path.contains_points 函数,但它不适用于 numpy ND 数组。
谁能推荐一种合适的方法?
非常感谢您的帮助。
要检查多边形是否包含一些点,您可以简单地使用 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 模块,该模块具有更通用的处理地理空间数据的实现。
我有形状为 1750 X 1750 的纬度和经度点的 numpy 网格及其相同形状的相应数据(降雨量)。我需要找到落在多边形内的数据点的平均值,从形状文件中读取。
如果我的逻辑是正确的,我必须找出落在多边形内的纬度和经度点的索引,然后使用该索引过滤数据,然后进行平均。
我已经使用 Inpolygon 函数在 Matlab 中成功实现了它,但我想重写 Python 中的代码。我使用了 matplotlib Path.contains_points 函数,但它不适用于 numpy ND 数组。
谁能推荐一种合适的方法? 非常感谢您的帮助。
要检查多边形是否包含一些点,您可以简单地使用 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 模块,该模块具有更通用的处理地理空间数据的实现。