緯度経度と平面直角座標の相互変換を実装するための数式
1. はじめに
1.1. 背景
緯度経度はご存知のように地球上の位置を角度で表現するもので、Google Mapsなど様々なサービスで目にすることも多いでしょう。 しかしながら、角度ではなくメートル単位の座標で地球上の位置を表現したいケースも存在します。そんな時に使えるのが平面直角座標系です。
経緯度と平面直角座標の相互変換式は国土地理院のWebサイトに公開されているのですが、角度の「ラジアン」と「度」に混同があったり変数間の依存関係が見辛かったりする*1ため、この記事で解説したいと思います。 なお、Pythonによる実装は別途Qiitaに投稿しています。
緯度経度と平面直角座標の相互変換をPythonで実装する - Qiita
1.2. 平面直角座標系の概要
平面直角座標系の大まかなイメージとしては、ある地点を原点とし、その近辺で地球が平坦であるとみなしたものであると考えれば良いでしょう。もちろん地球の楕円体を歪みなく平面に変換することは不可能ですが、なるべく「ずれ」が無いように工夫してあります。
ただ、日本全土のスケールになってくると地球の丸みは無視できないものになるため、「ずれ」を抑えるためには原点を複数点用意する必要が生じます。実際、日本国内では平成十四年国土交通省告示第九号によって19の平面直角座標系が定められており、それぞれの座標系原点の経緯度と適用範囲が定められています。平面直角座標はこの適用範囲それぞれの内部においてのみ比較可能なものであることに留意しましょう。*2
なお、適用範囲に関してはわかりやすい平面直角座標系に詳しい記載があります。
2. 平面直角座標から経緯度への変換式
基本的には国土地理院の公開している計算式に基づきます。 ただ、冒頭で述べたようにこの式では角度の表現に混同がみられたため、以下の式では全てラジアンに統一するものとします。すなわち、経緯度はラジアンで表現されており、三角関数はラジアンを引数として受け取り、逆三角関数はラジアンを返すものであるとします。
2.1. 記号
- : 緯度経度に変換したい平面直角座標]
- :平面直角座標系原点の緯度経度]
- (日本に19個ある: わかりやすい平面直角座標系, 平面直角座標系(平成十四年国土交通省告示第九号))
:平面直角座標系の 軸上における縮尺係数(0.9999)
準拠楕円体に関しては以下を参照します。
2001年以前の測地基準点成果は、緯度・経度においては日本測地系に基づいた数値で準拠楕円体はベッセル楕円体でしたが、現在の測地測量成果は世界測地系(測地成果2011)と呼び、準拠楕円体はITRF座標系GRS80楕円体です。
日本測地系と世界測地系
2.2. 計算詳細
目標は、パラメータ を既知として、平面直角座標を緯度と経度に変換することです。
しかし、国土地理院の計算式を見ると計算過程に中間的な変数が多数存在します。それぞれの依存関係がよく分からず、「この変数を計算するためにはこっちの変数を計算しておく必要があって、その前に…」と途方に暮れてしまうかもしれません。
そこで、まずは変数間の依存関係を可視化してみます*3。
入力(平面直角座標)が出力(緯度経度)に変換される過程を、国土地理院の計算式の記号に合わせてグラフ状に表現したものが下の画像です。入力 を青背景・出力を赤背景・定数(地球の形状などに依存)を黒背景のノードとして塗り分けています。
この図を見ながら、順番に計算式を追っていきます。
2.2.1. の計算
先ほどの図を見ると、以下の赤線のように は (逆扁平率)だけに依存していることが分かります。
具体的な数式に移りましょう。まずは単純にを計算します。
このから以下のように が定まります。
2.2.2. の計算
すでに計算できた は定数と同じ黒背景に塗りつぶしてしまいます。すると、今度は下図のように が計算できますね。
数式は以下のようになります。 この記事では をラジアンとしているため、国土地理院の計算式の を除いていることに注意しましょう。
2.2.3. の計算
今まで通り計算済みの変数を黒背景に塗りつぶすと、計算済みの変数と入力から が求まります。
2.2.4. の計算
同様に、 が計算できます。
2.2.5. の計算
を計算します(単位はrad)。あともう少し。
2.2.6. 緯度 ・経度 の計算
目的だった緯度 ・経度 を計算する準備が整いました。 本記事では をラジアンに統一している関係上、ここでも国土地理院の計算式のを除いていることに注意してください。
- 緯度
- 経度
依存関係を整理することによって順序立てて計算を進めることができました。
3. 経緯度から平面直角座標への変換式
先ほどまでとは逆に、経緯度から平面直角座標への変換式を考えます。
こちらも基本的に国土地理院の公開している計算式に基づきます。 以下の注意点はこの章にもあてはまります。
この式では角度の表現に混同がみられたため、以下の式では全てラジアンに統一するものとします。すなわち、経緯度はラジアンで表現されており、三角関数はラジアンを引数として受け取り、逆三角関数はラジアンを返すものであるとします。
3.1. 記号
「2.1. 記号」と全く同じです。
3.2. 計算詳細
目標は、 を既知として、緯度と経度を平面直角座標に変換することです。
逆変換に関しても、国土地理院の式における変数間の依存関係を可視化してみましょう。
あとは、平面直角座標から経緯度への変換式の時と同様に順番に求めていきます。
4. 実装
この記事に記した順序でプログラムに書き起こすだけです。 Qiitaで公開しています。 qiita.com
5. まとめ
- 緯度経度と平面直角座標系の相互変換式を紹介した
- 計算式と記号は国土地理院のWebサイトに基づいているが、「ラジアン」と「度」の混同を無くす修正を行った
- 変数間の依存関係を可視化して整理することにより、そのままプログラムに書き起こせば実装できるような順序で数式を展開した
6. 参考
以上
- 作者: 政春尋志
- 出版社/メーカー: 朝倉書店
- 発売日: 2011/09/10
- メディア: 単行本(ソフトカバー)
- クリック: 3回
- この商品を含むブログ (1件) を見る