使用 shapely 从坐标元组列表创建点
Creating Points from Coordinate-Tuple-List with shapely
我有一个坐标列表,看起来像这样
myCoordinates
> [(2, -6), (21, 19)]
我想将它们转换成 shapely geometry
个对象,以便我可以对它们进行一些计算:
from shapely.geometry import Point
for i in myCoordinates:
c = [Point(i[0], i[1])]
print c
> [<shapely.geometry.point.Point object at 0x1044033d0>]
但是,这只会给我一个(!)几何对象。
但是当我这样做时 this
circles = [Point(random.random(), random.random()).buffer(random.random() * 0.1) for i in range(3)]
我得到三个几何对象。
print circles
> [<shapely.geometry.polygon.Polygon object at 0x1043f6890>, <shapely.geometry.polygon.Polygon object at 0x10442f8d0>, <shapely.geometry.polygon.Polygon object at 0x10442f910>]
我做错了什么?为什么它只将一个 Point 转换为几何对象而不是我列表中的两个?
您在循环的每次迭代中都覆盖了您的变量。您需要制作 c
一个列表,然后附加到它:
from shapely.geometry import Point
c = []
for i in myCoordinates:
c.append([Point(i[0], i[1])])
print c
或者您可以通过列表理解在一行中完成所有操作:
c = [Point(coord[0], coord[1]) for coord in myCoordinates]
以下会给你三分:
c = [Point(i[0], i[1]) for i in myCoords]
它遵循与 circles
相同的列表理解:
circles = [Point(random.random(), random.random()).buffer(random.random() * 0.1) for i in range(3)]
您之前所做的是将点分配给变量 c
因此在 for 循环结束时,列表中只有一个点:
for i in myCoordinates:
c = [Point(i[0], i[1])] # here c is overwritten in each iteration
我有一个坐标列表,看起来像这样
myCoordinates
> [(2, -6), (21, 19)]
我想将它们转换成 shapely geometry
个对象,以便我可以对它们进行一些计算:
from shapely.geometry import Point
for i in myCoordinates:
c = [Point(i[0], i[1])]
print c
> [<shapely.geometry.point.Point object at 0x1044033d0>]
但是,这只会给我一个(!)几何对象。
但是当我这样做时 this
circles = [Point(random.random(), random.random()).buffer(random.random() * 0.1) for i in range(3)]
我得到三个几何对象。
print circles
> [<shapely.geometry.polygon.Polygon object at 0x1043f6890>, <shapely.geometry.polygon.Polygon object at 0x10442f8d0>, <shapely.geometry.polygon.Polygon object at 0x10442f910>]
我做错了什么?为什么它只将一个 Point 转换为几何对象而不是我列表中的两个?
您在循环的每次迭代中都覆盖了您的变量。您需要制作 c
一个列表,然后附加到它:
from shapely.geometry import Point
c = []
for i in myCoordinates:
c.append([Point(i[0], i[1])])
print c
或者您可以通过列表理解在一行中完成所有操作:
c = [Point(coord[0], coord[1]) for coord in myCoordinates]
以下会给你三分:
c = [Point(i[0], i[1]) for i in myCoords]
它遵循与 circles
相同的列表理解:
circles = [Point(random.random(), random.random()).buffer(random.random() * 0.1) for i in range(3)]
您之前所做的是将点分配给变量 c
因此在 for 循环结束时,列表中只有一个点:
for i in myCoordinates:
c = [Point(i[0], i[1])] # here c is overwritten in each iteration