PostGISですごい勘違いしていることに気がついた
2011/02/03 | PostgreSQL
PostGISなカラムに位置データを格納するとき、こんな具合のSQLを記述する。
INSERT INTO table (position) VALUES (GeomFromText(‘POINT(135 35)’,4326));
まずいつも間違えてしまうのは、座標を指定する方法。最初に経度で次に緯度。そして次に間違えるのが経度と緯度の区切り文字。これはカンマではなくてスペースなのだ。この2点はいつもよく間違える。
そしてようやく気づいたことがある。「今までこんなことも知らなくて、よくやってこれたね」って感じ。GeomFromTextというのは関数名だ(これはもちろん知っていた)。その引数は最初の引数が位置座標を表すテキストで、二つ目が座標系を表す数字だ(これも知っていた)。知らなかったのはGeomFromText関数の最初の引数についてだ。
この引数(シングルクォーテーションで囲まれたPOINT(135 35)の部分)はそのまま文字列なのだ。カッコでくくられているが紛れもない文字列だ。この場合は13文字の文字列。実は全然分かっていなくてPOINTという関数を使っているものだとばかり思っていた。すごく恥ずかしい。しかし、自分自身で気づけてよかった(でも確証がないのが悲しい)。
ちなみにPOINTという関数は実際に存在する。幾何型変換関数でpoint型の戻り値がある。いろいろ難しいね。