获取位于Shapely多边形内的所有晶格点

问题描述 投票:2回答:2

我需要找到多边形内和多边形上的所有晶格点。

输入:

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)

enter image description here

[请提出是否有办法使用或不使用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)。

python shapely mathematical-lattices
2个回答
1
投票

是否没有一个函数可以找到位于[]线上的晶格点?这些是您唯一缺少的。它们只是线段定义方程的解决方案。如果没有,那么自己编写算法,用蛮力找到要点就足够容易了。对多边形的每个边(p1,p2)执行以下操作。

p1 = (x1, y1) p2 = (x2, y2) xdiff = x2 - x1 ydiff = y2 - y1 # Find the line's equation, y = mx + b m = ydiff / xdiff b = y1 - m*x1 for xval in range(x1+1, x2): yval = m * xval + b if int(yval) == yval: # add (xval, yval) to your list of points

我已将细节留给您:请确保x1 

0
投票
我将按以下方式处理该问题。
© www.soinside.com 2019 - 2024. All rights reserved.