使用Shapely获取多边形中的点的邻居

时间:2017-12-01 02:24:31

标签: python polygon computational-geometry shapely

假设我有一个带点a,b,c,d的多边形

sample = Polygon(((10, 10), (10, 20), (20, 10), (20, 20)))

有人能告诉我如何找到它的邻居而不是斜对面的点。在例子中,如果我在(10,10)中,我需要得到(10,20)和(20,10)不得(20,20)。任何帮助将不胜感激。

1 个答案:

答案 0 :(得分:1)

来自shapely documentation

  

Polygon构造函数有两个位置参数。第一个是(x,y [,z])点元组的有序序列,并且被处理,与LinearRing情况完全相同。

此外,多边形边界不能自相交 因此,点的邻居是多边形定义之前和之后的点。

通过外部和内部属性访问组件环。

list(polygon.exterior.coords)

返回:

[(10, 10), (10, 20), (20, 10), (20, 20)]

角点的邻居是它之前和之后的点;我们需要以循环方式处理这个点列表:

def get_two_neighbors(point, polygon):
    """retrieve the two neighboring points of point in the polygon
    :point: a tuple representing a point of the polygon
    :polygon: a shapely Polygon
    return: a tuple of the two points immediately neighbors of point 
    """
    points = list(polygon.exterior.coords)
    ndx = points.index(point)
    two_neighbors = points[(ndx-1)%len(points)], points[(ndx+1)%len(points)]
    return two_neighbors

在参考示例中:

sample = Polygon(((10, 10), (10, 20), (20, 10), (20, 20)))
get_neighbors((10, 10), polygon)

返回:

((20, 20), (10, 20))