从Coordinateslist

时间:2016-04-21 08:33:45

标签: python geospatial geo 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转换为几何对象而不是我的列表中的两个?

2 个答案:

答案 0 :(得分:2)

您在循环的每次迭代中覆盖变量。您需要将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]

答案 1 :(得分:1)

以下会给你三点:

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