postgis - 1 ( 入門編)
DESCRIPTION
PostGIS - 1 ( 入門編). PostGIS - 1 (入門編). PostGIS と PostgreSQL について ( PostGIS とは何か) DBMS と SQL ( 基本的な SQL 構文について) PostGIS ジオメトリーと SRS ( PostGIS のジオメトリーと投影系について) 様々なジオメトリータイプ PostGIS ジオメトリーの作り方 EPSG コード PostGIS データの作り方 (一番簡単なジオメトリーを実際に手で作って見る。ポイントデータだけ) - PowerPoint PPT PresentationTRANSCRIPT
PostGIS - 1( 入門編)
PostGIS - 1(入門編)• PostGISと PostgreSQL について ( PostGISとは何か)
• DBMSと SQL (基本的な SQL構文について)• PostGISジオメトリーと SRS ( PostGISのジオメトリーと投影系について)
– 様々なジオメトリータイプ– PostGISジオメトリーの作り方– EPSGコード
• PostGISデータの作り方 (一番簡単なジオメトリーを実際に手で作って見る。ポイントデータだけ)– ポイントデータは、http://www.geocoding.jp を使って様々な対象物の座標を取り出す。
• PostGISへのデータの取り込み (既存のデータの取り込み方)– 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 ) コード• 例えば、
• www.spatialreference.org
参照系名 EPSGコードWGS84 4326
日本測地系 2000 : JGD2000 4612
Tokyo / UTM zone 54N 3095
PostGIS が動くデータベースを作る
1.データベースのルートで右クリックして、まずは、すべてのデータベースを更新する2.続いて、同じ場所で右クリックをして、データベースを新規に作成する。
日本語を使う場合
データベース用語• データベース– スキーマ
– データベースの下に作られるディレクトリー構造のようなもの
• テーブル– データを収める入れ物
• ビュー– データ自身ではなく、データを検索するクエリーを保存
したもの
テーブルの作成• テーブルの作成、削除、修正、検索など
は SQL ( Structures Query Language )を用いて行う。
• SQL はプログラム言語ではなく、データベースと話をするための言葉
テーブルの作成• 例えば、下のようなテーブルを作るとする
と、
CREATE TABLE my_table (id int4, place varchar (20));
Id place
データの挿入• 先ほどのテーブルにデータを格納するに
は、
INSERT INTO my_table VALUES (1, 'Tokyo');
Id place
1 Tokyo
2 Sapporo
3 Sendai
INSERT INTO my_table VALUES (2, 'Sapporo');INSERT INTO my_table VALUES (3, 'Sendai');
ジオメトリー列の挿入• 先ほどのテーブルに、ジオメトリーを保存
するための列を挿入する。
SELECT ADDGEOMETRYCOLUMN ('public', 'my_table', 'the_geom', 4326, 'POINT', 2);
Id place the_geom
1 Tokyo
2 Sapporo
3 Sendai
ジオメトリーを挿入• 先ほど挿入したジオメトリー列に実際の
場所の情報を格納する
UPDATE my_table SET the_geom = ST_GeomFromText ( POINT (′ 139.691701 35.689506) 4326)′ WHERE place = Tokyo ;′ ′
Id place the_geom
1 Tokyo 0101000020E6………
2 Sapporo 0101000020E6………
3 Sendai 0101000020E6………
UPDATE my_table SET the_geom = ST_GeomFromText ( POINT (′ 141.350801 43.068625) 4326)′ WHERE place = Sappro ;′ ′
UPDATE my_table SET the_geom = ST_GeomFromText ( POINT (′ 140.882049 38.260297) 4326)′ WHERE place = Sendai ;′ ′
プライマリーキーの設定• プライマリーキーとは、テーブルの各行
を一意に識別するための列。 QGIS でデータを見るために必要。この場合、 Id をキーに設定。
ALTER TABLW my_table ADD CONSTRAINT pkey_my_table PRIMARY KEY (Id);
Id place the_geom
1 Tokyo 0101000020E6………
2 Sapporo 0101000020E6………
3 Sendai 0101000020E6………
テーブルの作成
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
挿入したデータの検索• テーブル内のすべての行と列を表示
• Tokyo の id を表示 -> テーブルから、列 place が‘ Tokyo’ である id の行を表示
SELECT * FROM my_table;
SELECT id FROM my_table WHERE place = ‘Tokyo’;
行を検索するコマンド
テーブルの指定
テーブル名
ジオメトリー列の挿入SELECT ADDGEOMETRYCOLUMN ('public', 'my_table', 'the_geom', 4326, 'POINT', 2);
Id place the_geom
1 Tokyo
2 Sapporo
3 Sendai
Id Schema Table Name
Geometry Column
SRID Geometry Type
Dimension
1 Public my_table the_geom 4326 POINT 2
my_table
geometry_columns
1. my_table にジオメトリーを保存するための列を挿入
2. geometry_columns テーブルに挿入したジオメリー列とそのテーブルに関する情報を挿入
ジオメトリー列の挿入
• ADDGEOMETRYCOLUMN は PostGIS コマンド• 必要な情報は、– スキーマ名 ( 省略可 ) : ‘public’– テーブル名 : ‘my_table’– ジオメトリー列名 : ‘the_geom’– 地理参照系 ID ( EPSG ) : 4326– ジオメトリータイプ : ‘POINT’– 地理参照系の次元 : 2
SELECT ADDGEOMETRYCOLUMN ('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 ;′ ′
Id place the_geom
1 Tokyo 0101000020E6………
UPDATE my_table SET the_geom = XXX;
既存の行の内容を変更するコマンド
ジオメトリーを挿入• じ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 で作った SQL 文をパイプ(|)を使って psql というプログラム渡し、データベースに shapfile の中身をインポート
• 途中の産物がない
shp2pgsql -s SRID -I shapefile テーブル名 | psql -h localhost -p 5432 -d データベース名 -U postgres
QGIS を使った Shapefile の取り込み
• QGIS のアドインマネージャーで、 SPIT を使えるようにする。
インポート先のデータベースの設定
インポートするデータの形式設定
Shapefile の選択・追加
PostGIS からエクスポート• pgsql2shp• QGIS
pgsql2shp
• PostGIS データーを shapefile に変換
Pgsql2shp -f shepefile 名 -h localhost -u postgres データベース名 テーブル名
Shapefile として保存 を選択