PostGIS - ryuuikikankyou.web.fc2.comryuuikikankyou.web.fc2.com/postgis2.pdf · PostGISとは? -...

19
PostGIS講座

Transcript of PostGIS - ryuuikikankyou.web.fc2.comryuuikikankyou.web.fc2.com/postgis2.pdf · PostGISとは? -...

Page 1: PostGIS - ryuuikikankyou.web.fc2.comryuuikikankyou.web.fc2.com/postgis2.pdf · PostGISとは? - 空間情報データベースの一種 - プログラミング(SQL)で作業 - 視覚化機能がない(QGISで視覚化)

PostGIS講座

Page 2: PostGIS - ryuuikikankyou.web.fc2.comryuuikikankyou.web.fc2.com/postgis2.pdf · PostGISとは? - 空間情報データベースの一種 - プログラミング(SQL)で作業 - 視覚化機能がない(QGISで視覚化)

前回のおさらい PostGISとは?

- 空間情報データベースの一種

- プログラミング(SQL)で作業

- 視覚化機能がない(QGISで視覚化)

- 取り扱うデータは属性テーブルのようなも

のだけ

QGIS PostGIS

id 市名 人口

1 金沢 45万

2 白山 13万

id 市名 人口

1 金沢 45万

2 白山 13万

Page 3: PostGIS - ryuuikikankyou.web.fc2.comryuuikikankyou.web.fc2.com/postgis2.pdf · PostGISとは? - 空間情報データベースの一種 - プログラミング(SQL)で作業 - 視覚化機能がない(QGISで視覚化)

PostGISでの位置情報は? PostGISでは位置情報もテーブルに含まれる

ジオメトリー列 データタイプ(点、線、面)、空間参照系が含まれる。

バイナリとして保存

Page 4: PostGIS - ryuuikikankyou.web.fc2.comryuuikikankyou.web.fc2.com/postgis2.pdf · PostGISとは? - 空間情報データベースの一種 - プログラミング(SQL)で作業 - 視覚化機能がない(QGISで視覚化)

ジオメトリーコラムテーブル 各テーブルのジオメトリーに関する情報が収められている。

Page 5: PostGIS - ryuuikikankyou.web.fc2.comryuuikikankyou.web.fc2.com/postgis2.pdf · PostGISとは? - 空間情報データベースの一種 - プログラミング(SQL)で作業 - 視覚化機能がない(QGISで視覚化)

まとめ①

PostGISには視覚化機能がなく、どのようなデータ(ライン?ポリゴン?とか)かわからない

属性テーブルにジオメトリー列が存在し、データタイプが確認できる。

Page 6: PostGIS - ryuuikikankyou.web.fc2.comryuuikikankyou.web.fc2.com/postgis2.pdf · PostGISとは? - 空間情報データベースの一種 - プログラミング(SQL)で作業 - 視覚化機能がない(QGISで視覚化)

今日の実習内容

テーブルの作成

テーブルの結合

ビューの作成

Page 7: PostGIS - ryuuikikankyou.web.fc2.comryuuikikankyou.web.fc2.com/postgis2.pdf · PostGISとは? - 空間情報データベースの一種 - プログラミング(SQL)で作業 - 視覚化機能がない(QGISで視覚化)

PosGIS用のテーブルを作る 1.テーブルの作成

2.ジオメトリ列の挿入

3.データの挿入

4.プライマリキーの挿入

5.テーブル統計の取得

Page 8: PostGIS - ryuuikikankyou.web.fc2.comryuuikikankyou.web.fc2.com/postgis2.pdf · PostGISとは? - 空間情報データベースの一種 - プログラミング(SQL)で作業 - 視覚化機能がない(QGISで視覚化)

1.テーブルの作成

作成したいデータベースで

CREATE TABLE テーブル名 (id int4, place varchar(20));

テーブルを作るコマンド テーブル名 列名とデータタイプ 終

id place テーブル名:市町村

Page 9: PostGIS - ryuuikikankyou.web.fc2.comryuuikikankyou.web.fc2.com/postgis2.pdf · PostGISとは? - 空間情報データベースの一種 - プログラミング(SQL)で作業 - 視覚化機能がない(QGISで視覚化)

1.テーブルの作成 PostgreSQLのデータタイプ

データタイプ 説明 例

Int4 整数 3

Float4 浮動小数点数 1.0223

Varchar() テキスト Ishikawa

Geometry ジオメトリー 01020000E6

Date 日付 Web Feb 15

time 時間 16:45 2012 PST

・・・

