Вращение объектов в ArcGIS for Desktop с использованием ArcPy? [закрыто]

10

У меня есть серия полигонов, которые я хочу повернуть.

Каждый многоугольник имеет угол поворота и опорную точку (координату XY), сохраненные в качестве значений поля.

Как это происходит, все точки привязки находятся на вершине многоугольника.

Каков наилучший способ сделать это, используя ArcGIS for Desktop и ArcPy?

Я знаю, что мы можем вращать их в режиме редактирования, но я не хочу делать их все вручную, поскольку они все разные.

Я бы предпочел ответ Python, чтобы я мог автоматизировать его и встроить в свой рабочий процесс.

dklassen
источник
Это не то, что я сделал, но вы, похоже, столкнулись с проблемой, аналогичной той, которая обсуждалась на gis.stackexchange.com/questions/13383/…
PolyGeo
Вы можете сделать это с ArcObjects. Будет ли программное решение приемлемым?
Якуб Сисак GeoGraphics
Ваши объекты находятся в географических или проектных координатах?
blah238
Якуб - да, было бы предпочтительнее программное решение. Blah238 - прогнозируемые координаты (NAD 83 UTM Zone 10)
dklassen
1
В скрипте Python для вычисления повернутой координаты Y требуется знак плюс (сложение) вместо знака минус (вычитание): y_transprime = Sin (t) * x_trans + Cos (t) * y_trans

Ответы:

10

Предполагая, что вы используете проекционную систему координат ... (становится намного сложнее, если вы не)

Учитывая точку поворота (X, Y) и угол поворота t, вам нужно последовательно повернуть каждую точку в многоугольнике. Предполагая, что многоугольник построен из точек в наборе, таких что set = [(x0, y0), (x1, y1), (x2, y2) ...]

Вам необходимо повернуть каждую точку в наборе, последовательно, чтобы сформировать множество '= [(x0', y0 '), (x1', y1 '), (x2', y2 ') ...]

Чтобы повернуть, сначала вы должны преобразовать систему координат в начало координат, переместив точку вращения в (0,0). (x, y) - точка, которую нужно повернуть.

x_trans = x - X
y_trans = y - Y
x_transprime = Cos(t) * x_trans - Sin(t) * y_trans
y_transprime = Sin(t) * x_trans + Cos(t) * y_trans
x_prime = x_transprime + X
y_prime = y_transprime + Y

Это должно быть довольно просто, чтобы перевести на сценарий Python.

blord-Castillo
источник
Для получения дополнительной информации о том, как это сделать, есть еще один вопрос и ответ, который может быть полезен, под названием « Как вращать многоугольник вокруг точки привязки с помощью скрипта Python? ,
PolyGeo
Спасибо @ user23492 за то, что отметили неправильный знак. Изменения сделаны (два года спустя)
blord-castillo
1

Вот обсуждение на форумах Esri, которое может быть решением для вас. Ищите ответ Esri. Он включает в себя преобразование полигонов в растры, использование инструмента поворота растра и обратное преобразование в полигоны. Тем не менее, может возникнуть некоторая обеспокоенность по поводу того, что границы многоугольников будут испорчены при переходе назад и вперед между растром / вектором.

Хорошей новостью является то, что все это можно сделать в Python без вызова ArcObjects. И вы должны быть в состоянии использовать SearchCursor для захвата ваших углов поворота и точек привязки из таблицы атрибутов.

Во всяком случае, просто возможная альтернатива.

Baltok
источник