Python, shapely library: возможно ли сделать аффинную операцию над многоугольником формы?


11

Я пытаюсь создать повернутый прямоугольник в координатах широта / долгота.

В принципе, у меня есть координаты центра и угол поворота вокруг центра.

Можно ли сделать с помощью, shapely или gdal, или что-то еще?

Ответы:


11

Shapely в affinityмодуль поддерживает аффинные преобразования по любой геометрии, например:

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

К сожалению, вращение в (lat, lon) не выполняется с аффинным преобразованием. Вы должны либо проецировать данные и вращать проецируемые координаты, либо выполнять сферическое вращение.
whuber

1
Ах да, я пропустил (лат, долг) часть вопроса. Я никогда не видел функцию аффинного преобразования, созданную для географических входов, поэтому предоставленные вами советы очень важны.
Майк Т

Начиная с версии 1.2.17 в Shapely были аффинные преобразования, хотя они еще не задокументированы - github.com/Toblerity/Shapely/blob/master/shapely/affinity.py
Alex L

Также смотрите блог автора: sgillies.net/blog/1168/shapely-1-2-17
Alex L

1
Тип @AlexL help(shapely.affinity). На самом деле я почти закончил подготовку обновления модуля вручную.
Майк Т

2

Sextante имеет инструмент, который может работать. Он называется «Преобразование» в разделе «Инструменты для векторных слоев». Чтобы запустить команду, определите угол, опорную точку, масштабный коэффициент и перевод. Sextante - это расширение для gvsig, openjump, udig и других. Он также запускается из командной строки.


2

Я не вижу никаких возможностей в Python или Shapely, чтобы сделать это, но вы можете сделать это с помощью JTS (Java Topology Suite) http://tsusiatsoftware.net/jts/main.html (GEOS, библиотека, используемая Shapely, является портом у JTS но у JTS больше функций)

Вы можете скачать программное обеспечение здесь http://sourceforge.net/projects/jts-topo-suite/ и запустить testbuilder.sh или testbuilder.bat в зависимости от вашей ОС, чтобы поиграть для обнаружения. После того, как вы поняли основы, вам придется делать то же самое без графического интерфейса, но только с программированием на Java.

http://geoscript.org/ может помочь вам сделать клей между кодом Python и Java (потому что одна реализация использует Jython)



Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.