マップ上の2地点間の距離を緯度、経度から求める方法
マップ上の2つの地点の緯度、経度情報から実際の距離(km)を求める方法が以外に面倒だったのでメモしておきます。
目次
- コード
- 動作確認の前に...
- 動作確認
- 参考リンク
コード
詳しい話は他のサイトに沢山情報があるので割愛して、作成したコードを掲載します。
var p1 = {lat:35.681298, lng:139.766247}; // 東京駅の緯度と経度
var p2 = {lat:35.693318, lng:139.749885}; // 武道館の緯度と経度
var er = 6378.137; // 地球の赤道半径(km)、極半径は6356.752(km)
var a = Math.abs(p1.lat - p2.lat);
var b = Math.abs(p1.lng - p2.lng);
// 緯度1度辺りの距離(km)
var lat1d = (er * 2 * Math.PI) / 360;
// 緯度の2地点間の距離(km)
var a2 = a * lat1d;
// 現在位置の緯度を基準とした半径(km)
var latr = Math.cos(Math.abs(p1.lng) / 180 * Math.PI) * er;
// 経度1度辺りの距離(km)
var lng1d = (latr * 2 * Math.PI) / 360;
// 経度の2地点間の距離(km)
var b2 = b * lng1d;
// 直角二等辺三角形の斜辺として距離(km)を算出
var distance = Math.sqrt(Math.pow(a2, 2) + Math.pow(b2, 2));
計算が正しいかどうか不安ではありますが、試してみたところ、それっぽい数値は取得できています。
動作確認の前に...
実は地点間の距離計算などを行えるJavaScriptライブラリが存在します。一応、調べたつもりだったのですが、作り終わった後に念のためと調べたら見つけてしまいました。
...なので、地点間の距離を取得したい場合はライブラリを使いましょう。
ただ、折角なので、下記の動作確認では、作成したコードとライブラリの両方で計算できるようにしています。うーむ、若干、違っていますね...