PostGIS - ryuuikikankyou.web.fc2.comryuuikikankyou.web.fc2.com/postgis2.pdf · PostGISとは? -...
Transcript of PostGIS - ryuuikikankyou.web.fc2.comryuuikikankyou.web.fc2.com/postgis2.pdf · PostGISとは? -...
PostGIS講座
前回のおさらい PostGISとは?
- 空間情報データベースの一種
- プログラミング(SQL)で作業
- 視覚化機能がない(QGISで視覚化)
- 取り扱うデータは属性テーブルのようなも
のだけ
QGIS PostGIS
id 市名 人口
1 金沢 45万
2 白山 13万
id 市名 人口
1 金沢 45万
2 白山 13万
PostGISでの位置情報は? PostGISでは位置情報もテーブルに含まれる
ジオメトリー列 データタイプ(点、線、面)、空間参照系が含まれる。
バイナリとして保存
ジオメトリーコラムテーブル 各テーブルのジオメトリーに関する情報が収められている。
まとめ①
PostGISには視覚化機能がなく、どのようなデータ(ライン?ポリゴン?とか)かわからない
属性テーブルにジオメトリー列が存在し、データタイプが確認できる。
今日の実習内容
テーブルの作成
テーブルの結合
ビューの作成
PosGIS用のテーブルを作る 1.テーブルの作成
2.ジオメトリ列の挿入
3.データの挿入
4.プライマリキーの挿入
5.テーブル統計の取得
1.テーブルの作成
作成したいデータベースで
CREATE TABLE テーブル名 (id int4, place varchar(20));
テーブルを作るコマンド テーブル名 列名とデータタイプ 終
id place テーブル名:市町村
1.テーブルの作成 PostgreSQLのデータタイプ
データタイプ 説明 例
Int4 整数 3
Float4 浮動小数点数 1.0223
Varchar() テキスト Ishikawa
Geometry ジオメトリー 01020000E6
Date 日付 Web Feb 15
time 時間 16:45 2012 PST
・・・
2.ジオメトリー列の挿入
id place the_geom
1
2
SELECT ADDGEOMETRYCOLUMN (‘スキーマ名’,’テーブル名’,’the_geom’,4326,’POINT’,2);
テーブル名:市町村
id Schema Table Name
Geometry Column
SRID
Geometry TYpe
Dimension
1 public 市町村 The_geom
4326
POINT 2
1.市町村にジオメトリーを保存するための列を挿入 2.geometry_columnsテーブルに市町村のジオメトリー情報が格納される
2.ジオメトリー列の挿入
SELECT ADDGEOMETRYCOLUMN (‘スキーマ名’,’テーブル名','the_geom',4326,'POINT',2);
ジオメトリ列挿入のコマンド
スキーマ名(省略可) テーブル名
ジオメトリ列名
地理参照系 (EPSG)
ジオメトリ タイプ
地理参照系 の次元
・ジオメトリータイプ POINT LINESTRING POLYGON
データの挿入
INSERT INTO 市町村 (id,place,the_geom)VALUES (1,'金沢市',ST_GeomFromText('point(136.7006 36.5141)',4326));
データを挿入する:INSERT INTO文
id place the_geom
1 金沢 01010000020E6…
2 野々市 01010000020E6..
左の列から順に入力
,で区切る
ジオメトリーを テキスト表示するコマンド
(経度 緯度) EPSG
プライマリーキーの設定 プライマリーキーとは?
テーブルの各行を一意に識別するための列。
QGISでデータを見る際に必要。
今回はidをキーに設定。
ALTER TABLE 市町村 ADD CONSTRAINT pkey_my_table PRIMARY KEY (id);
テーブルに何かしらの規制を与えるコマンド
制限名。この場合 プライマリーキー名
規制がプライマ リーキーである ことの宣言
プライマリー キーを設定する列名
こうやってテーブルは作られる いちから作ってみると・・・・
create table 市町村(id int4,place varchar(20)); SELECT ADDGEOMETRYCOLUMN('public','市村','the_geom',4326,'POINT',2); INSERT INTO 市町村(id,place,the_geom)VALUES (1,'金沢市',ST_GeomFromText('point(136.7006 36.5141)',4326)); INSERT INTO 市町村(id,place,the_geom)VALUES( 2,'野々市市',ST_GeomFromText('point(136.6051 36.5254)',4326)); INSERT INTO 市町村(id,place,the_geom)VALUES (3,'白山市',ST_GeomFromText('point(136.6440 36.3317)',4326)); ALTER TABLE 市町村 ADD CONSTRAINT pk PRIMARY KEY (id);
id place the_geom
1 金沢 01010000020E6…
2 野々市 01010000020E6…
3 白山 01010000020E6…
実習 金沢、白山、野々市の人口テーブルを作成しよう
Id population
1 450000
2 43000
3 112000
テーブル名:人口
テーブルの結合 複数のテーブルを共通のキーを使って結合する
SELECT文で結合したテーブルの中から必要な列だけを選択できる
結合にはさまざまな種類があるが、今回はinnner joinを使う。
テーブル間に共通するキーだけを元にレコードを表示する
Id 市町村
1 金沢
2 野々市
Id 人口
1 1000
2 100
id 市町村 人口
1 金沢 1000
2 野々市 100
テーブルの結合 id place the_geom
1 金沢 01010000020E6…
2 野々市 01010000020E6…
3 白山 01010000020E6…
Id population
1 450000
2 43000
3 112100 テーブル名:市町村 テーブル名:jinko
SELECT 市町村.id,市町村.place,市町村.the_geom,jinko.population FROM 市町村,人口 WHERE 市長村.id=人口.id;
id place the_geom population
1 金沢 01010000020E6… 450000
2 野々市 01010000020E6… 43000
3 白山 01010000020E6… 112100
ビューの作成 結合した結果を資格化するためにビューを利用する
id place the_geom population
1 金沢 01010000020E6… 450000
2 野々市 01010000020E6… 43000
3 白山 01010000020E6… 112100
CREATE VIEW 市長村別人口 AS SELECT 市町村.id,市町村.place,市町村.the_geom,jinko.population FROM 市町村,人口 WHERE 市長村.id=人口.id;
ビューの作成 ビューを作成したら,Qgisに投影してみよう。