2016-04-21 5 views
0

Ich habe eine Liste Koordinaten, die wie soErstellen Punkte von Coordinateslist

myCoordinates 
> [(2, -6), (21, 19)] 

ich sie in shapely geometry Objekte konvertiert werden soll, so dass ich mit ihnen einige Berechnungen tun können:

from shapely.geometry import Point 
for i in myCoordinates: 
    c = [Point(i[0], i[1])] 

print c 
> [<shapely.geometry.point.Point object at 0x1044033d0>] 

jedoch, dass gibt mir nur ein (!) Geometrieobjekt.

Aber wenn ich this

circles = [Point(random.random(), random.random()).buffer(random.random() * 0.1) for i in range(3)] 

bekomme ich drei Geometrieobjekten.

print circles 
> [<shapely.geometry.polygon.Polygon object at 0x1043f6890>, <shapely.geometry.polygon.Polygon object at 0x10442f8d0>, <shapely.geometry.polygon.Polygon object at 0x10442f910>] 

Was mache ich falsch? Warum konvertiert es nur einen Punkt in ein Geometrieobjekt und nicht die beiden in meiner Liste?

+0

zuweisen Sie alle Punkte auf 'c 'nur in der for-Schleife? 'c = [Punkt (i [0], i [1])]' – AKS

+0

@AKS was meinst du damit? Ich dachte, ich ersetzte die Zufallszahlenerzeugung in dem Beispiel, das ich mit meinen "echten" Koordinaten verknüpfte. Ich habe nur den Puffer weggelassen ... – Stophface

+0

Was ich meine ist, dass, wenn Sie _that das gibt mir nur ein (!) Geometrie-Objekt._ welche Variable zeigt auf das Objekt? – AKS

Antwort

1

Sie überschreiben Ihre Variable in jeder Iteration der Schleife. Sie müssen c eine Liste machen und dann hängen Sie es:

from shapely.geometry import Point 
c = [] 
for i in myCoordinates: 
    c.append([Point(i[0], i[1])]) 

print c 

Oder Sie können mit einer Liste Verständnis alles in einer Zeile tun:

c = [Point(coord[0], coord[1]) for coord in myCoordinates] 
+0

aaaaah. Vielen Dank! – Stophface

+0

Ihr Listenverständnis läuft über 'coord', verwendet aber' i';) – AKS

+0

@AKS Fest, Prost –

1

Nach würden Sie drei Punkte:

c = [Point(i[0], i[1]) for i in myCoords] 

Es folgt die gleiche Liste Verständnis als circles:

circles = [Point(random.random(), random.random()).buffer(random.random() * 0.1) for i in range(3)] 

Was Sie wurden früher zu tun ist, um den Punkt zu einer Variablen c so dass am Ende der for-Schleife zuweisen, gibt es nur einen Punkt in einer Liste:

for i in myCoordinates: 
    c = [Point(i[0], i[1])] # here c is overwritten in each iteration