Python, libreria formosa: è possibile eseguire un'operazione affine sul poligono forma?


11

Sto cercando di creare un rettangolo ruotato in coordinate lat / lon.

Fondamentalmente, ho le coordinate del centro e l'angolo di rotazione attorno al centro.

È possibile fare usando, ben fatto o gdal, o qualcos'altro?

Risposte:


11

Il affinitymodulo di Shapely supporta trasformazioni affine su qualsiasi geometria, ad esempio:

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))

Sfortunatamente, una rotazione in (lat, lon) non viene eseguita con una trasformazione affine. Devi proiettare i dati e ruotare le coordinate proiettate oppure eseguire una rotazione sferica.
whuber

1
Oh giusto, ho perso la parte (lat, lon) della domanda. Non ho mai visto una funzione di trasformazione affine creata per input geografici, quindi i suggerimenti che hai fornito sono essenziali.
Mike T,

Dalla v1.2.17, Shapely ha avuto trasformazioni affine, anche se non sono ancora documentate - github.com/Toblerity/Shapely/blob/master/shapely/affinity.py
Alex L

Vedi anche il blog dell'autore: sgillies.net/blog/1168/shapely-1-2-17
Alex L

1
Tipo @AlexL help(shapely.affinity). In realtà ho quasi finito di preparare l'aggiornamento manuale per il modulo.
Mike T,

2

Sextante ha uno strumento che potrebbe funzionare. Si chiama Transform, sotto "Strumenti per livelli Vector". Per eseguire il comando, definire l'angolo, il punto di ancoraggio, il fattore di scala e la traslazione. Sextante è un'estensione di gvsig, openjump, udig, altri. Funziona anche dalla riga di comando.


2

Non vedo alcuna funzionalità in Python o Shapely per farlo, ma puoi farlo con JTS (Java Topology Suite) http://tsusiatsoftware.net/jts/main.html (GEOS, la lib usata da Shapely è una porta di JTS ma JTS ha più funzioni)

Puoi scaricare il software qui http://sourceforge.net/projects/jts-topo-suite/ e avviare testbuilder.sh o testbuilder.bat a seconda del tuo sistema operativo da giocare per la scoperta. Dopo aver capito, le basi dovrete fare lo stesso senza la GUI ma solo con la programmazione Java.

http://geoscript.org/ può aiutarti a creare la colla tra codice Python e Java (perché un'implementazione utilizza Jython)



Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.