Поиск кратчайшего маршрута c помощью Road graph для QGIS: различия между версиями

Материал из GIS-Lab
Перейти к навигации Перейти к поиску
Нет описания правки
Нет описания правки
Строка 29: Строка 29:
Если значение какого-либо поля не задано, или поле отсутствует — используется значение по умолчанию, изменить которое можно в настройках расширения.
Если значение какого-либо поля не задано, или поле отсутствует — используется значение по умолчанию, изменить которое можно в настройках расширения.


Выбор начальной и конечной точек маршрута выполняется при помощи соответствующих кнопок. Выбор точек маршрута возле полей ввода. Координаты полей ввода будут отображены в полях ввода.
Выбор начальной и конечной точек маршрута выполняется при помощи соответствующих кнопок возле полей ввода. Координаты выбранных точек будут отображены в полях ввода.


Нажатие на кнопку «Calculate» запустит поиск кратчайшего маршрута с использованием критерия оптимизации, заданного выпадающим списком «Criterion». Кнопка «Export» служит для экспорта построенного маршрута в новый векторный слоя, а при помощи кнопки «Clear» выполняется очистка полей с координатами начальной и конечной точек, а также из области карты удаляются сами точки и построенный маршрут.
Нажатие на кнопку «Calculate» запустит поиск кратчайшего маршрута с использованием критерия оптимизации, заданного выпадающим списком «Criterion». Кнопка «Export» служит для экспорта построенного маршрута в новый векторный слой, а при помощи кнопки «Clear» выполняется очистка полей с координатами начальной и конечной точек, а также из области карты удаляются сами точки и построенный маршрут.


==== Настройки модуля ====
==== Настройки модуля ====
Строка 39: Строка 39:
=== Библиотека network-analysis ===
=== Библиотека network-analysis ===


