« 2008年8月 | メイン | 2008年10月 »

2008年9月25日

PostGISで日本測地系(Tokyo)から世界測地系(WGS84)への変換ができない場合

いきなりPostGISのお話。

PostGISを利用して、位置情報を使ったアプリケーションのプロトタイプを書いていたところ、どうも実際の位置と合わない。元データは日本測地系の緯度経度で、世界測地系へ変換(ST_Transform)してジオメトリカラムに格納していた。クエリーで投げていたのは世界測地系の緯度経度だったのだが、帰ってくる結果が400mほどずれる。地図で確認すると、まさに日本測地系と世界測地系の誤差。

プログラムを見直して、最終的に行き着いたのは実際に測地系を変換している(であろう)ST_Transform。

SELECT ST_AsText(ST_Transform(ST_GeomFromText('POINT(139.00 35.00)', 4301), 4326));

としてみると、

139.00 35.00

という値がしれーっと帰ってくる。「おめー、仕事しろYO!」。

解決にあたって参考になったのは、下記の2つのページ。意外に情報が少ない。

Re: PostGISへのデータ入力時の投影法変換|freeml
くりてぃかるひっと!はてな分室:PostGIS の測地系変換

UPDATE spatial_ref_sys 
SET proj4text='+proj=longlat +ellps=bessel towgs84=-147.54,507.26,680.47'
WHERE srid=4301;

とすれば、

SELECT proj4text FROM spatial_ref_sys WHERE srid=4301;

前:+proj=longlat +ellps=bessel +no_defs
後:+proj=longlat +ellps=bessel towgs84=-147.54,507.26,680.47

となる。検索結果にも満足。無事解決。

念のためバージョンも記述する。
PostgreSQL:8.1.11
PostGIS:1.3.3
proj:4.6.1
geos:3.0.0


↓GIS全般の解説、PostGISの取り扱い、日本の測地系に関する補足あり

入門Webマッピング―自分で作るオリジナルのデジタル地図
テイラー ミッチェル
オライリージャパン
売り上げランキング: 51738