В недрах NextGIS завершен основной этап разработки GNM (Geographical Network Model) для GDAL. Разработка велась Михаилом Гусевым в рамках Google Summer of Code 2014 при менторстве NextGIS. GNM добавляет в библиотеку GDAL возможность создавать, модифицировать и анализировать геометрические сети, построенные на основе пространственных данных.
Согласно концепции GNM любой пространственный источник данных (набор пространственных данных одного формата) может иметь определённое количество слоёв, полей и объектов, представляющих собой сетевые данные (например граф и метаданные сети). Как правило, состав и структура этих данных либо уже определены, как в PostGIS pgRouting, SpatiaLite VirtualNetwork, сетях Oracle Spatial и топологии GML, либо отсутствуют, как в ESRI Shapefile. Библиотека GDAL, представляя в свою очередь абстракцию для большинства из этих пространственных форматов, не предоставляет таковую для их «сетевых частей». В связи с этим GDAL был доработан набором классом, которые описывают интерфейсы и их реализацию для того, чтобы «различать» в пространственном источнике данных сетевые данные и работать с ними.
Основное назначение разработанных классов и интерфейсов GNM:
- Обеспечить абстракцию для сетевых данных таким же образом, как GDAL (ранее OGR, часть GDAL) сам по себе обеспечивает абстракцию для пространственных;
- Предоставить сетевую функциональность тем пространственным ГИС-форматам, у которых она вообще отсутствует.
Абстракция сетевых данных
Интерфейс для работы с пространственными данными включает:
- Создание и удаление сетевого источника данных с нуля или на основе существующего пространственного;
- Создание сетевой топологии вручную или автоматически по определённому алгоритму (налаживание связей между объектами);
- Модификация пространственных данных (создание, удаление и изменение пространственных объектов) в контексте сети, что может повлечь изменение сетевых данных;
- Считывание сетевых данных.
Этот интерфейс должен быть реализован для необходимых форматов. Пока не ставилась цель обеспечить поддержку какого-либо из конкретных форматов, однако ожидается, что в будущем будут поддерживаться pgRouting, VirtualNetwork и т.д.
Сетевая функциональность для пространственных форматов
Отдельный набор классов в GNM является реализацией разработанного интерфейса, но реализован он не для какого-то конкретного формата, а для всех, что могут быть представлены классом GDALDataset, т. е. для любого пространственного формата, уже поддерживаемого библиотекой GDAL. Поскольку эта поддержка не «нативная», сетевыми данными для любого такого источника данных будет являться специальный набор дополнительных «системных» слоёв OGRLayer.
В рамках GSoC была протестирована поддержка формата ESRI Shapefile и уже сейчас есть возможность создавать и анализировать сети в этом формате. В частности, создав сеть на основе любого количества Shapefile-ов, используя описанный выше интерфейс, можно:
* Воспользоваться одним из существующих на данный момент в GNM методов по анализу сетей: алгоритмом Дейкстры для поиска кратчайших путей и алгоритмом поиска в ширину для нахождения компонент связности в графе сети. В результате будет получен отдельный линейный слой, содержащий итоговый путь (как на рисунке, визуализировано в QGIS) или компоненты связности.
Рис. 1. Кратчайший путь между вершинами 792 и 824.
* Использовать возможность «блокировки» любого количества объектов в сети, и в комбинации с вышеописанными алгоритмами производить, например, анализ переключения объектов запорной арматуры в водопроводной сети (например как на рисунках ниже).
Рис. 2. Распределение воды в водопроводной сети до коммутации (источник отмечен звездой).
Рис. 3. Распределение воды в водопроводной сети после «блокировки» объектов 829, 781 и 802.
* Определять правила по которым топология сети (а именно граф сети) будет строиться: задавать выражения для определения весов в графе, направлений рёбер, задавать правила соединения объектов в сети.
Документация
Документация содержится в древе исходных кодов. Описание и назначение всех классов представлено в разделе GNM Architecture, а пример и объяснения к использованию итоговых API в разделе GNM Tutorial.
Приложения, использующие GNM
Для того чтобы можно было пользоваться возможностями GNM “из коробки” были так же разработаны приложения, включённые в состав GDAL, для командной строки:
1. gnmmanage. Создание и модификация сетей.
2. gnmanalyse. Анализ сетей.
Ссылки
GSoC блог разработки: http://gsoc2014gnm.blogspot.ru/
Проект GSoC: http://trac.osgeo.org/gdal/wiki/geography_network_support
Форк репозитория GDAL со всеми изменениями: https://github.com/nextgis/gdal-gnm
RFC о внедрении GNM в GDAL: http://trac.osgeo.org/gdal/wiki/rfc48_geographical_networks_support