PostGIS - 1 (入門編)

PostGIS - 1
(入門編)
PostGIS - 1(入門編)
•
PostGISとPostgreSQLについて (PostGISとは何か)
•
•
DBMSとSQL (基本的なSQL構文について)
PostGISジオメトリーとSRS (PostGISのジオメトリーと投影系について)
–
–
–
•
PostGISデータの作り方 (一番簡単なジオメトリーを実際に手で作って見る。ポイントデータだけ)
–
•
ポイントデータは、http://www.geocoding.jp
を使って様々な対象物の座標を取り出す。
PostGISへのデータの取り込み (既存のデータの取り込み方)
–
–
–
•
様々なジオメトリータイプ
PostGISジオメトリーの作り方
EPSGコード
QGIS
shp2pgsql
そのほか
実習
–
–
–
シェープファイルの取り込み (ポイント、ライン、ポリゴン)
非空間情報と空間クエリー(単一テーブル)
課題
PostGISとPostgreSQLについて
(PostGISとは何か)
• PostGISとは、PostgreSQLデーターベースを機
能拡張させ、空間情報を扱えるようにした空
間データベース
• 空間情報の検索、作成、操作ができる
• 現在は、ベクターデータのみを扱える
– 近い将来、ラスターも扱える
DBMSとSQL
• PostGISを使うには、データベースの基礎知識
が必要となる。
• そのためここでは少し、データベース操作の
基礎となる、データベースマネージメントとSQL
についてpgAdmin III を使って勉強する
pgAdmin III
• pgAdminは、PostgreSQLの操作をグラフィカル
ユーザーインターフェース(GUI)で可能にする
• コマンドライン(CUI)のpsqlよりも使いやす
い!
• PostGISのコマンドはすべてpgAdminから可能
pgAdmin III
データベースの中身
データベースサーバー
スキーマ
データベース
テーブル
スキーマとは?
1. データベース内に作られるディレクトリーのようなもの
2. スキーマ間の情報検索が可能 (データベース間は
不可能)
3. 例えば、基本的なデータは、 ‘base’というスキーマに
保存し、プロジェクトAに関するデータは、’project_a’
というスキーマに保存する。
4. データのバックアップなど、維持管理が簡単になる。
CREATE SCHEMA project_a;
ファンクション
PostGISのすべての
ファンクションが収
められている
各テーブルのジオメ
ジオメトリーコラム
トリーについての情
テーブル
報が収められる
空間参照系
テーブル
空間参照系(SRS)に
ついての情報が収
められている
空間参照ID (SRID)
• 座標参照系(CRS)が標準化されている
• 代表的なコード系はEPSG (European Petroleum
Survey Group) コード
• 例えば、
参照系名
EPSGコード
WGS84
4326
日本測地系2000:JGD2000
4612
Tokyo / UTM zone 54N
3095
• www.spatialreference.org
PostGISが動くデータベースを作る
1.データベースのルート
で右クリックして、まずは、
日本語を使う場合
すべてのデータベースを
更新する
2.続いて、同じ場所で
右クリックをして、データ
ベースを新規に作成する。
データベース用語
• データベース
– スキーマ
– データベースの下に作られるディレクトリー構造のようなもの
• テーブル
– データを収める入れ物
• ビュー
– データ自身ではなく、データを検索するクエリーを保存したも
の
テーブルの作成
• テーブルの作成、削除、修正、検索などは
SQL(Structures Query Language)を用いて行
う。
• SQLはプログラム言語ではなく、データベース
と話をするための言葉
テーブルの作成
• 例えば、下のようなテーブルを作るとすると、
Id
place
CREATE TABLE my_table (id int4, place varchar (20));
データの挿入
• 先ほどのテーブルにデータを格納するには、
Id
place
1
Tokyo
2
Sapporo
3
Sendai
INSERT
INTO
my_table
VALUES
(1,
'Tokyo');
INSERT
INTO
my_table
VALUES
(2,
INSERT INTO my_table VALUES (3,'Sapporo');
'Sendai');
ジオメトリー列の挿入
• 先ほどのテーブルに、ジオメトリーを保存する
ための列を挿入する。
Id
place
1
Tokyo
2
Sapporo
3
Sendai
the_geom
SELECT ADDGEOMETRYCOLUMN ('public', 'my_table',
'the_geom', 4326, 'POINT', 2);
ジオメトリーを挿入
• 先ほど挿入したジオメトリー列に実際の場所
の情報を格納する
Id
place
the_geom
1
Tokyo
0101000020E6………
2
Sapporo
0101000020E6………
3
Sendai
0101000020E6………
UPDATE
my_table
SET
the_geom
==ST_GeomFromText
UPDATE
my_table
SET
the_geom
ST_GeomFromText
UPDATE
my_table
SET
the_geom
=
ST_GeomFromText
(′POINT
(139.691701
35.689506)
′
4326)
WHERE
place
(′POINT
(141.350801
43.068625)
′
4326)
WHERE
place
(′POINT
(140.882049
38.260297)
′
4326)
WHERE
place
==′Tokyo′;
=′Sappro′;
′Sendai′;
プライマリーキーの設定
• プライマリーキーとは、テーブルの各行を一
意に識別するための列。QGISでデータを見る
ために必要。この場合、Idをキーに設定。
Id
place
the_geom
1
Tokyo
0101000020E6………
2
Sapporo
0101000020E6………
3
Sendai
0101000020E6………
ALTER TABLW my_table ADD CONSTRAINT
pkey_my_table PRIMARY KEY (Id);
テーブルの作成
CREATE TABLE my_table (id int4, place varchar (20));
テーブルを作るコマンド
列名とデータタイプ
テーブル名
Id
place
列名とデータタイプ
セミコロン
テーブルの作成
• PostgreSQLのデータタイプ
データタイプ
説明
例
int4
整数
3
float4
浮動小数点数
1.023
varchar()
テキスト
‘Tokyo’
geometry
ジオメトリー
010200002E6****
date
日付
Wed Dec 17
time
時間
07:37:16 1997 PST
…
データの挿入
INSERT INTO my_table VALUES (1, 'Tokyo');
データを挿入するコマンド
データを挿入するコマンド
データを挿入するテーブル
Id
place
1
Tokyo
2
Sapporo
3
Sendai
挿入するデータ
各列の順番に対応
挿入したデータの検索
• テーブル内のすべての行と列を表示
SELECT * FROM my_table;
行を検索
テーブル
するコマンド の指定
テーブル名
• Tokyoのidを表示 -> テーブルから、列
placeが‘Tokyo’であるidの行を表示
SELECT id FROM my_table WHERE place = ‘Tokyo’;
ジオメトリー列の挿入
SELECT ADDGEOMETRYCOLUMN ('public', 'my_table',
'the_geom', 4326, 'POINT', 2);
my_table
Id
place
1
Tokyo
2
Sapporo
3
Sendai
1. my_tableにジオメトリーを保存
するための列を挿入
the_geom
2. geometry_columns テーブルに
挿入したジオメリー列とその
テーブルに関する情報を挿入
geometry_columns
Id
Schema
Table
Name
Geometry
Column
SRID
Geometry
Type
Dimension
1
Public
my_table
the_geom
4326
POINT
2
ジオメトリー列の挿入
SELECT ADDGEOMETRYCOLUMN ('public', 'my_table',
'the_geom', 4326, 'POINT', 2);
• ADDGEOMETRYCOLUMNはPostGISコマンド
• 必要な情報は、
–
–
–
–
–
–
スキーマ名(省略可)
テーブル名
ジオメトリー列名
地理参照系ID (EPSG)
ジオメトリータイプ
地理参照系の次元
: ‘public’
: ‘my_table’
: ‘the_geom’
: 4326
: ‘POINT’
:2
ジオメトリータイプ
• ジオメトリーとは、表現したい対象の幾何的な形
状
• 実際の世界をモデル化するためにいくつかのジ
オメトリーが考えられるが、点、線、面であらわす
のが一般的
• PostGISのジオメトリータイプには、点、線、面、に
対応する、POINT、LINESTRING、POLYGONが用意
されて いる。
• PostGISでは、代表的な3タイプの他に多数のジ
オメトリータイプがある
ジオメトリータイプ
• POINT
• LINESTRING
• POLYGON
ジオメトリーを挿入
UPDATE my_table SET the_geom = ST_GeomFromText
(′POINT (139.691701 35.689506) ′ 4326) WHERE place
= ′Tokyo′;
UPDATE my_table SET the_geom = XXX;
既存の行の
内容を変更
するコマンド
Id
place
the_geom
1
Tokyo
0101000020E6………
ジオメトリーを挿入
• じ
ST_GeomFromText (′POINT (139.691701 35.689506) ′ 4326)
ジオメトリーをテキスト
表現から作るコマンド
ジオメトリーをテキストで表現
SRID
UPDATE my_table SET the_geom =
ST_GeomFromText (′POINT (139.691701 35.689506) ′ 4326)
WHERE place = ′Tokyo′;
ジオメトリーを挿入
ST_GeomFromText (′POINT (139.691701 35.689506) ′ 4326)
(139.691701 35.689506)
(経度 緯度)
スペース!
ジオメトリーを挿入
UPDATE my_table SET the_geom =
ST_GeomFromText (′POINT (139.691701 35.689506)′ 4326)
WHERE place = ′Tokyo′;
Id
place
the_geom
1
Tokyo
0101000020E6………
プライマリーキーの設定
• データ(各行)が一意であることを保障する仕
組み
制限名。この場合
テーブルに何かしらの規制を加えるためのコマンド
プライマリーキー名
ALTER TABLE my_table ADD CONSTRAINT pkey_my_table
PRIMARY KEY (Id);
規制がプライマ
リーキーである
ことの宣言
プライマ
リーキー
を設定す
る列名
Id
place
the_geom
1
Tokyo
0101000020E6………
2
Sapporo
0101000020E6………
3
Sendai
0101000020E6………
データベース
class2010
スキーマ
public
テーブル
my_table
コメント
テーブルについて
コメントを残せる
列
Id, place, the_geom
制限
インデックス
プライマリーキー
実際のテーブル
実際には、、、
• テーブルを一から作り上げることは少ない
• 既存のデータを使うことが多い
• ということで、、、
• PostGISへのデータの取り込み方を知る必要
がある
PostGISへのデータの取り込み
• psql2shp
– コマンドラインツール、shapefileのみ
• QGIS
– SPIT (Shapefile to PostGIS Import Tool)
• ogr2ogr
– コマンドラインツール、さまざまなフォーマット
• ogr2gui
– ogr2ogrのGUIバージョン
shp2pgsql
• PostGISと共にインストールされるshapefileを
インポートするためのプログラム
• C:\Program Files\PostgreSQL\8.4\bin\ あたり
にあるshp2pgsql.exeがその正体
• このプログラムを使うには、プログラムのディ
レクトリーへ移動するか、パスを設定する
• 今回は、shp2pgsql.batを
C:\OSGeo4W\etc\ini\ に保存して、OSGeo4W
から使う
shp2pgsql
shp2pgsql -s SRID -I shapefile tableame > sql_file_name
コマンド
SRIDを指定
Shapefile名
空間インデックスを作成
SQL文の作成
テーブル名
作成されるSQL文の
保存先とファイル名
ファイルとして保存
shp2pgsql
shp2pgsql -s SRID -I shapefile テーブル名 | psql -h
localhost -p 5432 -d データベース名 -U postgres
• Shp2pgsqlで作ったSQL文をパイプ(|)を使っ
てpsqlというプログラム渡し、データベースに
shapfileの中身をインポート
• 途中の産物がない
QGISを使ったShapefileの取り込み
• QGISのアドインマネージャーで、SPITを使える
ようにする。
インポート先のデータ
ベースの設定
インポートするデータ
の形式設定
Shapefileの選択・追加
PostGISからエクスポート
• pgsql2shp
• QGIS
pgsql2shp
• PostGISデーターをshapefileに変換
Pgsql2shp -f shepefile名 -h localhost -u postgres データ
ベース名 テーブル名
Shapefileとして保存
を選択