我需要查找内部和多边形上的所有点。从Python形状多边形中提取多边形内的所有坐标
输入:
from shapely.geometry import Polygon, mapping
sh_polygon = Polygon(((0,0), (2,0), (2,2), (0,2)))
输出:
(0,0) , (1,0) , (2,0) , (0,1) , (1,1) , (2,1) , (0,2) , (1,2) , (2,2).
请建议,如果有不使用shapely
一个更好的办法。
我已经写了这段代码,它给出了多边形内的点,但是它没有给出点。也有没有更好的方式做同样的事情:
from shapely.geometry import Polygon, Point
def get_random_point_in_polygon(poly):
(minx, miny, maxx, maxy) = poly.bounds
minx = int(minx)
miny = int(miny)
maxx = int(maxx)
maxy = int(maxy)
print("poly.bounds:", poly.bounds)
a = []
for x in range(minx, maxx+1):
for y in range(miny, maxy+1):
p = Point(x, y)
if poly.contains(p):
a.append([x, y])
return a
p = Polygon([(0,0), (2,0), (2,2), (0,2)])
point_in_poly = get_random_point_in_polygon(p)
print(len(point_in_poly))
print(point_in_poly)
输出:
poly.bounds: (0.0, 0.0, 2.0, 2.0)
1
[[1, 1]]
我简化了我的问题。实际上,我需要找到所有内部和有角的正方形的点:(77,97),(141,101),(136,165),(73,160)。
你可以将你的最大值增加1并减少1吗? – SirParselot
@SirParselot Thansk。我改变了它。但是,我得到完全相同的输出。 – Beginner
这是因为你有'如果poly.contains(p)'。这只有在多边形的内部有点而不是它的情况下才是正确的。如果你的环路在边界之间,你不应该检查它是否在多边形内。忽略我的第一个评论,如果你删除了'if poly.contains(p)' – SirParselot