Python, foremna biblioteka: czy możliwe jest wykonanie operacji afinicznej na wielokącie kształtu?

11

Próbuję utworzyć obrócony prostokąt we współrzędnych lat / lon.

Zasadniczo mam współrzędne środka i kąt obrotu wokół środka.

Czy można to zrobić za pomocą, foremnego lub gdal, czy czegoś innego?

Ołeksandr
źródło

Odpowiedzi:

11

affinityModuł Shapely obsługuje transformacje afiniczne w dowolnej geometrii, na przykład:

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.
źródło
Niestety, obrót w (lat, lon) nie jest wykonywany z transformacją afiniczną. Musisz albo rzutować dane i obrócić rzutowane współrzędne, albo wykonać obrót sferyczny.
whuber
1
No tak, tęskniłem za (łac., Lon) częścią pytania. Nigdy nie widziałem funkcji transformacji afinicznej zbudowanej dla danych geograficznych, więc podane wskazówki są niezbędne.
Mike T
Od wersji 1.2.17 Shapely ma transformacje afiniczne, chociaż nie zostały jeszcze udokumentowane - github.com/Toblerity/Shapely/blob/master/shapely/affinity.py
Alex L
Zobacz także blog autora: sgillies.net/blog/1168/shapely-1-2-17
Alex L
1
@AlexL type help(shapely.affinity). Właściwie już prawie skończyłem przygotowywać ręczną aktualizację modułu.
Mike T
2

Sextante ma narzędzie, które może działać. Nazywa się „Przekształć” w „Narzędziach warstw wektorowych”. Aby uruchomić polecenie, zdefiniuj kąt, punkt kontrolny, współczynnik skali i translację. Sextante to rozszerzenie gvsig, openjump, udig, innych. Działa również z wiersza polecenia.

Klewis
źródło
2

Nie widzę żadnych funkcji w Pythonie ani Shapely, aby to zrobić, ale możesz to zrobić za pomocą JTS (Java Topology Suite) http://tsusiatsoftware.net/jts/main.html (GEOS, biblioteka używana przez Shapely jest portem JTS, ale JTS ma więcej funkcji)

Możesz pobrać program tutaj http://sourceforge.net/projects/jts-topo-suite/ i uruchomić testbuilder.sh lub testbuilder.bat w zależności od systemu operacyjnego, aby zagrać w jego odkrycie. Po zrozumieniu podstaw musisz zrobić to samo bez GUI, ale tylko z programowaniem w Javie.

http://geoscript.org/ może pomóc ci zrobić klej pomiędzy kodem Pythona a java (ponieważ jedna implementacja używa Jython)

ThomasG77
źródło
2

Trawa może to zrobić za pomocą v.transform .

lagerratrobe
źródło