2016-09-04 4 views
1

Wenn ich ein Polygon mit dem Shapely erzeuge, schiebe ich 4 Scheitelpunkte in die Polygonfunktion. Die Ausgabe sollte ein Tupel mit 5 Elementen sein (der erste Scheitelpunkt wird verdoppelt und als letzter beschrieben)Python: Polygon schließt nicht (formschön

Es scheint jedoch, dass die Reihenfolge der Eingabe-Scheitelpunkte, die ich an die Funktion übergebe, Auswirkungen auf das Ergebnis hat: Manchmal wird das Polygon mit 5 Scheitelpunkten beschrieben und manchmal mit 4 - es ist kein geschlossenes Polygon (oder anders gesagt - es ist überhaupt kein Polygon) Es muss ein Fehler sein

Im folgenden Beispiel unterscheidet sich poly1 und poly 2 nur durch die Reihenfolge der Scheitelpunkte Ich vergehe Die Richtung ist genau das sam obwohl e:

from shapely.geometry import Polygon 

print ('poly1 = ', Polygon([(620, 420, 500), (620, 420, 0), (620, 40, 0),(620, 40, 500)])) 
print ('poly2 = ',Polygon([(620, 40, 500), (620, 420, 500), (620, 420, 0), (620, 40, 0)])) 

Allerdings ist das Ergebnis anders - man ist ein geschlossenes Polygon, das andere offen ist. Der Typ von beiden, BTW, ist immer noch ein formschönes Polygon.

poly1 = POLYGON Z ((620 420 500, 620 420 0, 620 40 0, 620 40 500, 620 420 500)) 
poly2 = POLYGON Z ((620 40 500, 620 420 500, 620 420 0, 620 40 0)) 

Irgendeine Lösung?

+0

Ich sehe in den Dokumenten nichts über die '__str__' /' __repr__' Darstellung eines Polygons. Was ist die Ausgabe von 'polygon.exterior.coords()'? –

+0

Es gibt mir einen TypeError: 'CoordinateSequence' -Objekt ist nicht aufrufbar – Yair

+0

Sorry, ich meine 'polygon.exterior.coords' ohne parens –

Antwort

1

Ich denke, es ist mit der dritten Koordinate verwandt. In der Dokumentation (shapely doc), sagt es:

A third z coordinate value may be used when constructing instances, but has no effect on geometric analysis. All operations are performed in the x-y plane.

Das bedeutet, dass formschön einfach nicht die z-Koordinate nicht verarbeitet. In Ihrem Beispiel, wenn Sie die z-Koordinate löschen, erhalten Sie:

[(620, 420), (620, 420), (620, 40), (620, 40)] 
[(620, 40), (620, 420), (620, 420), (620, 40)] 

Wenn Sie eine lineare Zeichenfolge übergeben einen Polygon, wohlgeformter Polygon Konstruktor überprüft zu bauen, wenn der letzte Punkt auf den ersten gleich ist. Wenn nicht, wird der Punkt hinzugefügt, um einen linearen Ring zu erhalten. Im zweiten Fall wird die letzte Koordinate, soweit sie wohlgeformt ist, bereits wiederholt, und es ist nicht nötig, einen anderen Punkt hinzuzufügen.