Плагин поворачивает полигоны параллельно линиям линейного слоя.
Плагин создан по итогам темы: "Требуются идеи для создания несложного модуля QGIS".
Цель: применить навыки программирования на Python, сделать полезный рабочий плагин за минимальное время.
Добавление плагина в QGIS
В меню Модули\Управление модулями\Параметры нужно поставить крестик напротив "Разрешить установку экспериментальных модулей". Затем найти модуль в общем списке и добавить в QGIS.
Диалоговое окно
- Select line layer - выбрать линейный слой
- Select polygon layer - выбрать полигональный слой
- Rotate only selected polygons - вращать только выделенные полигоны
- Distance from line - расстояние от линии до центроида полигона, в пределах которого будут обрабатываться полигоны
- Angle value - максимальное значение угла отклонения полигона относительно линии
- Rotate by longest edge if both angles between polygon edges and line segment <= 'Angle value' - если оба угла между ребрами полигона и отрезком линии <= значения, указанного в 'Angle value', то вращать по длинному ребру
Плагин создает пространственный индекс для объектов линейного слоя.
В пределах расстояния, указанного в поле "Distance from line", для каждой линии слоя, выбранного в «Select line layer», плагин находит ближайший полигон слоя, выбранного в «Select polygon layer».
К узлу примыкают два ребра полигона. Если угол между ребром и ближайшим отрезком линии не больше значения, указанного в поле «Angle value», то полигон поворачивается относительно центроида так, что ребро становится параллельным отрезку линии.
В случае, если оба угла между ребрами и отрезком линии меньше «Angle value», то для разворота выбирается то ребро, которое образует меньший угол, если в настройках не отмечено Rotate by longest edge if both angles between polygon edges and line segment <= 'Angle value' .
Что в планах?
- Добавить возможность сохранения полигонального слоя отдельным файлом. Сделано
- Оптимизировать код. Сделано
- Пока писал пояснение, понял, что не указал для обработки вариант, когда азимут отрезка линии и\или ребра полигона равен нулю. Нужно добавить. Исправлено
- Добавить мультиязычность. Как минимум, сделать меню диалогового окна на русском, описание плагина на русском и английском. Сделано
- Сделать все комментарии кода на английском и добавить новые. Сделано
- Нарисовать иконку плагина. Сделано
Тестирование
Прошу протестировать плагин и отписаться здесь или на гитхабе: https://github.com/Elfpkck/polygons_par ... ine/issues
Также прошу учесть, что код начал писать спустя 2 недели курсов по Python. До этого навыков программирования не было.