こんにちは。
MariaDB(MySQL) の geometry 型を利用して2地点間の距離を計算する方法についての記録です。
0. 前提条件
- MariaDB 10.3.8 での作業を想定。(geometry 型の使用できるバージョンなら、 MySQL でも同様のはず)
- DB スキーマが作成済みである。(「MariaDB(MySQL) - 国土交通省・位置参照情報をデータベース化(その2)!」の
mlit_towns
テーブルを使用する)
1. SQL 作成例・その1
次の SQL は距離をそのまま(度単位で)出力する例。
1 2 3 4 5 6 7 8 9 10 11 |
|
GLength
の単位は「度」(地球外周の 1/360)- 緯度・経度は、世界測地系(日本測地系2000)
- 世界測地系で使用される楕円体は GRS-80
- 長半径(赤道半径):6,378,137.000000m
- 短半径(極半径):6,356,752.314140m
以下、実行結果。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
|
2. SQL 作成例・その2
次の SQL は距離を m 換算したものも出力する例。(別名を利用して再計算するためにサブクエリ化)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
|
- 上記の距離換算(度→m)では、地球楕円体単半径を基準している。(110,946.26m/度)
(長半径を基準にするなら、 111,319.49m/度を乗じる)
以下、実行結果。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
|
別名 d
を使用して再計算しているとは言っても、 GLength ... AS d
部分の処理が2倍行われることになるので、結果として、2倍程度時間がかかる。
以上。