Page 10: PostGIS - ryuuikikankyou.web.fc2.comryuuikikankyou.web.fc2.com/postgis2.pdf · PostGISとは? - 空間情報データベースの一種 - プログラミング(SQL)で作業 - 視覚化機能がない(QGISで視覚化)

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テーブルに市町村のジオメトリー情報が格納される

Page 11: PostGIS - ryuuikikankyou.web.fc2.comryuuikikankyou.web.fc2.com/postgis2.pdf · PostGISとは? - 空間情報データベースの一種 - プログラミング(SQL)で作業 - 視覚化機能がない(QGISで視覚化)

2.ジオメトリー列の挿入

SELECT ADDGEOMETRYCOLUMN (‘スキーマ名’,’テーブル名','the_geom',4326,'POINT',2);

ジオメトリ列挿入のコマンド

スキーマ名(省略可) テーブル名

ジオメトリ列名

地理参照系 (EPSG)

ジオメトリ タイプ

地理参照系 の次元

・ジオメトリータイプ POINT LINESTRING POLYGON

Page 12: PostGIS - ryuuikikankyou.web.fc2.comryuuikikankyou.web.fc2.com/postgis2.pdf · PostGISとは? - 空間情報データベースの一種 - プログラミング(SQL)で作業 - 視覚化機能がない(QGISで視覚化)

データの挿入

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

Page 13: PostGIS - ryuuikikankyou.web.fc2.comryuuikikankyou.web.fc2.com/postgis2.pdf · PostGISとは? - 空間情報データベースの一種 - プログラミング(SQL)で作業 - 視覚化機能がない(QGISで視覚化)

プライマリーキーの設定 プライマリーキーとは?

テーブルの各行を一意に識別するための列。

QGISでデータを見る際に必要。

今回はidをキーに設定。

ALTER TABLE 市町村 ADD CONSTRAINT pkey_my_table PRIMARY KEY (id);

テーブルに何かしらの規制を与えるコマンド

制限名。この場合 プライマリーキー名

規制がプライマ リーキーである ことの宣言

プライマリー キーを設定する列名

Page 14: PostGIS - ryuuikikankyou.web.fc2.comryuuikikankyou.web.fc2.com/postgis2.pdf · PostGISとは? - 空間情報データベースの一種 - プログラミング(SQL)で作業 - 視覚化機能がない(QGISで視覚化)

こうやってテーブルは作られる いちから作ってみると・・・・

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…

Page 15: PostGIS - ryuuikikankyou.web.fc2.comryuuikikankyou.web.fc2.com/postgis2.pdf · PostGISとは? - 空間情報データベースの一種 - プログラミング(SQL)で作業 - 視覚化機能がない(QGISで視覚化)

実習 金沢、白山、野々市の人口テーブルを作成しよう

Id population

1 450000

2 43000

3 112000

テーブル名:人口

Page 16: PostGIS - ryuuikikankyou.web.fc2.comryuuikikankyou.web.fc2.com/postgis2.pdf · PostGISとは? - 空間情報データベースの一種 - プログラミング(SQL)で作業 - 視覚化機能がない(QGISで視覚化)

テーブルの結合 複数のテーブルを共通のキーを使って結合する

SELECT文で結合したテーブルの中から必要な列だけを選択できる

結合にはさまざまな種類があるが、今回はinnner joinを使う。

テーブル間に共通するキーだけを元にレコードを表示する

Id 市町村

1 金沢

2 野々市

Id 人口

1 1000

2 100

id 市町村 人口

1 金沢 1000

2 野々市 100

Page 17: PostGIS - ryuuikikankyou.web.fc2.comryuuikikankyou.web.fc2.com/postgis2.pdf · PostGISとは? - 空間情報データベースの一種 - プログラミング(SQL)で作業 - 視覚化機能がない(QGISで視覚化)

テーブルの結合 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

Page 18: PostGIS - ryuuikikankyou.web.fc2.comryuuikikankyou.web.fc2.com/postgis2.pdf · PostGISとは? - 空間情報データベースの一種 - プログラミング(SQL)で作業 - 視覚化機能がない(QGISで視覚化)

ビューの作成 結合した結果を資格化するためにビューを利用する

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;

Page 19: PostGIS - ryuuikikankyou.web.fc2.comryuuikikankyou.web.fc2.com/postgis2.pdf · PostGISとは? - 空間情報データベースの一種 - プログラミング(SQL)で作業 - 視覚化機能がない(QGISで視覚化)

ビューの作成 ビューを作成したら,Qgisに投影してみよう。