以下の様なテーブルで緯度・経度を管理しているとする。
<POSITION_TESTテーブル>
NAME | LATITUDE | LONGITUDE |
---|---|---|
ヒューリック神谷町ビル | 35.663729 | 139.744047 |
虎ノ門ヒルズ森タワー | 35.666863 | 139.74954 |
六本木ヒルズ森タワー | 35.660477 | 139.729356 |
神谷町郵便局 | 35.664442 | 139.745396 |
東京都庁 | 35.689604 | 139.692305 |
北海道庁 | 43.064313 | 141.347255 |
ヒルズデール・ハイ・スクール | 37.532225 | -122.313028 |
で、緯度:35.663729、経度:139.744047 の位置から
これらの場所までの距離(km)を算出するには、以下のSQLを実行すれば良い。
SQL
select
a.NAME
, a.LATITUDE
, a.LONGITUDE
, (
6371 * ACOS(
COS(RADIANS(35.663729)) * COS(RADIANS(a.LATITUDE)) * COS(RADIANS(a.LONGITUDE) - RADIANS(139.744047))
+ SIN(RADIANS(35.663729)) * SIN(RADIANS(a.LATITUDE))
)
) as DISTANCE
from
position_test a;
結果は以下のとおり。
<結果>
NAME | LATITUDE | LONGITUDE | DISTANCE |
---|---|---|---|
ヒューリック神谷町ビル | 35.663729 | 139.744047 | 0 |
虎ノ門ヒルズ森タワー | 35.666863 | 139.74954 | 0.606372208057947 |
六本木ヒルズ森タワー | 35.660477 | 139.729356 | 1.37559981865335 |
神谷町郵便局 | 35.664442 | 139.745396 | 0.145388038990192 |
東京都庁 | 35.689604 | 139.692305 | 5.48826712967876 |
北海道庁 | 43.064313 | 141.347255 | 834.321307653742 |
ヒルズデール・ハイ・スクール | 37.532225 | -122.313028 | 8291.19638773377 |