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とは何か) 空間情報の検索、作成、操作ができる 現在は、ベクターデータのみを扱える 近い将来、ラスターも扱える
DBMSとSQL PostGISを使うには、データベースの基礎知識が必要となる。 そのためここでは少し、データベース操作の基礎となる、データベースマネージメントとSQLについてpgAdmin III を使って勉強する
pgAdmin III pgAdminは、PostgreSQLの操作をグラフィカルユーザーインターフェース(GUI)で可能にする コマンドライン(CUI)のpsqlよりも使いやすい! PostGISのコマンドはすべてpgAdminから可能
pgAdmin III データベースの中身 データベースサーバー データベース スキーマ テーブル
スキーマとは? CREATE SCHEMA project_a; データベース内に作られるディレクトリーのようなもの スキーマ間の情報検索が可能 (データベース間は不可能) 例えば、基本的なデータは、 ‘base’というスキーマに保存し、プロジェクトAに関するデータは、’project_a’というスキーマに保存する。 データのバックアップなど、維持管理が簡単になる。 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)を用いて行う。
テーブルの作成 例えば、下のようなテーブルを作るとすると、 Id place CREATE TABLE my_table (id int4, place varchar (20));
データの挿入 先ほどのテーブルにデータを格納するには、 INSERT INTO my_table VALUES (1, 'Tokyo'); Id place 1 Tokyo 2 Sapporo 3 Sendai INSERT INTO my_table VALUES (1, 'Tokyo'); INSERT INTO my_table VALUES (2, 'Sapporo'); INSERT INTO my_table VALUES (3, 'Sendai');
ジオメトリー列の挿入 先ほどのテーブルに、ジオメトリーを保存するための列を挿入する。 Id place the_geom 1 Tokyo 2 Sapporo 3 Sendai SELECT ADDGEOMETRYCOLUMN ('public', 'my_table', 'the_geom', 4326, 'POINT', 2);
ジオメトリーを挿入 先ほど挿入したジオメトリー列に実際の場所の情報を格納する Id place the_geom 1 Tokyo 0101000020E6……… 2 Sapporo 3 Sendai UPDATE my_table SET the_geom = ST_GeomFromText (′POINT (139.691701 35.689506) ′ 4326) WHERE place = ′Tokyo′; 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をキーに設定。 Id place the_geom 1 Tokyo 0101000020E6……… 2 Sapporo 3 Sendai 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
挿入したデータの検索 テーブル内のすべての行と列を表示 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); my_table my_tableにジオメトリーを保存するための列を挿入 geometry_columns テーブルに挿入したジオメリー列とそのテーブルに関する情報を挿入 Id place the_geom 1 Tokyo 2 Sapporo 3 Sendai ADDGEOMETRYCOLUMNはPostGISコマンド 必要な情報は、 スキーマ名(省略可) : ‘public’ テーブル名 : ‘my_table’ ジオメトリー列名 : ‘the_geom’ 地理参照系ID (EPSG) : 4326 ジオメトリータイプ : ‘POINT’ 地理参照系の次元 : 2 geometry_columns Id Schema Table Name Geometry Column SRID Geometry Type Dimension 1 Public my_table the_geom 4326 POINT 2
ジオメトリー列の挿入 ADDGEOMETRYCOLUMNはPostGISコマンド 必要な情報は、 SELECT ADDGEOMETRYCOLUMN ('public', 'my_table', 'the_geom', 4326, 'POINT', 2); ADDGEOMETRYCOLUMNはPostGISコマンド 必要な情報は、 スキーマ名(省略可) : ‘public’ テーブル名 : ‘my_table’ ジオメトリー列名 : ‘the_geom’ 地理参照系ID (EPSG) : 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 3 Sendai
データベース class2010 スキーマ public コメント テーブルについてコメントを残せる テーブル my_table 列 Id, place, the_geom インデックス 制限 プライマリーキー
実際のテーブル
実際には、、、 テーブルを一から作り上げることは少ない 既存のデータを使うことが多い ということで、、、 PostGISへのデータの取り込み方を知る必要がある
PostGISへのデータの取り込み psql2shp QGIS ogr2ogr ogr2gui コマンドラインツール、shapefileのみ 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として保存 を選択