Python, biblioteca bien formada: ¿es posible hacer una operación afín en un polígono de formas?

11

Estoy tratando de crear un rectángulo girado en coordenadas lat / lon.

Básicamente, tengo las coordenadas del centro y el ángulo de rotación alrededor del centro.

¿Es posible hacer uso, bien proporcionado o gdal, o algo más?

Oleksandr
fuente

Respuestas:

11

El affinitymódulo de Shapely admite transformaciones afines en cualquier geometría, por ejemplo:

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))
Mike T
fuente
Desafortunadamente, una rotación en (lat, lon) no se realiza con una transformación afín. Debe proyectar los datos y rotar las coordenadas proyectadas o realizar una rotación esférica.
whuber
1
Ah, claro, me perdí la parte (lat, lon) de la pregunta. Nunca he visto una función de transformación afín creada para entradas geográficas, por lo que los consejos que proporcionó son esenciales.
Mike T
Desde v1.2.17, Shapely ha tenido transformaciones afines, aunque todavía no están documentados - github.com/Toblerity/Shapely/blob/master/shapely/affinity.py
Alex L
También vea el blog del autor: sgillies.net/blog/1168/shapely-1-2-17
Alex L
1
Tipo @AlexL help(shapely.affinity). En realidad, casi he terminado de preparar la actualización manual para el módulo.
Mike T
2

Sextante tiene una herramienta que podría funcionar. Se llama Transformar, debajo de "Herramientas para capas vectoriales". Para ejecutar el comando, defina el ángulo, el punto de anclaje, el factor de escala y la traslación. Sextante es una extensión de gvsig, openjump, udig, otros. También se ejecuta desde la línea de comandos.

klewis
fuente
2

No veo ninguna característica en Python o Shapely para hacerlo, pero puede hacerlo con JTS (Java Topology Suite) http://tsusiatsoftware.net/jts/main.html (GEOS, la biblioteca utilizada por Shapely es un puerto de JTS pero JTS tiene más funciones)

Puede descargar el software aquí http://sourceforge.net/projects/jts-topo-suite/ y ejecutar testbuilder.sh o testbuilder.bat según el sistema operativo que juegue para descubrir. Una vez que haya entendido, lo básico tendrá que hacer lo mismo sin GUI pero solo con programación Java.

http://geoscript.org/ puede ayudarlo a hacer el pegamento entre el código de Python y Java (porque una implementación usa Jython)

ThomasG77
fuente