2013年11月12日火曜日

11 - PostGIS 2 - データベースの作成

11-2 データベースの作成
データベースを作成し、一般ユーザを登録します。
PostGISホームページ
http://postgis.net/

の Documentation ボタンをクリックします。

PostGIS - Documentation
http://postgis.net/documentation

の PostGIS 1.5(HTML)をクリックします。

PostGIS 1.5 Manual
http://postgis.net/docs/manual-1.5/



Chapter 2. Installation
http://postgis.net/docs/manual-1.5/ch02.html

の 2.5. Create a spatially-enabled database を参考に東京都のデータのデータベースを作成します。
plpgsql は PostGIS 関数でも使われる(手続き型)プログラミング言語です。
postgis.sql は PostGIS のオブジェクトと関数定義ファイルです。
spatial_ref_sys.sql は投影法(EPSG)に関する定義ファイルです。
postgis_comments.sql は postgis が持つ関数についてのコメント(ヘルプ)文章です。

次に、2.6 Creating PostGIS spatially-enabled databases from a template を参考にテンプレートを作成してデータベースを作成します。
これには3つのステップがあります。

1:データベースの作成
2:PostgreSQLのpl/pgsql言語サポートの有効化
3:postgis.sqlの読み込み
4:spatial_ref_sys.sqlの読み込み
5:postgis_comments.sqlの読み込み

です。

postgres@debian7-vmw:~$ createdb template_postgis
postgres@debian7-vmw:~$ createlang plpgsql template_postgis
createlang: 言語"plpgsql"データベース"template_postgis"内にすでにインストールされています
postgres@debian7-vmw:~$ psql -d template_postgis -f /usr/share/postgresql/9.1/contrib/postgis-1.5/postgis.sql
---
DROP FUNCTION
postgres@debian7-vmw:~$ psql -d template_postgis -f /usr/share/postgresql/9.1/contrib/postgis-1.5/spatial_ref_sys.sql
---
INSERT 0 1
COMMIT
ANALYZE

作成したtemplate_postgisをテンプレートとしてオーナーが user で nippon_nlni というデータベースを作成します。

postgres@debian7-vmw:~$ createdb -T template_postgis -O user nippon_nlni
postgres@debian7-vmw:~$ psql -l
                                             データベース一覧
       名前       |  所有者  |エンコーディング |  照合順序  |Ctype(変換演算子)|      アクセス権       
------------------+---------+----------------+-----------+-----------------+-----------------------
 nippon_nlni      | user    | UTF8           |ja_JP.UTF-8| ja_JP.UTF-8     | 
 postgres         | postgres| UTF8           |ja_JP.UTF-8| ja_JP.UTF-8     | 
 template0        | postgres| UTF8           |ja_JP.UTF-8| ja_JP.UTF-8     | =c/postgres          +
                  |         |                |           |                 | postgres=CTc/postgres
 template1        | postgres| UTF8           |ja_JP.UTF-8| ja_JP.UTF-8     | =c/postgres          +
                  |         |                |           |                 | postgres=CTc/postgres
 template_postgis | postgres| UTF8           |ja_JP.UTF-8| ja_JP.UTF-8     | 
(5 行)

(stdin):q

nippon_nlni データベースの geography_columns テーブルと geometry_column テーブル、 spatial_ref_sys テーブルのオーナーを user に変更します。

postgres@debian7-vmw:~$ psql nippon_nlni
psql (9.1.9)
"help" でヘルプを表示します.

nippon_nlni=# \d
                 リレーションの一覧
 スキーマ |       名前         |    型   |  所有者  
----------+-------------------+---------+----------
 public   | geography_columns | ビュー   | postgres
 public   | geometry_columns  | テーブル | postgres
 public   | spatial_ref_sys   | テーブル | postgres
(3 行)

PostGIS マニュアルの

Chapter 4. Using PostGIS: Data Management and Querie
http://postgis.refractions.net/documentation/manual-1.5/ch04.html

の 4.2 PostGIS Geography Type によると
geography_columns は、2点間の最短距離を球面上で計算するデータ型です。
実際の距離に近くなりますが、計算が複雑で、現在は EPSG:4326(WGS84)だけ装備されています。
geometry_columns は、2点間の最短距離を平面上で計算するデータ型です。

nippon_nlni=# ALTER VIEW geography_columns OWNER TO user;
ALTER TABLE
nippon_nlni=# ALTER TABLE geometry_columns OWNER TO user;
ALTER TABLE
nippon_nlni=# ALTER TABLE spatial_ref_sys OWNER TO user;
ALTER TABLE
nippon_nlni=# \d
                リレーションの一覧
 スキーマ |       名前         |    型   | 所有者 
----------+-------------------+---------+--------
 public   | geography_columns | ビュー   | user
 public   | geometry_columns  | テーブル | user
 public   | spatial_ref_sys   | テーブル | user
(3 行)

nippon_dnli データベースに一般ユーザuserを追加します。


nippon_nlni=# CREATE USER user;
ERROR: ロール"user"はすでに存在します
nippon_nlni=# ALTER USER user with password 'password(任意)';
ALTER ROLE
nippon_nlni=# \q
postgres@debian7-vmw:~$ exit
ログアウト
user@debian7-vmw:~$


続けて東京都のデータを登録します。

user@debian7-vmw:~/mapdata/tokyo$ ls
KS-META-N03-13_13_130401.xml  N03-13_13_130401.sbx  akiruno
N03-130401_13_GML.zip         N03-13_13_130401.shp
N03-13_13_130401.dbf          N03-13_13_130401.shx
N03-13_13_130401.sbn          N03-13_13_130401.xml
~/mapdata/tokyo$ shp2pgsql -W sjis N03-13_13_130401.shp tokyo_kuiki > tokyo_kuiki.sql
Shapefile type: Polygon
Postgis type: MULTIPOLYGON[2]

user@debian7-vmw:~/mapdata/tokyo$ psql -d nippon_nlni -f tokyo_kuiki.sql
user@debian7-vmw:~/mapdata/tokyo$ psql nippon_nlni
psql (9.1.9)
"help" でヘルプを表示します.

nippon_nlni=> \dt
               リレーションの一覧
 スキーマ |       名前       |    型    | 所有者 
----------+------------------+----------+--------
 public   | geometry_columns | テーブル | user
 public   | spatial_ref_sys  | テーブル | user
 public   | tokyo_kuiki      | テーブル | user
(3 行)

nippon_nlni=> \d tokyo_kuiki
                                テーブル "public.tokyo_kuiki"
  カラム  |          型           |                          修飾語                           
----------+-----------------------+-----------------------------------------------------------
 gid      | integer               | not null default nextval('tokyo_kuiki_gid_seq'::regclass)
 n03_001  | character varying(10) | 
 n03_002  | character varying(20) | 
 n03_003  | character varying(20) | 
 n03_004  | character varying(20) | 
 n03_007  | character varying(5)  | 
 the_geom | geometry              | 
インデックス:
    "tokyo_kuiki_pkey" PRIMARY KEY, btree (gid)
CHECK 制約:
    "enforce_dims_the_geom" CHECK (st_ndims(the_geom) = 2)
    "enforce_geotype_the_geom" CHECK (geometrytype(the_geom) = 'MULTI
POLYGON'::text OR the_geom IS NULL)
    "enforce_srid_the_geom" CHECK (st_srid(the_geom) = (-1))
~
~
(stdin):q
nippon_nlni=> \q

他のデータも登録します。
次回の投稿で作業内容を載せておきます。

0 件のコメント: