pgRoutingの使用ガイド
pgRouting
は、PostgreSQLとPostGISの拡張モジュールで、交通、物流、ネットワーク分析などの分野で使用される、最短経路、旅行商問題、サービスエリア分析などのさまざまなルーティングアルゴリズムと機能を提供します。この記事では、ServBayでのpgRouting
のインストールと使用方法について詳しく説明します。
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
ルーティング結果の可視化
pgRouting
の結果を可視化するために、QGISなどのさまざまなGISツールや、LeafletやOpenLayersなどのWebマップサービスを使用できます。
QGIS を使用する
PostgreSQL データベースに接続する:
- QGISを開く
- 「データ ソース マネージャ」 -> 「PostGIS」を選択
- データベース接続情報を入力して接続
ルートネットワークデータをロードする:
- ロードするテーブルまたはビューを選択
- 「追加」ボタンをクリック
Leaflet を使用する
- Webマップを作成する: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
拡張モジュールがすでに含まれており、この記事の手順に従ってインストールおよび設定を行うだけで使用を開始できます。さまざまなルーティングアルゴリズムと分析機能を使って、ルートネットワークデータを最大限に活用し、アプリケーションに信頼性のあるデータベースサポートを提供できます。