##GPSのデータって難しいね
とあるプロジェクトでジオ系のデータを扱うことになったのだが、あまりの複雑さに発狂しそうになった。
専門家ではないので大まかに分けると以下の2つが混在する世界らしい
- ミリ秒表示と度表示
- 日本測地系と世界測地系
まあ、いろいろなレガシーな理由があってこの2つが混ざり合っているのだが、要するにやりたいことは 元データをgoogle mapに表示することだ。考えるな、感じろ!
##ざっくりざっくりデータの見方
ミリ秒表示は「503329984,128544000」というような小数点を含まない数字で表される。一方度数は「35.70989125,139.81067」のような小数点を含んだ数字で表される。google mapは度数表示
測地系はもはや聞くしかない。ちなみにgoogle mapは世界測地系,Y!地図は日本測地系だ。いまは世界測地の方がポピュラーという噂も聞いたが、いろいろ大人の事情があるらしくまだ混在している
##計算式
下記のサイトを参考にさせていただいたところ計算式は以下のとおり。
いま「128544000,503329984」(LAT,LON:緯度経度)日本測地系で与えられる地点を計算すると
#ミリ秒から度への変換
元データを3,600,000で割る
128544000 -> 35.70666667
503329984 -> 139.8138844
#日本測地系から世界測地系へ変換
上で求めた度を
jp_lat=35.70666667
jp_lon= 139.8138844
とすると
lat = jp_lat - jp_lat * 0.00010695 + jp_lon * 0.000017464 + 0.0046017;
lon = jp_lon - jp_lat * 0.000046038 - jp_lon * 0.000083043 + 0.010040;
となる(理由はわかりませんw)
まあ、地球は丸いのでちょっと誤差が出るらしい
こうやって計算した結果が
35.70989125,139.81067
google mapに貼ってみると
はい、無事にスカイツリーが表示されました。やったね
#ついでにリンクの仕方を覚える
リンクすると地点を表示するようにするにはこんな感じらしい
LATとLONをお間違えなく