Keep It Real BLOG

ソフトウェアエンジニア。1児の父。 酒、ラーメン、サッカー好き。旅行も好きですが、普段は出不精で大抵たまプラーザ界隈に居ます。

pythonで60進法の日本測地系の位置情報を10進法の世界測地系に変換する

f:id:naohide_a:20151202202517j:plain

凄いレアなケースだと思うのですが、60進法の日本測地系の位置情報を扱うケースがあり、それを10進法の世界測地系に変換する必要があったので、調べた結果と実装をまとめました。

60進法から10進法への変換

聞き慣れない60進法ですが、何度何分何秒というような表記の位置情報が60進法のようです。
ex. 139.41.50.67 = 139°41′50.67″ (こういった書き方もあるようです)

まず、60進法から10進法への変換を行う為に、ドットで分離します。
そして、以下の計算式で、計算します。
度 + (分 / 60) + (秒 / 60 / 60)

lng_list = '139.41.50.67'.split('.')
lng = float(lng_list[0]) + float(lng_list[1]) / 60 + float('.'.join([lng_list[2], lng_list[3]])) / 60 / 60

lat_list = '35.41.13.13'.split('.')
lat = float(lat_list[0]) + float(lat_list[1]) / 60 + float('.'.join([lat_list[2], lat_list[3]])) / 60 / 60

日本測地系から世界測地系に変換

これは大分複雑な計算式になります。
以下の計算式で計算します。
経度 = 経度 - 緯度 * 0.000046038 - 経度 * 0.000083043 + 0.010040
緯度 = 緯度 - 緯度 * 0.00010695 + 経度 * 0.000017464 + 0.0046017

longitude = lng - lat * 0.000046038 - lng * 0.000083043 + 0.010040   # 139.694204484
latitude = lat - lat * 0.00010695 + lng * 0.000017464 + 0.0046017  # 35.6902052085

以上で、10進法の世界測地系が取得出来るようになりました。

なかなか使うことはないですが、いざ使うとなった時に、絶対メモっておかないと分からない系ですね。。