2013年11月18日月曜日

[GPS] GPSの度分を10進法に変換する

Google MapにGPS情報をプロットする際には、10進法の緯度経度が使われます。

例えば、東京駅八重洲南口の座標は、
35.680101,139.768678
です。



しかし、GPSロガー等の機器の生の出力では、10進法ではなく度,分が使われている場合があります。

例えば、私の所有するGPSロガーの出力は以下の通りで、
$GPRMC,045511.000,A,3542.8956,N,13945.6317,E,0.21,53.71,030813,,,A*5B
$GPGGA,045511.000,3542.8956,N,13945.6317,E,1,06,3.0,37.9,M,39.4,M,,0000*65
$GPGSA,A,3,19,27,03,06,18,16,,,,,,,4.1,3.0,2.8*38
$GPGSV,4,1,15,01,20,203,08,03,63,024,46,06,47,048,42,07,39,302,12*70
$GPGSV,4,2,15,08,14,322,,09,08,324,20,11,42,217,,13,08,247,*7A
$GPGSV,4,3,15,16,46,099,34,18,08,055,21,19,69,319,32,21,01,038,*7E
$GPGSV,4,4,15,22,16,087,14,23,00,223,,27,56,034,41*46
$GPRMC,045512.000,A,3542.8957,N,13945.6315,E,0.17,53.71,030813,,,A*5E
...

そこから、GPGGAのみを抜き出してみます。
$GPGGA,045510.000,3540.8061,N,13946.1207,E,1,06,3.0,38.0,M,39.4,M,,0000*6E
ここで、 3540.8061,N,13946.1207,E, は、北緯35度40.8061分、東経139度46.1207分 を表しています。

したがって、この値を100で割っただけの値をGoogle Mapでプロットしようとすると、おかしな位置になってしまいます。

まさかの藤沢市。


こんな時は、以下の変換式に当てはめる。

GPSロガーの出力(度,分)をGoogle Map(10進数)に変換する

Google Mapの緯度 = (GPSロガーの緯度 ÷ 100.0)の整数部分 + (GPSロガーの緯度 ÷ 100)の小数部分÷60.0×100.0
Google Mapの経度 = (GPSロガーの経度 ÷ 100.0)の整数部分 + (GPSロガーの経度 ÷ 100)の小数部分÷60.0×100.0


例えば、Pythonで緯度を変換する場合は、以下の通り。
>>> import math
>>> logger_latitude = 3540.8061
>>> decimal, integer = math.modf(logger_latitude/100.0)
>>> gps_latitude = integer + decimal / 60.0 * 100.0
>>> gps_latitude
35.68010166666666
確かに、東京駅の10進数緯度35.680101になっています。


ちなみに、以下のページから、度分秒と10進数の座標の相互変換を行うことが出来ます。
新しい Google マップで緯度と経度を使用する

0 件のコメント:

コメントを投稿

Related Posts Plugin for WordPress, Blogger...