如何在使用 if 条件针对列表测试该项目时将项目附加到列表

问题描述

如果列表包含在指定的多边形内,我会将随机生成的点添加到列表中,直到获得所需的点数:

def random_points_in_polygon(number,polygon):
    points = []
    min_x,min_y,max_x,max_y = polygon.bounds
    i= 0
    while i < number:
        point = Point(np.random.uniform(min_x,max_x),np.random.uniform(min_y,max_y))
        if polygon.contains(point):
            points.append(point)
            i += 1
    return points  # returns list of shapely point

# generate determined points within field polygon
points = random_points_in_polygon(pointscount,gdf.iloc[0].geometry)

不过,我想添加一个 if 条件,针对之前添加到列表中的每个点不断测试每个新点。

我基本上需要添加一个距离测试来测试每个点与已经添加到列表中的点的最小距离,例如:

for j in range(len(points)):
    distancetest = j.distance(point)
    if distancetest > 60:
       if polygon.contains(point)
            points.append(point)
            i += 1

如果新生成的点与之前已添加的每个点都有一定的距离,并且它包含在多边形内,则该点将添加到列表中。我发现自己陷入了一个无限循环,试图在我当前的代码添加这个附加条件。我该怎么做?

解决方法

您不是在测试所有点,而是为距 points 超过 60 个单位的每个点添加(除了 j 实际上不是 {{1} },就是列表中的索引)

使用 Point 函数测试 all() 的所有现有元素是否超过 60 个。

points