Руководство по использованию pgRouting
pgRouting
— это расширение для PostgreSQL и PostGIS, которое предоставляет различные алгоритмы и функции маршрутизации, такие как кратчайший путь, задача коммивояжера и анализ зоны обслуживания. Оно подходит для транспортной, логистической и сетевой аналитики. В этой статье подробно рассмотрено, как установить и использовать pgRouting
в ServBay.
Установка pgRouting
ServBay уже включает модуль расширения pgRouting
, вам нужно только активировать его в базе данных. Вот шаги для активации pgRouting
:
Подключитесь к базе данных PostgreSQL:
bashpsql -U your_username -d your_database
1Создание расширения:
sqlCREATE EXTENSION pgrouting;
1Проверка установки:
sql\dx
1
Настройка pgRouting
После активации pgRouting
вы можете создавать и управлять данными сети дорог, а также выполнять анализ, используя различные алгоритмы маршрутизации.
Создание таблицы данных сети дорог
Ниже приведен пример, демонстрирующий, как создать таблицу, содержащую данные сети дорог.
Создание таблицы:
sqlCREATE TABLE ways ( id SERIAL PRIMARY KEY, source INTEGER, target INTEGER, cost DOUBLE PRECISION, reverse_cost DOUBLE PRECISION, geom GEOMETRY(LineString, 4326) );
1
2
3
4
5
6
7
8Вставка примерных данных:
sqlINSERT INTO ways (source, target, cost, reverse_cost, geom) VALUES (1, 2, 1.0, 1.0, ST_GeomFromText('LINESTRING(116.4074 39.9042, 116.4084 39.9052)', 4326)), (2, 3, 1.0, 1.0, ST_GeomFromText('LINESTRING(116.4084 39.9052, 116.4094 39.9062)', 4326)), (3, 4, 1.0, 1.0, ST_GeomFromText('LINESTRING(116.4094 39.9062, 116.4104 39.9072)', 4326));
1
2
3
4
Создание топологии
Перед выполнением анализа маршрутизации необходимо создать топологию для данных сети дорог.
- Создание топологии:sql
SELECT pgr_createTopology('ways', 0.00001, 'geom', 'id');
1
Использование pgRouting для анализа маршрутизации
Ниже приведены некоторые примеры распространенного анализа маршрутизации.
Кратчайший путь
- Запрос кратчайшего пути:sql
SELECT * FROM pgr_dijkstra( 'SELECT id, source, target, cost FROM ways', 1, 4, directed := true );
1
2
3
4
Задача коммивояжера
- Решение задачи коммивояжера:sql
SELECT * FROM pgr_tsp( 'SELECT id, x::float8 AS x, y::float8 AS y FROM ways_vertices_pgr', start_id := 1 );
1
2
3
4
Анализ зоны обслуживания
- Анализ зоны обслуживания:sql
SELECT * FROM pgr_drivingDistance( 'SELECT id, source, target, cost FROM ways', 1, 2, directed := true );
1
2
3
4
Визуализация результатов маршрутизации
Вы можете использовать различные инструменты ГИС (например, QGIS) или веб-картографические сервисы (например, Leaflet, OpenLayers) для визуализации результатов pgRouting
.
Использование QGIS
Подключитесь к базе данных PostgreSQL:
- Откройте QGIS
- Выберите “Управление источниками данных” -> “PostGIS”
- Введите данные для подключения к базе данных и подключитесь
Загрузка данных сети дорог:
- Выберите таблицу или представление, которое нужно загрузить
- Нажмите кнопку “Добавить”
Использование Leaflet
- Создание веб-карты:html
<!DOCTYPE html> <html> <head> <title>Leaflet pgRouting Example</title> <link rel="stylesheet" href="https://unpkg.com/leaflet/dist/leaflet.css" /> <script src="https://unpkg.com/leaflet/dist/leaflet.js"></script> </head> <body> <div id="map" style="width: 600px; height: 400px;"></div> <script> var map = L.map('map').setView([39.9042, 116.4074], 13); L.tileLayer('https://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png', { attribution: '© OpenStreetMap contributors' }).addTo(map); // Add a polyline from pgRouting data var polyline = L.polyline([ [39.9042, 116.4074], [39.9052, 116.4084], [39.9062, 116.4094], [39.9072, 116.4104] ]).addTo(map); </script> </body> </html>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
Заключение
pgRouting
— это мощный модуль расширения для маршрутизации, который с помощью простой настройки и использования позволяет выполнять эффективный анализ маршрутизации в PostgreSQL. ServBay уже включает pgRouting
, необходимо лишь следовать шагам в этой статье для установки и настройки. С помощью различных алгоритмов и функций анализа маршрутов вы можете эффективно использовать данные сети дорог и обеспечивать надежную поддержку базы данных для ваших приложений.