Я хотел бы создать полигоны вдоль линии, чтобы использовать их для AtlasCreator на следующем этапе.
ArcMap имеет инструмент под названием Strip Map Index Features .
С помощью этого инструмента я могу выбрать высоту и ширину моих полигонов (скажем, 8 км х 4 км) и автоматически производить / вращать их вдоль линии.
Один из сгенерированных атрибутов каждого многоугольника - это угол поворота, который мне нужен, чтобы потом повернуть стрелки на север в Генераторе Атласа.
У кого-нибудь есть идеи, как решить эту задачу в QGIS / с pyQGIS? Алгоритмы Grass- или SAGA-алгоритмы или модель набора инструментов-инструментов, которые можно использовать внутри собственного плагина, тоже подойдут;) Edit1: мне нужны не только экстенты печати, но и сами полигоны, так как я хочу напечатать карту с все полигоны / экстенты как своего рода обзорная карта.
Edit2: я предлагаю щедрость, поскольку я все еще ищу решение PyQGIS, которое можно использовать в плагине QGIS без необходимости установки программного обеспечения помимо QGIS (без RDBMS, такой как PostGIS / Oracle)
Ответы:
Интересный вопрос! Это то, что я хотел попробовать сам, так что попробуй.
Вы можете сделать это в PostGRES / POSTGIS с помощью функции, которая генерирует набор полигонов.
В моем случае у меня есть таблица с одной функцией (MULTILINESTRING), которая представляет железнодорожную линию. Нужно использовать CRS в метрах, я использую osgb (27700). Я сделал "страницы" 4 км х 2 км.
Здесь вы можете увидеть результат ... зеленая полоса - это дорожная сеть, обрезанная до 1-километрового буфера вокруг железной дороги, что хорошо соответствует высоте многоугольников.
Вот функция ...
Используя эту функцию
Вот пример; Страницы 4 x 2 км, epsg: 27700 и перекрытие 10%
После запуска вы можете экспортировать из PgAdminIII в CSV-файл. Вы можете импортировать это в QGIS, но вам может потребоваться установить CRS вручную для слоя - QGIS не использует SRID в EWKT, чтобы установить CRS слоя для вас: /
Добавление атрибута подшипника
Это, вероятно, легче сделать в postgis, это можно сделать в выражениях QGIS, но вам нужно написать некоторый код. Что-то вроде этого...
Предостережения
Он немного взломан, и у него была возможность протестировать только один набор данных.
Не уверен на 100%, какие две вершины вам нужно выбрать при обновлении атрибута подшипника
query
. Возможно, придется поэкспериментировать.Должен признаться, я понятия не имею, почему мне нужно сделать такую сложную формулу, чтобы повернуть многоугольник, чтобы соответствовать текущему отрезку. Я думал, что мог бы использовать вывод из ST_Azimuth () в ST_Rotate (), но, похоже, нет.
источник
Есть разные решения. И это может работать с простой ломаной линией и несколькими выбранными объектами
блок-схема:
параметры
цикл на узлах заказов
создать первую точку в качестве якоря
для каждой вершины добавьте ее в dict x, y, id и вычислите вектор
Вы можете изменить это предложение, если оно не совсем понятно или прокомментировано.
источник
Стивен Кейс отвечает в Pyqgis. Просто выберите линии в вашем слое перед запуском скрипта. Скрипт не поддерживает линейное объединение, поэтому он не может работать на слое с множеством строк
источник
Два ответа (на момент публикации) гениальны и хорошо объяснены. Однако для этого также существует ОЧЕНЬ простое, но эффективное решение (при условии, что вы примете все свои карты, выровненные по северу традиционным способом, а не в случайном направлении на север по реке). Если вы хотите повороты, это возможно, но немного сложнее (см. Внизу).
Сначала взгляните на мой пост здесь . Это дает вам инструкции по созданию покрытий карты для Atlas. Метод, который вы хотите адаптировать - это «Рабочий процесс 2» в руководстве. Разделите ваш линейный объект по вершинам или длине и буферизируйте объекты по любому количеству Величина, по которой вы буферизуете, частично будет определять перекрытие (но см. Ниже), но, что более важно, оно создает элемент с областью. Вы можете использовать любое количество плагинов для разделения строк, но GRASS v.split.length и v.split.vert являются хорошими вариантами (доступны в Processing Toolbox).
Включив Генерацию атласа в Map Composer и выбрав буферный слой, вернитесь на вкладку элементов и выберите объект карты. Отметьте «Контролируемый Atlas», и в вашем случае я бы выбрал функцию Margin вокруг. Это будет контролировать ваше перекрытие между картами (в качестве альтернативы вы можете предпочесть фиксированный масштаб).
Вы можете предварительно просмотреть свой Atlas с помощью кнопки Preview Atlas на верхней панели инструментов композитора и посмотреть, сколько страниц он будет создавать. Обратите внимание, что вы можете выбрать экспорт всех страниц в один PDF или в виде отдельных файлов.
Чтобы заставить карту вращаться вдоль линии, в свойствах элемента «Компоновщик карты» имеется поле поворота. Вам нужно будет установить выражение (используйте маленькую кнопку справа от поля поворота). Выберите переменную в качестве вашего варианта и затем Изменить. Появится конструктор выражений, и там вы сможете получить доступ к геометрии или полям объектов атласа. Затем вы можете построить экспресс для поворота карты в соответствии с поворотом объектов (вы можете рассчитать направление, используя начальную и конечную точки каждого отрезка и немного триггера). Повторите тот же процесс, чтобы повернуть стрелку севера (используя то же выражение или предварительно рассчитанную переменную).
источник