Автоматический поворот карты в композиторе карт QGIS

10

Дело в том, что мне интересно, чтобы в компоновщике карт можно было автоматически рассчитывать поворот карты. У меня есть много карт в одном файле с их собственными параметрами проекции, и я хотел бы определить поворот карты в компоновщике карт на основе формулы проекции (или что-то еще?)

например, расположение одной конкретной карты в проекте:

введите описание изображения здесь

Проекция

введите описание изображения здесь

В карте композитора карта выглядит как граница

введите описание изображения здесь

И с выбранным углом поворота для карты с их параметрами проекции:

введите описание изображения здесь

Угол поворота карты различен для каждой карты в зависимости от ее местоположения и параметров проекции.

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

Джейн
источник
1
Вы хотите повернуть объект так, чтобы он был параллелен краям фрейма карты? Не могли бы вы рассчитать азимут одной из сторон объекта и использовать его для его поворота? Если бы это была прямая линия, то есть вращение = градусы (atan (abs ((y1-y2) / (x1-x2)))) даст вам угол в градусах. Тогда поворот на 90 градусов выровняет его с рамкой карты.
mixedbredie
2
Вы используете атлас? Если вы создадите слой покрытия с помощью инструмента «Ориентированный минимальный ограничивающий прямоугольник», то этот слой будет содержать атрибут поворота, который можно привязать к повороту элемента карты с помощью свойств, определенных данными.
ndawson
@mixedbredie, да, я хочу повернуть карту так, чтобы границы карты были параллельны рамке карты на холсте карты. Я пытался вычислить азимут, но проблема в том, что мой слой с картами является многоугольным, и нет никаких сведений о том, что первая точка - это верхняя левая вершина или другая определенная вершина (правая нижняя точка и т. Д.). Итак, угол почти каждый раз не удовлетворяет
Джейн
Решение, предложенное @ndawson, приносит удовольствие. Используйте новый ограничивающий слой в качестве скрытого слоя покрытия, и все будет выровнено.
mixedbredie
1
Откройте панель инструментов обработки (Ctrl + Alt + T) и выполните поиск «ориентированный» - вы увидите инструмент под геоалгоритмами QGIS> Основные инструменты вектора.
mixedbredie

Ответы:

3

Ниже решение, найденное @ndawson в комментариях к вопросу. Пожалуйста, не стесняйтесь комментировать и улучшать этот ответ.

Запустите из панели инструментов обработки инструмент Ориентированный минимальный ограничивающий прямоугольник на сетке конверта карты, которую вы уже используете.

Ориентированный ограничивающий инструмент

Это создаст слой, который должен быть полностью идентичен вашему исходному слою. В таблице атрибутов вы найдете поле УГОЛ

Поля OBB

Теперь вы должны иметь возможность использовать это поле ANGLE в компоновщике, чтобы заполнить данные, определенные для вращения:

Данные определены угол

Похоже, проблема заключается в том, что угол не всегда прост в использовании, поскольку он зависит от способа создания исходных многоугольников. Я провел несколько тестов, и это зависит от того, каким образом вы нарисовали исходные полигоны. Возможно, вам придется настроить значения атрибутов поля ANGLe соответственно:

(красный - оригинальные полигоны, черный - полигоны инструмента OMBB). Я оцифровал для примера аналогичные полигоны двумя разными способами (направо или налево)

Пример OMBB

Чтобы вернуть значение угла к исходному слою, вы можете использовать операцию объединения пространственного местоположения.

gisnside
источник
Спасибо огромное! Я внимательно прочитал ваш подробный ответ! Но проблема кажется более сложной. У меня есть слой со всеми картами и их проекциями в таблице атрибутов для каждой карты. Начальный слой с набором карт в WGS84, но при подготовке карты я установил проекцию на холсте карты, взятую из таблицы атрибутов (которая отличается для каждой карты), и мне нужно значение поворота карты в ЭТОМ ПРОЕКЦИИ. Итак, мне нужно заново сохранить каждую карту в их собственной проекции, а затем запустить OMBB для многоугольника. Я проверил некоторые карты, но значение угла поворота неоправданно отличается от рассчитанного с помощью OMBB
Jane
Было бы здорово рассчитать значение угла поворота в
Джейн,
Нелегко ! Я не понимаю, как вы могли бы сделать это простым способом, особенно для угла поворота. Есть способ проецировать данные с помощью функции «transform», но я сомневаюсь, что это будет работать для чего-то еще, кроме координат. (Возвращает геометрию, преобразованную из исходного CRS в целевой CRS. Синтаксис: transform (geom, source_auth_id, dest_auth_id) - Пример: geom_to_wkt (transform ($ geometry, 'EPSG: 2154', 'EPSG: 4326'))
gisnside