[GIS] 日本測地系からWGS84への変換パラメータの謎を追え
はじめに
これは、FOSS4G Advent Calendar (http://atnd.org/events/34052) 用の記事です。
ハードル上げないでね、と申し上げたのに、先に書かれた方々の中に裏切り者がおるorz
測地系
測地系は、ある位置を緯度経度であらわす際に用いる前提条件を指します。詳しくはgoogleさん等に聞いて下さい。
わが国では日本測地系(Tokyo)が2002年3月まで使用されてきましたが、2002年4月から世界測地系(JGD2000)に変わりました。また、GPSは日本測地系とも世界測地系とも異なる、WGS84という測地系を前提にしています。
これら3測地系のうち、WGS84とJGD2000はあまり差がない(WGS84は測地系パラメータの有効桁数を落としている)のでそのまま使ってもだいたいいいんですが、TokyoとJGD2000とは400mぐらいズレるので、このままでは使えません。そのため、Tokyoに基づ地理空間データをJGD2000またはWGS84に変換しなければなりません。
変換ツールは、Proj.4(http://proj.osgeo.org/)が有名ですし、地図データのフォーマットもあわせて変換する場合にはGDAL/OGR(http://www.gdal.org/)を使いますし、空間データベースを扱うPostGIS(http://postgis.refractions.net/)でもこういった変換機能を持っています。そのほかでもGISと呼ばれる部類のものなら基本的に持っている機能です。
ただ、ツールはいいとして、TokyoからWGS84に変換するためのパラメータが複数個ある、というなんともややこしいことになっています。
3種類の変換パラメータ
測地系を変換するには、Bursa-Wolfパラメータと呼ばれる、平行移動(3パラメータ)、拡大縮小(1パラメータ)、回転(3パラメータ)からなる7パラメータで表現することが多いです。
平行移動だけを使う3パラメータと、全て使う7パラメータのいずれかでパラメータを指定します。
GISや座標変換ソフトウェアは、これらのパラメータのデータベースを持っています。Proj.4とかGDALとかPostGISとかについては、WGS84を基準にして、各測地系の相互変換を行っています。
Tokyo から WGS84 への変換パラメータ(3パラメータ)は次の通りです。
+towgs84=-146.336,506.832,680.254,0,0,0,0
しかし Proj.4 では次のパラメータを使っています。
+towgs84=-146.414,507.337,680.507,0,0,0,0
あとPostGISのパラメータはまた違います。
+towgs84=-148,507,685,0,0,0,0
同じ効果を求めているはずなのに3種類のパラメータが出てきました。
Proj.4 のパラメータはtoJGD2000
「世界測地系と座標変換」(飛田幹男著)に実は答があって、
+towgs84=-146.336,506.832,680.254,0,0,0,0
は、TokyoからWGS84への変換パラメータで間違いなく、
+towgs84=-146.414,507.337,680.507,0,0,0,0
は、TokyoからITRF94への変換です。
ITRFはJGDと同じです(JGDはわが国が責任をもって管理する範囲のみ有効とするのでITRFとは意味あいが異なります)。
どちらを使うと良いの?
WGS84とJGD2000とは、メートルの誤差が出るようなGPSを使うような一般的な使い方では、気にならないレベルの差しか出ないんだそうです。
じゃあ気にしない方が良い、だからどっちもOK、でないかな、と思います。
さらにいうと、TokyoからJGD2000に変換するには、測地網の歪みがあったため、7パラメータ変換でも少しずれることになります。本気で精密に変換するなら http://vldb.gsi.go.jp/sokuchi/tky2jgd/ や http://www.osgeo.jp/foss4g-mext/ 等を使わなければなりません。
以下は、あえて選ぶとしたら、の話です。
towgs84となっているのですから、WGS84への変換パラメータを指定しないといけない、と考えて、TokyoからWGS84へのパラメータを使う方が厳密さを確保するには良いかも知れません。
しかし、たいていのパラメータデータベースでは、JGD2000からWGS84への変換パラメータは、0,0,0,0,0,0,0 (変換前と変換後で変わらない)です。
これまで、JGD2000とWGS84は若干の差しかない、と言ってきましたが、逆に言うと、若干ですが差があるのです。厳密さを確保するには、JGD2000のtowgs84パラメータは0,0,0,0,0,0,0ではいけないはず。厳密さは意識しない方がいいようです。
ある地理空間データについて、GPSの位置とずれるのと、他のJGD2000の地理空間データとずれるのと、どちらがよろしくないかと言えば、後者ではないかと。
なら、WGSを、ITRF/JGD の劣化版とととらえ、towgs84と書いてあってもtoJGD2000のパラメータを使った方が良いかな、と思います。
PostGISのパラメータ
+towgs84=-148,507,685,0,0,0,0 については、これが全く分からん。
座標変換専門のライブラリであるProj.4では4.8.0以降はJGD2000への変換パラメータを使っていますが、それより前は4.4.5でだけ-148,507,685が使われ、それ以外では0,0,0,0,0,0,0となっています。4.4.6のリリースが2003年3月のようですが、はっきり追えませんでした。
地理空間データを加工するためのライブラリであるGDALは、1.7(2010年1月)では0,0,0,0,0,0,0、1.8(2011年1月)では-148,507,685を使っているけど1.9(2012年1月)ではJGD2000への変換パラメータを使ってます。
PostGIS/QGISについては、時期的に見たらGDALのcsvファイルを反映した結果でないかと考えられます。確証無いですけど。
ただ「犯人」がGDALなのかどうかより、-148,507,685 のパラメータの出元がどこなのか、が知りたかったんですが、タイムアップ。結局わからずじまいでした。