Pythonで日本測地系から世界測地系に変更するには?
凄いレアなケースだと思うのですが、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進法の世界測地系が取得出来るようになりました。
GitHub
GitHub上に簡単なクラスを用意しましたので、もし良ければ使ってください。
Dark Mode
なかなか使うことはないですが、いざ使うとなった時に、絶対メモっておかないと分からない系ですね。。こういうものは、ブログでもいいので残していきたいものです。