Начиная с [https://github.com/qgis/Quantum-GIS/commit/ee19294562b00c6ce957945f14c1727210cffdf7 ee19294562], появилась возможность использовать функционал модуля в своих расширениях из Консоли Python QGIS или написать собственное расширение на С++/Python для QGIS.  
Начиная с [https://github.com/qgis/Quantum-GIS/commit/ee19294562b00c6ce957945f14c1727210cffdf7 ee19294562], появилась возможность использовать функционал модуля в своих расширениях, а также из Консоли Python QGIS.


Актуальная документация доступна в разделе [http://doc.qgis.org/api/group__networkanalysis.html network-analysis] документации [QGIS API http://doc.qgis.org/api/index.html]
Чтобы получить доступ к функциям библиотеки сетевого анализа необходимо импортировать модуль networkanalysis
 
  from qgis.networkanalysis import *
 
Первое, что нужно сделать — это подготовить исходные данные, т.е. преобразовать векторный слой в граф. Все дальнейшие действия будут выполняться именно с ним. За построение графа дорог отвечает так называемый Director. В настоящее время бибилотека располагает только одним директром: [http://doc.qgis.org/api/classQgsLineVectorLayerDirector.html QgsLineVectorLayerDirector], которой строит граф по линейному векторному слою.
 
В конструктор директора передается линейный векторный слой, по которому будет строиться граф, а также информация о характере движения по каждому сегменту дороги (разрешенное направление, одностороннее или двустороннее движение). Рассмотрим параметры:
 
* vl — векторный слой, по которому будет строиться граф.
* directionFieldId — индекс поля атрибутивной таблицы, которое содержит информацию о направлении движения
* directDirectionValue — значение поля, соответствующее прямому направлению движения (т.е. движению в порядке создания точек линии, от первой к последней)
* reverseDirectionValue — значение поля, соответствующее обратному направлению движения (от последней к первой)
* bothDirectionValue — значение поля, соответствующее двустроннему движению (т.е. допускается движение как от первой точки к последней, так и в обратном направлении)
* defaultDirection — направление движения по умолчанию. Будет использоваться для тех участков дорог, для которых значение поля directionFieldId не задано или не совпадает ни с одним из вышеперечисленных.
 
Например
 
  # не использовать информацию о направлении движения из атрибутов слоя, все дороги трактуются как двустронние
  director = QgsLineVectorLayerDirector( vLayer, -1, '', '', '', 3 )
 
  # информация о направлении движения находится в поле с индексом 5. Односторонние дороги с прямым направлением
  # движения имееют значение атрибута "yes", односторонние дороги с обратным направлением — "1", и соответственно
  # двусторонние ­дороги — "no". По умолчанию дороги считаются двусторонними. Такая схема подходит для использования
  # c данными OpenStreetMap
  director = QgsLineVectorLayerDirector( vLayer, 5, 'yes', '1', 'no', 3 )
 
 
 
Актуальная документацию всегда можно получить в разделе [http://doc.qgis.org/api/group__networkanalysis.html QGIS network analysis library] описания [http://doc.qgis.org/api/index.html QGIS API].

Версия от 14:12, 4 января 2012

Road graph — расширение QGIS, позволяющее осуществлять поиск кратчейшего маршрута на заданном графе дорог. Входит в состав QGIS, начиная с r15068 (0a76ab4212), автор модуля - Сергей Якушев (stopa85).

Установка

При использовании более-менее актуальной версии QGIS никаких дополнительных действий по установке модуля выполнять не нужно, так как Road graph является расширением ядра QGIS. Достаточно установить QGIS со всеми зависимостями (подробнее) и в Менеджере модулей (Модули - Управление модулями) активировать модуль Road graph.

Roadgraph-01.png

После активации модуль добавляет свою панель в левой части окна QGIS и создает вложенный элемент в меню Вектор.

Работа с расширением

Основные возможности расширения:

  • расчет маршрута, его протяженности и времени пути
  • оптимизация по критерию расстояния или времени
  • экспорт маршрута в векторный слой

В версиях QGIS 1.6, 1.7 присутствует возможность подсветки направления движения дорог (работает медленно, чаще всего используется в целях проверки настроек). Начиная с 1.8 неподдерживается.

В качестве слоя дорог можно использовать любой линейный векторный слой в формате, поддерживаемом QGIS. Две линии, имеющие общую точку считаются связанными между собой. Внимание: при редактировании слоя дорог в качестве СК проекта необходимо использовать СК слоя. Это вызвано тем, что при пересчете координат между разными СК возникают погрешности, что может приводить к появлению разрывов даже при включенном «прилипании».

В атрибутивной таблице слоя могут присутствовать и задействоваться следующие поля:

  • скорость движения по участку дороги — числовое поле
  • направление движения — любой тип, приводимый к строке. Прямое и обратное направления соответствуют односторонней дороге, оба направления — двусторонней.

Если значение какого-либо поля не задано, или поле отсутствует — используется значение по умолчанию, изменить которое можно в настройках расширения.

Выбор начальной и конечной точек маршрута выполняется при помощи соответствующих кнопок возле полей ввода. Координаты выбранных точек будут отображены в полях ввода.

Нажатие на кнопку «Calculate» запустит поиск кратчайшего маршрута с использованием критерия оптимизации, заданного выпадающим списком «Criterion». Кнопка «Export» служит для экспорта построенного маршрута в новый векторный слой, а при помощи кнопки «Clear» выполняется очистка полей с координатами начальной и конечной точек, а также из области карты удаляются сами точки и построенный маршрут.

Настройки модуля

При использовании слоя дорог, в котором присутствуют артефакты в виде небольших разрывов между вершинами полилиний, необходимо установит «топологическую толерантность». Топологическая толерантность - это расстояние между двумя соседними вершинами, при котором они интерпретируются как одна и та же вершина графа. Эта величина должна быть как можно меньше (чем меньше - тем лучше).

Библиотека network-analysis

Начиная с ee19294562, появилась возможность использовать функционал модуля в своих расширениях, а также из Консоли Python QGIS.

Чтобы получить доступ к функциям библиотеки сетевого анализа необходимо импортировать модуль networkanalysis

 from qgis.networkanalysis import *

Первое, что нужно сделать — это подготовить исходные данные, т.е. преобразовать векторный слой в граф. Все дальнейшие действия будут выполняться именно с ним. За построение графа дорог отвечает так называемый Director. В настоящее время бибилотека располагает только одним директром: QgsLineVectorLayerDirector, которой строит граф по линейному векторному слою.

В конструктор директора передается линейный векторный слой, по которому будет строиться граф, а также информация о характере движения по каждому сегменту дороги (разрешенное направление, одностороннее или двустороннее движение). Рассмотрим параметры:

  • vl — векторный слой, по которому будет строиться граф.
  • directionFieldId — индекс поля атрибутивной таблицы, которое содержит информацию о направлении движения
  • directDirectionValue — значение поля, соответствующее прямому направлению движения (т.е. движению в порядке создания точек линии, от первой к последней)
  • reverseDirectionValue — значение поля, соответствующее обратному направлению движения (от последней к первой)
  • bothDirectionValue — значение поля, соответствующее двустроннему движению (т.е. допускается движение как от первой точки к последней, так и в обратном направлении)
  • defaultDirection — направление движения по умолчанию. Будет использоваться для тех участков дорог, для которых значение поля directionFieldId не задано или не совпадает ни с одним из вышеперечисленных.

Например

 # не использовать информацию о направлении движения из атрибутов слоя, все дороги трактуются как двустронние
 director = QgsLineVectorLayerDirector( vLayer, -1, , , , 3 )
 # информация о направлении движения находится в поле с индексом 5. Односторонние дороги с прямым направлением
 # движения имееют значение атрибута "yes", односторонние дороги с обратным направлением — "1", и соответственно
 # двусторонние ­дороги — "no". По умолчанию дороги считаются двусторонними. Такая схема подходит для использования
 # c данными OpenStreetMap
 director = QgsLineVectorLayerDirector( vLayer, 5, 'yes', '1', 'no', 3 )


Актуальная документацию всегда можно получить в разделе QGIS network analysis library описания QGIS API.