Python, formschöne Bibliothek: Ist es möglich, eine affine Operation für ein Formpolygon durchzuführen?


10

Ich versuche, ein gedrehtes Rechteck in Lat / Lon-Koordinaten zu erstellen.

Grundsätzlich habe ich die Koordinaten des Zentrums und des Drehwinkels um das Zentrum.

Ist es möglich, formschön oder gdal oder etwas anderes zu verwenden?

Antworten:


10

Das Shapely- affinityModul unterstützt affine Transformationen für jede Geometrie, zum Beispiel:

from shapely import affinity
from shapely.geometry import LineString

# Example geometry
line = LineString([(1, 3), (1, 1), (4, 1)])

# Rotate 30 degrees CCW from origin at the center of bbox
line_rot_center = affinity.rotate(line, 30, 'center')

# Rotate from origin at (1, 1)
line_rot_11 = affinity.rotate(line, 30, (1, 1))

Leider wird eine Rotation in (lat, lon) nicht mit einer affinen Transformation durchgeführt. Sie müssen entweder die Daten projizieren und die projizierten Koordinaten drehen oder eine sphärische Drehung durchführen.
whuber

1
Oh, richtig, ich habe den (lat, lon) Teil der Frage verpasst. Ich habe noch nie eine affine Transformationsfunktion gesehen, die für geografische Eingaben erstellt wurde. Daher sind die von Ihnen angegebenen Tipps von entscheidender Bedeutung.
Mike T

Seit v1.2.17 hat Shapely affine Transformationen, obwohl diese noch nicht dokumentiert sind - github.com/Toblerity/Shapely/blob/master/shapely/affinity.py
Alex L

Siehe auch den Blog des Autors: sgillies.net/blog/1168/shapely-1-2-17
Alex L

1
@ AlexL-Typ help(shapely.affinity). Eigentlich bin ich fast fertig mit der Vorbereitung des manuellen Updates für das Modul.
Mike T

2

Sextante hat ein Tool, das funktionieren könnte. Es heißt Transformieren unter "Werkzeuge für Vektorebenen". Um den Befehl auszuführen, definieren Sie den Winkel, den Ankerpunkt, den Skalierungsfaktor und die Verschiebung. Sextante ist eine Erweiterung für gvsig, openjump, udig, andere. Es wird auch über die Befehlszeile ausgeführt.


2

Ich sehe keine Funktionen in Python oder Shapely, aber Sie können dies mit JTS (Java Topology Suite) http://tsusiatsoftware.net/jts/main.html (GEOS, die von Shapely verwendete Bibliothek ist ein Port ) tun von JTS aber JTS haben mehr Funktionen)

Sie können das Soft hier herunterladen http://sourceforge.net/projects/jts-topo-suite/ und testbuilder.sh oder testbuilder.bat starten, je nach Betriebssystem, um es zu entdecken. Nachdem Sie die Grundlagen verstanden haben, müssen Sie dasselbe ohne GUI tun, jedoch nur mit Java-Programmierung.

http://geoscript.org/ kann Ihnen helfen, den Klebstoff zwischen Python-Code und Java herzustellen (da eine Implementierung Jython verwendet).



Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.