PostGISでテーブルを作る

2009/07/26 | PostgreSQL

データベースの作り方で一工夫必要だったわけだが、テーブルに位置情報を格納するカラムを作るのはさらに一工夫必要だ。

ID番号、地点名、位置情報の3つを格納するテーブルを作成することにする。テーブルを作成する際は、まず最初に、位置情報を格納するカラム以外のカラムだけでテーブルを作成する。つまりID番号、地点名だけのテーブルを作成する。例えばこんな具合に。

CREATE TABLE positions (
id int4 SERIAL PRIMARY KEY,
name varchar(128)
);

そして、PostGISをインストールした際にたくさん設置された関数群のうちの一つを使用して、位置情報を格納するカラムを追加する。ここではlatlngというカラム名を使用することにする。

SELECT AddGeometryColumn(‘public’,’positions’,’latlng’,4326,’POINT’,2);

publicはスキーマ名
positionsはテーブル名
latlngはカラム名
4326は測地系の番号(この数字はWGS84)
POINTは型(他にLINESTRINGとかPOLYGONとか)
2は2次元

つまりSELECT文を使って、AddGeometryColumn関数を実行しているということ(この関数でカラムを追加)。この作業でようやくPostGISなテーブルが作成される。ここまできて、ようやく今までやってきたことの意味が理解できるようになる。

4326ってどこから出てきたのか。実はこの数字はPostGISなデータベースに自動的に作られるテーブル「spatial_ref_sys」に全て格納されている。このテーブルには約3000行のデータが格納されているのだが、これらは全て座標系だ。4326の値は外部キーのようになっているということ。

そして位置情報格納カラム「latlng」を作成した関数AddGeometryColumnはカラムを追加するだけでなくて、そのカラムの情報を「geometry_coumns」に格納している。ためしにこのテーブルを開くと、先ほどの関数の引数と似たような内容でデータが格納されていることが一目瞭然だ。

もうここまでくればPostGISに関する理解はほぼできたといっても過言ではない(と思いたい)。「なんで最初からわけのわからないテーブルが二つも作られているの」「どうやって使うの」という問題は通り過ぎてしまったわけで、後は希望通りの処理を返してくれるPostGISな関数がどれなのか、ということを探すことになる。

ただしもう一つ知っておかなければいけないことがある。それは測量に関する知識だ。当たり前だが地球は丸い。というか球だ(実際は球ではなくてもっと歪んでいる)。球を無理やり平面に押し込めたのが地図だ。軟式のテニスボールをカッターで切り刻んでみればわかるが、本来球はどうやっても平面にはならない。でも、それでも人間が理解しやすいようにPostGISは答えを返してくれる(らしい)。そんなPostGISをこれから徐々に使っていこうと思う。

当面PostGISを使うので、思ったことや気づいたこと、わかったことをメモしていくことにする。

コメントを残す


守谷市(まちの情報ポータル) 無料アンケートレンタルjpForm.net