Я хотел бы повернуть набор векторных точек в QGIS на произвольное количество градусов вокруг центральной точки (или произвольной точки).
Это похоже на недавний вопрос о создании регулярной сетки ; там было предложено использовать инструмент «Аффинная трансформация» (который, я полагаю, имел в виду плагин), чтобы вращать или сдвигать сетку точек на произвольный угол или расстояние. Я подозреваю, что не понимаю, как это работает, и не смог заставить его работать.
Я создаю регулярную сетку точек в QGIS и гарантирую, что зона UTM установлена правильно как для слоя, так и для проекта, включаю редактирование для слоя, затем открываю диалоговое окно плагина (qgsAffine):
Я выбираю «весь слой» и затем, желая повернуть все поле точек на 15 °, помещаю 15 в оба поля «вращения» (которые могут быть там, где что-то идет не так). Результатом операции является вращение точек где-то вне планеты!
Это правильный инструмент для работы? Я хотел бы повернуть набор точек относительно их общего центра, в идеале.
Обновление : qgsAffine - просто мысль; если мы сможем сделать это в любом инструменте QGIS, я буду счастлив!
Обновление 2 : qgsAffine можно использовать, если вы знаете правильные номера для подключения (см. Ответ ниже, спасибо, Майк!). Электронная таблица / калькулятор работает нормально, или вот функция R, чтобы получить числа напрямую:
## Compute correct affine numbers for qgsAffine plugin
affine <- function(originX, originY, rotAngle) {
A <- rotAngle * pi / 180
scaleX <- scaleY <- cos(A)
rotX <- sin(A)
rotY <- -sin(A)
transX <- originX - cos(A) * originX + sin(A) * originY
transY <- originY - sin(A) * originX - cos(A) * originY
aff <- data.frame(scaleX, scaleY, rotX, rotY, transX, transY)
return(aff)
}
Итак, чтобы повернуть сетку точек в северной части Уганды (UTM 36N), affine(578988, 419210, 30)
получим:
scaleX scaleY rotX rotY transX transY
1 0.8660254 0.8660254 0.5 -0.5 287174.7 -233330.5
... который, введенный в диалоге qgsAffine, корректно поворачивает точки.
источник
Ответы:
Вы можете сделать это в PostGIS, используя ST_Affine . Функциональность для поворота вокруг произвольной точки была добавлена в ST_Rotate для PostGIS 2.0.
Если у вас есть более ранняя версия (например, PostGIS 1.5 или даже более ранняя), вы можете добавить эти функции:
Посмотрите примеры в ST_Rotate, чтобы получить представление о том, как использовать его для поворота геометрии вокруг точки x , y , включая центроид (общий центр).
Поскольку нам всем нравится математика, матрица преобразования из вышеперечисленных функций представляется в виде:
Где θ - вращение против часовой стрелки вокруг начала координат, x0 - восток / долгота исходной точки, а y0 - север / широта. Эта математика может быть адаптирована к любому инструменту аффинного преобразования.
Чтобы использовать инструмент qgsAffine, вам нужно понять, куда попадают значения матрицы. Хороший шаблон электронной таблицы также необходим для выполнения предварительных расчетов. Диалог qgsAffine выглядит примерно так:
где:
Например, если вы хотите повернуть многоугольник на 30 ° по часовой стрелке примерно на 42 ° S, 174 ° E, введите свои данные в таблицу:
Затем скопируйте / вставьте результаты из электронной таблицы в правое поле. Используя порядок табуляции в диалоговом окне:
Тот же пример из PostGIS будет выглядеть примерно так:
источник
Я никогда не пытался вращать векторные слои, используя qgsAffine, и я думаю, что я не одинок. Этот вопрос недавно возник на форуме QGIS, и было найдено решение с использованием (бесплатного) OpenJump. Посмотрите на эту ветку (ближе к концу):
http://forum.qgis.org/viewtopic.php?f=2&t=10126&sid=28473d53d244a4cd2a6f91887811ef02
Конечно, вы также можете использовать этот инструмент просто для ротации ваших данных.
источник