データベースの中にどのように地物を保存し、表現できるでしょうか? このレッスンではOGCによって定義されている単純地物モデルを見ていきます。
このレッスンの目標: SFSモデルとは何か、それをどうやって使うかを学習します。
The Open Geospatial Consortium (OGC), an international voluntary consensus standards organization, originated in 1994. In the OGC, more than 370+ commercial, governmental, nonprofit and research organizations worldwide collaborate in an open consensus process encouraging development and implementation of standards for geospatial content and services, GIS data processing and data sharing. - Wikipedia
The Simple Feature for SQL (SFS) モデルとはデータベースに地理空間データを格納する 非トポロジカル な方法で、データへのアクセス、操作、構築のための関数を定義しています。
モデルはポイントやラインストリング、ポリゴンのタイプ(そしてそれらの集合)で地理空間データを定義します。
詳細については OGC Simple Feature for SQL 標準を参照して下さい。
people テーブルにポイントフィールドを追加してみましょう:
alter table people add column the_geom geometry;
ジオメトリフィールドの型はどの タイプ のジオメトリであるかを指定していないことがわかるでしょう。そこで制約が必要となります:
alter table people
add constraint people_geom_point_chk
check(st_geometrytype(the_geom) = 'ST_Point'::text OR the_geom IS NULL);
これはポイントジオメトリまたはnull値だけを受け入れる制約をテーブルに追加します。
cities という新しいテーブルを作成して、それに適切な列を追加します。それにはポリゴン(市の境界)を格納するジオメトリフィールドを含めて、ジオメトリをポリゴンに制限する制約を追加して下さい。
この時点で geometry_columns テーブルにもエントリを追加する必要があります:
insert into geometry_columns values
('','public','people','the_geom',2,4326,'POINT');
なぜでしょう? geometry_columns はデータベースの中のどのテーブルがジオメトリデータを持っているかをアプリケーションが認識するために使われます。
ノート
上記の INSERT ステートメントでエラーが発生する場合にはまずこのクエリを実行します:
select * from geometry_columns;
If the column :kbd:`f_table_name` contains the value :kbd:`people`, then
this table has already been registered and you don't need to do anything
more.
2 の値は次元の数を指しています。この場合は2です: x と y.
4326 の値は私たちが使っている投影法を指しています。WGS 84は4326の数字で参照されます(EPSGに関する以前の解説を参照して下さい)。
私たちのテーブルにジオメトリを格納することができるようになりました:
insert into people (name,house_no, street_id, phone_no, the_geom)
values ('Fault Towers',
34,
3,
'072 812 31 28',
'SRID=4326;POINT(33 -33)');
ノート
上記の新しいエントリには使用する投影法(SRID)を指定する必要があります。これはプレーンテキストを用いて新しいポイントのジオメトリを入力すると正しい投影情報が自動的に付加されないためです。新しいポイントはデータセットと同じSRIDを使用する必要がありますのでそれを指定しなければいけません。
もしグラフィカルなインターフェイスを使用していれば、たとえば、各ポイントの投影法は自動で指定されます。つまり以前行ったようにデータセットに投影法を指定しておけば、すべてのポイントに対して正しい投影法を指定しなくてもよいのです。
ではQGISを開いて people テーブルを表示します。そしてデータベースでレコードの編集/追加/削除を試し、選択クエリを実行してデータがどのように変更されたかを見ます。
QGIS で PostGIS レイヤーを読み込むには レイヤ ‣ PostGISレイヤの追加 メニューオプションまたは次のツールバーボタンを使用します:
ダイアログが表示されます:
新規 ボタンをクリックしてこのダイアログを開きます:
新しい接続を定義します。例えば:
Name: myPG
Service:
Host: localhost
Port: 5432
Database: address
User:
Password:
QGISが address データベースを見つけたかどうか、そしてユーザ名とパスワードが正しいことを確認するには、 接続テスト をクリックします。正しく動作したら ユーザ名の保存 と パスワード保存 の横にあるチェックボックスをチェックします。そして OK ボタンをクリックしてこの接続を作成します。
PostGISレイヤの追加 ダイアログに戻り 接続 をクリックし、いつものようにプロジェクトにレイヤを追加します。
空間オブジェクトをデータベースに追加してGISソフトウェアで表示する方法を見てきました。
次はデータベースへデータをインポートする方法、およびデータベースからデータをエクスポートする方法を見ていきます。