2015年9月17日木曜日

19 - pgRouting 7 - 7. より高度なルート検索クエリ(Workshop)

19-7 7. より高度なルート検索クエリ
前章「19-6 6. osm2pgrouting インポートツール」でデータを準備していないので、「ノート:」にあるように、データベースダンプファイルを読み込みます。

user@deb8-vmw:~$ su - postgres
パスワード:
postgres@deb8-vmw:~$ dropdb pgrouting-workshop
postgres@deb8-vmw:~$ createdb pgrouting-workshop
postgres@deb8-vmw:~$ cd /home/user/public_html/pgrouting-workshop/data/
postgres@deb8-vmw:/home/user/public_html/pgrouting-workshop/data$ psql -d pgrouting-workshop -f sampledata_routing.sql
SET
SET
SET
SET
SET
SET
psql:sampledata_routing.sql:12: ERROR:  現在オープンしているデータベースを削除できません
psql:sampledata_routing.sql:17: ERROR:  ロケール名"en_US.UTF-8"は無効です
データベース "pgrouting-workshop" にユーザ"postgres"として接続しました。
SET
SET
SET
SET
SET
SET
psql:sampledata_routing.sql:33: ERROR:  スキーマ"public"はすでに存在します
COMMENT
CREATE EXTENSION
COMMENT
CREATE EXTENSION
COMMENT
CREATE EXTENSION
COMMENT
SET
SET
SET
CREATE TABLE
CREATE TABLE
CREATE TABLE
CREATE TABLE
CREATE TABLE
CREATE TABLE
CREATE TABLE
CREATE TABLE
CREATE SEQUENCE
ALTER SEQUENCE
ALTER TABLE
COPY 36
COPY 492902
COPY 53108
COPY 40
COPY 0
COPY 4
COPY 198192
COPY 92435
COPY 67076
 setval
--------
  67076
(1 行)

ALTER TABLE
ALTER TABLE
ALTER TABLE
ALTER TABLE
CREATE INDEX
CREATE INDEX
CREATE INDEX
CREATE INDEX
CREATE INDEX
REVOKE
REVOKE
GRANT
GRANT

19-7-1 7.1. 重み付けされたコスト
pgrouting-workshop データベースを確認します。

postgres@deb8-vmw:/home/user/public_html/pgrouting-workshop/data$ cd
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   | 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
(14 行)

(stdin):q


次の SQL を実行して types と classes の内容を確認します。

pgrouting-workshop=# SELECT * FROM types ORDER BY id;
 id |   name    
----+-----------
  1 | highway
  2 | cycleway
  3 | tracktype
  4 | junction
(4 行)


pgrouting-workshop=# SELECT * FROM classes ORDER BY id;
 id  | type_id |       name        | cost | priority | default_maxspeed 
-----+---------+-------------------+------+----------+------------------
 100 |       1 | road              |      |        1 |               50
 101 |       1 | motorway          |      |        1 |               50
 102 |       1 | motorway_link     |      |        1 |               50
 103 |       1 | motorway_junction |      |        1 |               50
 104 |       1 | trunk             |      |        1 |               50
 105 |       1 | trunk_link        |      |        1 |               50
 106 |       1 | primary           |      |        1 |               50
 107 |       1 | primary_link      |      |        1 |               50
 108 |       1 | secondary         |      |        1 |               50
 109 |       1 | tertiary          |      |        1 |               50
 110 |       1 | residential       |      |        1 |               50
 111 |       1 | living_street     |      |        1 |               50
 112 |       1 | service           |      |        1 |               50
 113 |       1 | track             |      |        1 |               50
 114 |       1 | pedestrian        |      |        1 |               50
 115 |       1 | services          |      |        1 |               50
 116 |       1 | bus_guideway      |      |        1 |               50
 117 |       1 | path              |      |        1 |               50
 118 |       1 | cycleway          |      |        1 |               50
 119 |       1 | footway           |      |        1 |               50
 120 |       1 | bridleway         |      |        1 |               50
 121 |       1 | byway             |      |        1 |               50
 122 |       1 | steps             |      |        1 |               50
 123 |       1 | unclassified      |      |        1 |               50
 124 |       1 | secondary_link    |      |        1 |               50
 125 |       1 | tertiary_link     |      |        1 |               50
 201 |       2 | lane              |      |        1 |               50
 202 |       2 | track             |      |        1 |               50
 203 |       2 | opposite_lane     |      |        1 |               50
 204 |       2 | opposite          |      |        1 |               50
 301 |       3 | grade1            |      |        1 |               50
 302 |       3 | grade2            |      |        1 |               50
 303 |       3 | grade3            |      |        1 |               50
 304 |       3 | grade4            |      |        1 |               50
 305 |       3 | grade5            |      |        1 |               50
 401 |       4 | roundabout        |      |        1 |               50
(36 行)

(END):q


classes テーブルの cost の値を任意に与えます。

pgrouting-workshop=# UPDATE classes SET cost=1 ;
UPDATE 36
pgrouting-workshop=# UPDATE classes SET cost=2.0 WHERE name IN ('pedestrian','steps','footway');
UPDATE 3
pgrouting-workshop=# UPDATE classes SET cost=1.5 WHERE name IN ('cicleway','living_street','path');
UPDATE 2
pgrouting-workshop=# UPDATE classes SET cost=0.8 WHERE name IN ('secondary','tertiary');
UPDATE 2
pgrouting-workshop=# UPDATE classes SET cost=0.6 WHERE name IN ('primary','primary_link');
UPDATE 2
pgrouting-workshop=# UPDATE classes SET cost=0.4 WHERE name IN ('trunk','trunk_link');
UPDATE 2
pgrouting-workshop=# UPDATE classes SET cost=0.3 WHERE name IN ('motorway','motorway_junction','motorway_link');
UPDATE 3

ways テーブルの class_id フィールドと最終的には types テーブルの id フィールドにインデックスを作成します。

pgrouting-workshop=# CREATE INDEX ways_class_idx ON ways (class_id);
CREATE INDEX
pgrouting-workshop=# CREATE INDEX classes_idx ON classes (id);
CREATE INDEX

19-7-2 7.2. 制限されたアクセス
この章には、任意の道路のアクセスを制限する方法が書かれています。

0 件のコメント: