我需要找出多边形内部和边上的所有格点。
输入:
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)。
if poly.contains(p)
。只有当多边形内部有该点而不是在其上时,才会成立。如果循环在边界之间,您不必检查它是否在多边形内部。如果您删除if poly.contains(p)
,请忽略我的第一条评论。 - SirParselot