Biblioteca Python, bem torneada: é possível fazer uma operação afim no polígono da forma?

11

Estou tentando criar um retângulo girado em coordenadas lat / lon.

Basicamente, tenho as coordenadas do centro e o ângulo de rotação ao redor do centro.

É possível usar usando, bem torneado ou gdal, ou algo mais?

Oleksandr
fonte

Respostas:

11

O affinitymódulo Shapely suporta transformações afins em qualquer geometria, por exemplo:

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
fonte
Infelizmente, uma rotação em (lat, lon) não é realizada com uma transformação afim. Você precisa projetar os dados e girar as coordenadas projetadas ou executar uma rotação esférica.
whuber
1
Ah, claro, eu perdi a parte (lat, lon) da pergunta. Nunca vi uma função de transformação afim criada para entradas geográficas; portanto, as dicas fornecidas são essenciais.
Mike T
Desde v1.2.17, Shapely teve transformações afins, embora eles não estão documentadas ainda - github.com/Toblerity/Shapely/blob/master/shapely/affinity.py
Alex L
Veja também o blog do autor: sgillies.net/blog/1168/shapely-1-2-17
Alex L
1
@AlexL type help(shapely.affinity). Na verdade, estou quase terminando de preparar a atualização manual para o módulo.
Mike T
2

O Sextante possui uma ferramenta que pode funcionar. É chamado de transformação, nas "Ferramentas para camadas vetoriais". Para executar o comando, defina o ângulo, ponto de ancoragem, fator de escala e translação. Sextante é uma extensão para gvsig, openjump, udig, outros. Também é executado a partir da linha de comando.

klewis
fonte
2

Não vejo nenhum recurso em Python ou Shapely para fazer isso, mas você pode fazer isso com o JTS (Java Topology Suite) http://tsusiatsoftware.net/jts/main.html (GEOS, a lib usada por Shapely é uma porta do JTS, mas o JTS tem mais funções)

Você pode baixar o software aqui http://sourceforge.net/projects/jts-topo-suite/ e iniciar o testbuilder.sh ou testbuilder.bat, dependendo do seu sistema operacional para descobrir. Depois de entender, você precisará fazer o mesmo sem a GUI, mas apenas com a programação Java.

http://geoscript.org/ pode ajudar você a criar a cola entre o código python e o java (porque uma implementação usa o Jython)

ThomasG77
fonte
2

A grama pode fazer isso usando v.transform .

lagerratrobe
fonte
2

Você pode usar as ligações gdal python para fazer transformações afins http://www.gdal.org/ogr/osr_tutorial.html

Uma vez que é construído sobre proj / geos / gdal, você pode fazer as mesmas coisas que em formas bem torneadas + more

Ragi Yaser Burhum
fonte