19-8-1 8.1. ネットワークのジオメトリと共にルートを返す
経路のラインのジオメトリと共にルートを返すにはラッパー関数を記述する必要はありません。
ダイクストラ法による最短経路探索
user@deb8-vmw:~$ su - postgres
パスワード:
postgres@deb8-vmw:~$ psql pgrouting-workshop
psql (9.4.3)
"help" でヘルプを表示します.
pgrouting-workshop=# SELECT seq, id1 AS node, id2 AS edge, cost FROM pgr_dijkstra('
pgrouting-workshop'# SELECT gid AS id,
pgrouting-workshop'# source::integer,
pgrouting-workshop'# target::integer,
pgrouting-workshop'# length::double precision AS cost
pgrouting-workshop'# FROM ways',
pgrouting-workshop(# 30, 60, false, false);
seq | node | edge | cost -----+-------+--------+--------------------- 0 | 30 | 53981 | 0.00179787381215754 1 | 29 | 54683 | 0.00414306299059075 2 | 2929 | 54682 | 0.00415625981313575 --- 84 | 52876 | 108239 | 0.0663451932790427 85 | 51208 | 78537 | 0.0296600224657156 86 | 60 | -1 | 0 (87 行) (END):q
ジオメトリを含んだ結果
pgrouting-workshop=# SELECT seq, id1 AS node, id2 AS edge, cost, b.the_geom FROM pgr_dijkstra('
SELECT gid AS id,
source::integer,
target::integer,
length::double precision AS cost
FROM ways',
30, 60, false, false) a LEFT JOIN ways b ON (aid2 = b,gid);
seq | node | edge | cost | the_geom -----+-------+--------+---------------------+------------------------ 0 | 30 | 53981 | 0.00179787381215754 | 0102000020E6100000020000002D7F19E7 CAAD5EC0B34DE08C50B74640748A9F10CBAD5EC0D10A671250B74640 --- 86 | 60 | -1 | 0 | (87 行) (END):q
19-8-2 8.2. 結果を可視化する
ターミナルのスクリーン上で行や列、数字を眺める代わりに、地図上にルートを可視化します。
CREATE TABLE <table name> AS SELECT ... を使って 結果をテーブルに保存して その結果を QGIS で見る方法(QGIS を Synaptic マネージャでインストールしておきます。)
pgrouting-workshop=# CREATE TABLE route AS SELECT seq, id1 AS node, id2 AS edge, cost, b.the_geom FROM pgr_dijkstra('
SELECT gid AS id,
source::integer,
target::integer,
length::double precision AS cost
FROM ways',
30, 60, false, false) a LEFT JOIN ways b ON (aid2 = b,gid);
QGIS で表示できませんでした。(次のように表示されました。)
この章(19-8 8. pl/pgsql のラッパーを記述する)が終わったら、pgrouting-workshop データベースの所有者を user にして、操作します。
19-8-3 8.3. 入力パラメータとジオメトリの出力を単純化
最短経路探索の Dijkstra 関数を呼ぶときに単純化 (そして標準の値をセット)した関数(ダイクストラ法のラッパー)です。
(内容はホームページを参照してください。)
19-8-4 8.4. 緯度/経度 のポイントの間のルートで順番にならんだジオメトリと方位を返す
入力パラメータとして 緯度/経度 のポイントを扱い、 QGIS または Mapserver や Geoserver のような WMS サービスで表示ができるルートを返す関数です。
(内容はホームページを参照してください。)
データベースにこのファンクションをインストールします:
psql -U user -d pgrouting-workshop -f ~/Desktop/pgrouting-workshop/data/fromAtoB.sql
user@deb8-vmw:~$ su - postgres
パスワード:
postgres@deb8-vmw:~$ cd /home/user/public_html/pgrouting-workshop/data/
postgres@deb8-vmw:/home/user/public_html/pgrouting-workshop/data$ ls
SHP sampledata.osm sampledata_routing.sql
fromAtoB.sql sampledata_notopo.sql
postgres@deb8-vmw:/home/user/public_html/pgrouting-workshop/data$ psql -d pgrouting-workshop -f fromAtoB.sql
CREATE FUNCTION
19-8-5 QGIS で route テーブルを表示
もう一度、QGIS で route テーブルを表示してみます。
「19-8-2 8.2. 結果を可視化する」で
pgrouting-workshop データベースの所有者を user にして操作してみます。
user@deb8-vmw:~$ su - postgres
パスワード:
postgres@deb8-vmw:~$ psql pgrouting-workshop
psql (9.4.3)
"help" でヘルプを表示します.
pgrouting-workshop=# \d
リレーションの一覧 スキーマ | 名前 | 型 | 所有者 ----------+--------------------------+------------+---------- public | classes | テーブル | postgres public | geography_columns | ビュー | postgres public | geometry_columns | ビュー | postgres public | nodes | テーブル | postgres public | raster_columns | ビュー | postgres public | raster_overviews | ビュー | postgres public | relation_ways | テーブル | postgres public | relations | テーブル | postgres public | route | テーブル | postgres public | spatial_ref_sys | テーブル | postgres public | types | テーブル | postgres public | way_tag | テーブル | postgres public | ways | テーブル | postgres public | ways_vertices_pgr | テーブル | postgres public | ways_vertices_pgr_id_seq | シーケンス | postgres (15 行)
pgrouting-workshop=# ALTER TABLE classes OWNER TO user;
ALTER TABLE
pgrouting-workshop=# ALTER VIEW geography_columns OWNER TO user;
ALTER VIEW
pgrouting-workshop=# ALTER VIEW geometry_columns OWNER TO user;
ALTER VIEW
pgrouting-workshop=# ALTER TABLE nodes OWNER TO user;
ALTER TABLE
pgrouting-workshop=# ALTER VIEW raster_columns OWNER TO user;
ALTER VIEW
pgrouting-workshop=# ALTER VIEW raster_overviews OWNER TO user;
ALTER VIEW
pgrouting-workshop=# ALTER TABLE relation_ways OWNER TO user;
ALTER TABLE
pgrouting-workshop=# ALTER TABLE relations OWNER TO user;
ALTER TABLE
pgrouting-workshop=# ALTER TABLE route OWNER TO user;
ALTER TABLE
pgrouting-workshop=# ALTER TABLE spatial_ref_sys OWNER TO user;
ALTER TABLE
pgrouting-workshop=# ALTER TABLE types OWNER TO user;
ALTER TABLE
pgrouting-workshop=# ALTER TABLE way_tag OWNER TO user;
ALTER TABLE
pgrouting-workshop=# ALTER TABLE ways OWNER TO user;
ALTER TABLE
pgrouting-workshop=# ALTER TABLE ways_vertices_pgr OWNER TO user;
ALTER TABLE
pgrouting-workshop=# ALTER SEQUENCE ways_vertices_pgr_id_seq OWNER TO user;
ALTER SEQUENCE
pgrouting-workshop=# \d
リレーションの一覧 スキーマ | 名前 | 型 | 所有者 ----------+--------------------------+------------+-------- public | classes | テーブル | user public | geography_columns | ビュー | user public | geometry_columns | ビュー | user public | nodes | テーブル | user public | raster_columns | ビュー | user public | raster_overviews | ビュー | user public | relation_ways | テーブル | user public | relations | テーブル | user public | route | テーブル | user public | spatial_ref_sys | テーブル | user public | types | テーブル | user public | way_tag | テーブル | user public | ways | テーブル | user public | ways_vertices_pgr | テーブル | user public | ways_vertices_pgr_id_seq | シーケンス | user (15 行) (stdin):q
1 QGIS を起動します。
2 「ブラウザ」の「PostGIS」を右クリックして、「新しい接続」ます。
3 「新規 PostGIS 接続を作成」で次のように入力します。
名称: pgrouting(任意)
サービス: (空 そのまま)
ホスト: localhost
ポート: 5432(そのまま)
データベース: pgrouting-workshop
SSL モード: 禁止(そのまま)
ユーザ名: user(postgres の user)
パスワード: (postgres の user のパスワード)
4 「接続テスト」ボタンをクリックします。成功すれば次のように表示されるので、「OK」ボタンをクリックします。
「新規 PostGIS 接続を作成」ダイアログの「OK」ボタンをクリックします。
5 「ブラウザ」ペインの「PostGIS -> pgrouting -> public -> route」をクリックして展開し、「route」をダブルクリックします。
● PostGIS レイヤを追加して QGIS の SQL where clause を使う方法:
1 「レイヤ」ペインの「route」を右クリックし、「削除」をクリックします。
2 「レイヤとグループの削除」ダイアログで「OK」ボタンをクリックします。
3 「ブラウザ」の「ways」をダブルクリックし、表示します。
4 「レイヤ」ペインの「ways」を右クリックし、「プロパティ」をクリックします。
5 「レイヤプロパティ - ways|一般情報」ダイアログで、一番下にある「クエリビルダ」ボタンをクリックします。
6 「クエリビルダ」ダイアログの「プロバイダ特有フィルタ式」に次のクエリを入力して「テスト」ボタンをクリックします。
"gid" IN ( SELECT id2 AS gid FROM pgr_dijkstra('
SELECT gid AS id,
source::integer,
target::integer,
length::double precision AS cost
FROM ways',
30, 60, false, false) a LEFT JOIN ways b ON (a.id2 = b.gid)
)
7 「クエリ結果」が表示されたら「OK」ボタンをクリックします。
「クエリビルダ」ダイアログの「OK」ボタンをクリックします。
「レイヤプロパティ - ways|一般情報」ダイアログの「OK」ボタンをクリックします。
8 「ブラウザ」ペインの「ways」をダブルクリックし、表示します。背景レイヤにするため、「レイヤ」ペインの直前に追加した「ways」をドラッグして下に移動します。「route」が目立たないときは、この「ways」を右クリックし、「プロパティ」をクリックして「レイヤプロパティ - ways|スタイル」ダイアログで、「色」を変更してください。
1
0 件のコメント:
コメントを投稿