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 и других. Он также запускается из командной строки.

klewis
источник
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)

ThomasG77
источник
2

Вы можете использовать привязки gdal python для аффинных преобразований http://www.gdal.org/ogr/osr_tutorial.html

Так как он построен поверх proj / geos / gdal, вы можете делать то же самое, что и в shapely + more

Раги Язер Бурхум
источник