2015年9月17日木曜日

19 - pgRouting 4 - 4. ネットワーク・トポロジーを作成する(Workshop)

19-4-1 4.1. ネットワークデータを読み込む
ワークショップのサンプルデータを pgrouting-workshop データベースにインポートします。
はじめに、データベースを作成します。
名前が pgrouting-workshop でないと sampledata_notopo.sql がインポートできません。
また、所有者(オーナ)がスーパーユーザ出ないとエラーが発生します。ユーザにスーパーユーザの権限があれば OK です。
今回は postgres で操作します。
sampledata_notopo.sql をインポートすると postgis と pgrouting の拡張機能が追加されるようです。

user@deb8-vmw:~/ダウンロード$ cd
user@deb8-vmw:~$ su - postgres
パスワード:
postgres@deb8-vmw:~$ createdb pgrouting-workshop
postgres@deb8-vmw:~$ exit
user@deb8-vmw:~$ cd public_html/pgrouting-workshop/
user@deb8-vmw:~/public_html/pgrouting-workshop$ ls
data.tar.gz  docs  web
user@deb8-vmw:~/public_html/pgrouting-workshop$ tar -xvzf data.tar.gz
data/SHP/sampledata.prj
data/SHP/sampledata.qpj
data/SHP/sampledata.shp
data/sampledata_notopo.sql
data/sampledata.osm
data/SHP/
data/SHP/sampledata.dbf
data/fromAtoB.sql
data/sampledata_routing.sql
data/SHP/sampledata.shx
data/
data/SHP/sampledata.cpg
user@deb8-vmw:~/public_html/pgrouting-workshop$ su - postgres
パスワード:
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_notopo.sql
SET
SET
SET
SET
SET
SET
psql:sampledata_notopo.sql:12: ERROR:  現在オープンしているデータベースを削除できません
psql:sampledata_notopo.sql:17: ERROR:  ロケール名"en_US.UTF-8"は無効です
データベース "pgrouting-workshop" にユーザ"postgres"として接続しました。
SET
SET
SET
SET
SET
SET
psql:sampledata_notopo.sql:33: ERROR:  スキーマ"public"はすでに存在します
COMMENT
CREATE EXTENSION
COMMENT
CREATE EXTENSION
COMMENT
CREATE EXTENSION
COMMENT
SET
SET
SET
CREATE TABLE
COPY 0
COPY 92435
CREATE INDEX
CREATE INDEX
REVOKE
REVOKE
GRANT
GRANT
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   | geography_columns | ビュー   | postgres
 public   | geometry_columns  | ビュー   | postgres
 public   | raster_columns    | ビュー   | postgres
 public   | raster_overviews  | ビュー   | postgres
 public   | spatial_ref_sys   | テーブル | postgres
 public   | ways              | テーブル | postgres
(6 行)


道路ネットワークデータが含まれているテーブル ways の属性を見てみます。

pgrouting-workshop=# \d ways
             テーブル "public.ways"
    列    |            型             |  修飾語  
----------+---------------------------+----------
 gid      | integer                   | 
 class_id | integer                   | not null
 length   | double precision          | 
 name     | text                      | 
 osm_id   | bigint                    | 
 the_geom | geometry(LineString,4326) | 
インデックス:
    "ways_gid_idx" UNIQUE, btree (gid)
    "geom_idx" gist (the_geom)


19-4-2 4.2. トポロジーを計算する
データが正確なネットワーク・トポロジーを提供できるように、pgr_createTopology 関数を実行します。
最初に source と target の列を追加し、次に pgr_createTopology 関数を実行します。

pgrouting-workshop=# ALTER TABLE ways ADD COLUMN "source" integer;
ALTER TABLE
pgrouting-workshop=# ALTER TABLE ways ADD COLUMN "target" integer;
ALTER TABLE
pgrouting-workshop=# SELECT pgr_createTopology('ways', 0.00001, 'the_geom', 'gid');
NOTICE:  PROCESSING:
NOTICE:  pgr_createTopology('ways',1e-05,'the_geom','gid','source','target','true')
NOTICE:  Performing checks, pelase wait .....
NOTICE:  Creating Topology, Please wait...
NOTICE:  1000 edges processed
---
NOTICE:  92000 edges processed
NOTICE:  -------------> TOPOLOGY CREATED FOR  92435 edges
NOTICE:  Rows with NULL geometry or NULL id: 0
NOTICE:  Vertices table for table public.ways is: public.ways_vertices_pgr
NOTICE:  ----------------------------------------------
 pgr_createtopology
--------------------
 OK
(1 行)

19-4-3 4.3. インデックスを追加
ネットワークのテーブルが、source、target 列にインデックスを持つことを確認します。
次のコマンドを実行して、インデックスを追加します。私の場合は、次のように表示されました。

pgrouting-workshop=# CREATE INDEX ways_source_idx ON ways("source");
ERROR:  リレーション"ways_source_idx"はすでに存在します
pgrouting-workshop=# CREATE INDEX ways_target_idx ON ways("target");
ERROR:  リレーション"ways_target_idx"はすでに存在します

データベースは次のようになります。

pgrouting-workshop=# \d
                     リレーションの一覧
 スキーマ |           名前           |     型     |  所有者  
----------+--------------------------+------------+----------
 public   | geography_columns        | ビュー     | postgres
 public   | geometry_columns         | ビュー     | postgres
 public   | raster_columns           | ビュー     | postgres
 public   | raster_overviews         | ビュー     | postgres
 public   | spatial_ref_sys          | テーブル   | postgres
 public   | ways                     | テーブル   | postgres
 public   | ways_vertices_pgr        | テーブル   | postgres
 public   | ways_vertices_pgr_id_seq | シーケンス | postgres
(8 行)


テーブル ways の属性は、

pgrouting-workshop=# \d ways
             テーブル "public.ways"
    列    |            型             |  修飾語  
----------+---------------------------+----------
 gid      | integer                   | 
 class_id | integer                   | not null
 length   | double precision          | 
 name     | text                      | 
 osm_id   | bigint                    | 
 the_geom | geometry(LineString,4326) | 
 source   | integer                   | 
 target   | integer                   | 
インデックス:
    "ways_gid_idx" UNIQUE, btree (gid)
    "geom_idx" gist (the_geom)
    "ways_source_idx" btree (source)
    "ways_target_idx" btree (target)


詳細な説明は、ホームページを参照してください。

0 件のコメント: