使用Geopandas,如何通过抽样方法在每个多边形中随机选择5个点?

3

Kopargaon的Shapefile数据图像

我想使用随机抽样方法在每个多边形中选择5个点。需要每个多边形中5个点的坐标(纬度,经度),以识别种植了哪些作物。

有没有使用geopandas进行此操作的任何想法?

非常感谢。

1个回答

3

我的建议涉及在形状的边界框内抽取随机x和y坐标,然后检查抽取的点是否实际上在形状内。如果抽样点在形状内,则返回它,否则重复此过程直到找到形状内的点。对于抽样,我们可以使用均匀分布,使得形状中的所有点具有相同的抽样概率。以下是函数:

from shapely.geometry import Point
def random_point_in_shp(shp):
    within = False
    while not within:
        x = np.random.uniform(shp.bounds[0], shp.bounds[2])
        y = np.random.uniform(shp.bounds[1], shp.bounds[3])
        within = shp.contains(Point(x, y))
    return Point(x,y)

以下是如何将此函数应用于名为geo_dfGeoDataFrame以获取每个条目的5个随机点的示例:

for num in range(5):
    geo_df['Point{}'.format(num)] = geo_df['geometry'].apply(random_point_in_shp)

可能有更有效的方法来实现这一点,但根据您的应用程序,该算法可能足够快。对于我的测试文件,其中包含大约2300个条目,为每个条目生成五个随机点在我的计算机上花费了约15秒钟。


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