【问题标题】:Problem with shapely polygon contain, seems not to correctly flag all contained points形状匀称的多边形包含问题,似乎没有正确标记所有包含的点
【发布时间】:2020-02-01 15:39:21
【问题描述】:

假设我们有一个 100x100 的网格,其中包含一个多边形。 现在,如果我们为多边形中包含的所有可能的 (x,y) 点 [x,y 是整数] 着色,我们应该期望多边形在某种程度上被绘制/填充

但我得到的图像永远不会正确地落入并填充多边形!这是身材的限制还是我做错了什么?! (请注意,我需要它用于其他目的,而不仅仅是绘制多边形)

polygon and filled area not overlapping

import numpy as np
import matplotlib.pyplot as plt
import shapely.geometry

points = np.random.randint(0,100, (10,2)) # 10 random points
poly   = shapely.geometry.MultiPoint(points).convex_hull.buffer(1) # a polygon 
grid_points = [ shapely.geometry.Point(x,y) for x in range(100) for y in range(100)]
in_poly = np.array([poly.contains(point) for point in grid_points])

#plot
plt.imshow(in_poly.reshape(100,100), origin='lower')
plt.plot(*poly.exterior.xy)

【问题讨论】:

    标签: python matplotlib gis polygon shapely


    【解决方案1】:

    这似乎可以满足您的要求 - 替换这一行(在 for 循环中交换 y 和 x):

    grid_points = [ shapely.geometry.Point(x,y) for y in range(100) for x in range(100)]
    

    几个笔记:

    我安装的 shapely 有这个模块名称(几何拼写不同,因此您可能需要在上面的行中更改名称):

      import shapely.geometry
    

    感谢您添加第二个绘图命令 - 这对很多人都有帮助。

    沿途有不同的主要顺序(row-vs-column),因此上面的行更改为 column-major。

    您可能希望通过在外部图上进行逆运算来进行补偿。

    (原始(带有新的随机形状),更新,带有外部)

    【讨论】:

    • 完美,现在按预期工作。 geometEry 是一个已被编辑的错字。逆向也是一个非常巧妙的技巧。非常感谢
    猜你喜欢
    • 1970-01-01
    • 2016-09-07
    • 2022-07-01
    • 1970-01-01
    • 2010-10-24
    • 1970-01-01
    • 2017-04-23
    • 1970-01-01
    • 2018-05-08
    相关资源
    最近更新 更多