450 likes | 785 Views
PostGIS - 1 ( 入門編). PostGIS - 1 (入門編). PostGIS と PostgreSQL について ( PostGIS とは何か) DBMS と SQL ( 基本的な SQL 構文について) PostGIS ジオメトリーと SRS ( PostGIS のジオメトリーと投影系について) 様々なジオメトリータイプ PostGIS ジオメトリーの作り方 EPSG コード PostGIS データの作り方 (一番簡単なジオメトリーを実際に手で作って見る。ポイントデータだけ)
E N D
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 データベースの中身 データベースサーバー スキーマ データベース テーブル
スキーマとは? データベース内に作られるディレクトリーのようなもの スキーマ間の情報検索が可能 (データベース間は不可能) 例えば、基本的なデータは、 ‘base’というスキーマに保存し、プロジェクトAに関するデータは、’project_a’というスキーマに保存する。 データのバックアップなど、維持管理が簡単になる。 CREATE SCHEMA project_a;
PostGISのすべてのファンクションが収められているPostGISのすべてのファンクションが収められている ファンクション 各テーブルのジオメトリーについての情報が収められる ジオメトリーコラム テーブル 空間参照系 テーブル 空間参照系(SRS)についての情報が収められている
空間参照ID (SRID) • 座標参照系(CRS)が標準化されている • 代表的なコード系はEPSG(European Petroleum Survey Group)コード • 例えば、 • www.spatialreference.org
PostGISが動くデータベースを作る 日本語を使う場合 1.データベースのルートで右クリックして、まずは、すべてのデータベースを更新する 2.続いて、同じ場所で右クリックをして、データベースを新規に作成する。
データベース用語 • データベース • スキーマ • データベースの下に作られるディレクトリー構造のようなもの • テーブル • データを収める入れ物 • ビュー • データ自身ではなく、データを検索するクエリーを保存したもの
テーブルの作成 • テーブルの作成、削除、修正、検索などはSQL(Structures Query Language)を用いて行う。 • SQLはプログラム言語ではなく、データベースと話をするための言葉
テーブルの作成 • 例えば、下のようなテーブルを作るとすると、 CREATE TABLE my_table(id int4, placevarchar (20));
データの挿入 • 先ほどのテーブルにデータを格納するには、 INSERT INTO my_table VALUES (1, 'Tokyo'); INSERT INTO my_table VALUES (2, 'Sapporo'); INSERT INTO my_table VALUES (3, 'Sendai');
ジオメトリー列の挿入 • 先ほどのテーブルに、ジオメトリーを保存するための列を挿入する。 SELECT ADDGEOMETRYCOLUMN ('public', 'my_table', 'the_geom', 4326, 'POINT', 2);
ジオメトリーを挿入 • 先ほど挿入したジオメトリー列に実際の場所の情報を格納する 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をキーに設定。 ALTER TABLW my_table ADD CONSTRAINT pkey_my_table PRIMARY KEY (Id);
テーブルの作成 CREATE TABLE my_table(id int4, placevarchar (20)); テーブルを作るコマンド 列名とデータタイプ 列名とデータタイプ テーブル名 セミコロン
テーブルの作成 • PostgreSQLのデータタイプ
データの挿入 INSERT INTO my_table VALUES (1, 'Tokyo'); データを挿入するコマンド データを挿入するコマンド 挿入するデータ 各列の順番に対応 データを挿入するテーブル
挿入したデータの検索 • テーブル内のすべての行と列を表示 • Tokyoのidを表示 -> テーブルから、列placeが‘Tokyo’であるidの行を表示 SELECT * FROM my_table; テーブルの指定 テーブル名 行を検索 するコマンド SELECT id FROM my_tableWHERE place = ‘Tokyo’;
ジオメトリー列の挿入 SELECT ADDGEOMETRYCOLUMN ('public', 'my_table', 'the_geom', 4326, 'POINT', 2); my_table my_tableにジオメトリーを保存するための列を挿入 geometry_columnsテーブルに挿入したジオメリー列とそのテーブルに関する情報を挿入 geometry_columns
ジオメトリー列の挿入 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 SETthe_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′;
プライマリーキーの設定 • データ(各行)が一意であることを保障する仕組み 制限名。この場合プライマリーキー名 テーブルに何かしらの規制を加えるためのコマンド ALTER TABLE my_table ADD CONSTRAINT pkey_my_tablePRIMARY KEY (Id); 規制がプライマリーキーであることの宣言 プライマリーキーを設定する列名
テーブル my_table コメント テーブルについてコメントを残せる データベース class2010 インデックス スキーマ public 列 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 shapefiletableame > 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データベース名 テーブル名