Python 如何在使用if条件测试列表项时将项附加到列表中
如果列表包含在指定多边形中,我将向列表中添加随机生成的点,直到获得所需的点数:Python 如何在使用if条件测试列表项时将项附加到列表中,python,geopandas,shapely,Python,Geopandas,Shapely,如果列表包含在指定多边形中,我将向列表中添加随机生成的点,直到获得所需的点数: 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.
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)
如果新生成的点与之前添加的每个点都有一定距离,并且该点包含在多边形中,则该点将添加到列表中。我发现自己陷入了一个无限循环,试图在当前代码中添加这个附加条件。我该怎么做呢?你不是在测试所有的点,而是在距离超过60个单位的每个点上添加
点
(除了j
实际上不是点
,而是列表中的索引)
使用all()
函数测试点的所有现有元素是否超过60个
while i < number:
point = Point(np.random.uniform(min_x, max_x), np.random.uniform(min_y, max_y))
if polygon.contains(point) and all(p.distance(point) > 60 for p in points):
points.append(point)
i += 1
而i60,对于p in点):
点。追加(点)
i+=1
您能分享完整的代码吗?集成第二个条件后的最终代码是什么?将all()
函数与测试每个元素距离的生成器一起使用。all(j.distance(point)>60表示j in点)
while i < number:
point = Point(np.random.uniform(min_x, max_x), np.random.uniform(min_y, max_y))
if polygon.contains(point) and all(p.distance(point) > 60 for p in points):
points.append(point)
i += 1