在不同的多边形中生成随机坐标
Generate random coordinates in different polygons
我是 Python 的新手。
我想在一组多边形内生成随机坐标。
为了在一个多边形内生成随机坐标,我在 Stackoverflor 上找到了这段代码,它有效:
def polygon_random_points (poly, num_points):
minx, miny, maxx, maxy = poly.bounds
while len(points) < num_points:
random_point = Point([random.uniform(minx, maxx), random.uniform(miny, maxy)])
if (random_point.within(poly)):
points.append(random_point)
return points
但现在我很难为我的所有多边形实现一个 for 循环。它们具有这种数据类型:geopandas.geoseries.GeoSeries。
Alle_Polygone
我试过这段代码:
for Standorte in Alle_Polygone:
def Zufallskoordinaten (poly, Anzahl):
min_x, min_y, max_x, max_y = poly.bounds
while len(Punkte) < Anzahl:
Zufallspunkt = Point([random.uniform(min_x, max_x), random.uniform(min_y, max_y)])
if (Zufallspunkt.within(poly)):
Punkte.append(Zufallspunkt)
return Punkte
Punkte = Zufallskoordinaten(Alle_Polygone,3)
不幸的是,这会导致此 AttributeError:'list' 对象没有属性 'bounds'。
也许有人可以帮助我。
- 你遍历你的多边形,但将所有多边形传递给函数,它接受一个多边形,而不是多边形列表。
Alle_Polygone
没有 .bounds
,因为你得到错误,但是 Alle_Polygone
中的元素,即多边形,它们有。
- 函数定义一次就够了,不用在循环里
- 在循环内调用定义的函数(记住,python 是空格敏感的,制表符很重要)。
如果哪组点对应于哪个多边形很重要,则将返回的点存储在列表(结构化)中:
alle_Punkte = []
def polygon_random_points (poly, Anzahl):
min_x, min_y, max_x, max_y = poly.bounds
while len(Punkte) < Anzahl:
Zufallspunkt = Point([random.uniform(min_x, max_x), random.uniform(min_y, max_y)])
if (Zufallspunkt.within(poly)):
Punkte.append(Zufallspunkt)
return Punkte
for Standorte in Alle_Polygone:
Punkte = polygon_random_points(Standorte,3)
alle_Punkte.append(Punkte)
或者,如果您打算定义一个接受一组多边形的函数,那么
def Zufallskoordinaten (Alle_Polygone_, Anzahl):
Punkte = []
for Standorte in Alle_Polygone_:
min_x, min_y, max_x, max_y = Standorte.bounds
i = 0 # number of points generated for this Standorte
while i < Anzahl:
Zufallspunkt = Point([random.uniform(min_x, max_x), random.uniform(min_y, max_y)])
if (Zufallspunkt.within(Standorte)):
Punkte.append(Zufallspunkt)
i++
return Punkte
alle_Punkte = Zufallskoordinaten (Alle_Polygone,3)
这两个都会在每个多边形内生成 Anzahl 点数。这是你想要的吗?还是总计 Anzahl 点数?
根据您找到代码的同一个 StackExchange 线程,存在一个函数 object.representative_point()
,它:
Returns a cheaply computed point that is guaranteed to be within the
geometric object.
为什么要重新发明轮子?无论 shapely 在幕后实施什么,都保证比无休止的循环更有效,直到您碰巧选择满足您标准的 n 点。
def get_random_points(polygon, num_points):
return [polygon.representative_point() for _ in range(num_points)]
def main():
all_polygons = [...]
all_points = []
points_per_polygon = 3
for polyon in all_polygons:
all_points.append(get_random_points(polygon, points_per_polygon))
print(all_points)
main()
我是 Python 的新手。 我想在一组多边形内生成随机坐标。
为了在一个多边形内生成随机坐标,我在 Stackoverflor 上找到了这段代码,它有效:
def polygon_random_points (poly, num_points):
minx, miny, maxx, maxy = poly.bounds
while len(points) < num_points:
random_point = Point([random.uniform(minx, maxx), random.uniform(miny, maxy)])
if (random_point.within(poly)):
points.append(random_point)
return points
但现在我很难为我的所有多边形实现一个 for 循环。它们具有这种数据类型:geopandas.geoseries.GeoSeries。 Alle_Polygone
我试过这段代码:
for Standorte in Alle_Polygone:
def Zufallskoordinaten (poly, Anzahl):
min_x, min_y, max_x, max_y = poly.bounds
while len(Punkte) < Anzahl:
Zufallspunkt = Point([random.uniform(min_x, max_x), random.uniform(min_y, max_y)])
if (Zufallspunkt.within(poly)):
Punkte.append(Zufallspunkt)
return Punkte
Punkte = Zufallskoordinaten(Alle_Polygone,3)
不幸的是,这会导致此 AttributeError:'list' 对象没有属性 'bounds'。
也许有人可以帮助我。
- 你遍历你的多边形,但将所有多边形传递给函数,它接受一个多边形,而不是多边形列表。
Alle_Polygone
没有.bounds
,因为你得到错误,但是Alle_Polygone
中的元素,即多边形,它们有。 - 函数定义一次就够了,不用在循环里
- 在循环内调用定义的函数(记住,python 是空格敏感的,制表符很重要)。
如果哪组点对应于哪个多边形很重要,则将返回的点存储在列表(结构化)中:
alle_Punkte = []
def polygon_random_points (poly, Anzahl):
min_x, min_y, max_x, max_y = poly.bounds
while len(Punkte) < Anzahl:
Zufallspunkt = Point([random.uniform(min_x, max_x), random.uniform(min_y, max_y)])
if (Zufallspunkt.within(poly)):
Punkte.append(Zufallspunkt)
return Punkte
for Standorte in Alle_Polygone:
Punkte = polygon_random_points(Standorte,3)
alle_Punkte.append(Punkte)
或者,如果您打算定义一个接受一组多边形的函数,那么
def Zufallskoordinaten (Alle_Polygone_, Anzahl):
Punkte = []
for Standorte in Alle_Polygone_:
min_x, min_y, max_x, max_y = Standorte.bounds
i = 0 # number of points generated for this Standorte
while i < Anzahl:
Zufallspunkt = Point([random.uniform(min_x, max_x), random.uniform(min_y, max_y)])
if (Zufallspunkt.within(Standorte)):
Punkte.append(Zufallspunkt)
i++
return Punkte
alle_Punkte = Zufallskoordinaten (Alle_Polygone,3)
这两个都会在每个多边形内生成 Anzahl 点数。这是你想要的吗?还是总计 Anzahl 点数?
根据您找到代码的同一个 StackExchange 线程,存在一个函数 object.representative_point()
,它:
Returns a cheaply computed point that is guaranteed to be within the geometric object.
为什么要重新发明轮子?无论 shapely 在幕后实施什么,都保证比无休止的循环更有效,直到您碰巧选择满足您标准的 n 点。
def get_random_points(polygon, num_points):
return [polygon.representative_point() for _ in range(num_points)]
def main():
all_polygons = [...]
all_points = []
points_per_polygon = 3
for polyon in all_polygons:
all_points.append(get_random_points(polygon, points_per_polygon))
print(all_points)
main()