2016.10.27
2020.1.7

マップ上の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ライブラリが存在します。一応、調べたつもりだったのですが、作り終わった後に念のためと調べたら見つけてしまいました。

...なので、地点間の距離を取得したい場合はライブラリを使いましょう。

GitHub - manuelbieh/Geolib

ただ、折角なので、下記の動作確認では、作成したコードとライブラリの両方で計算できるようにしています。うーむ、若干、違っていますね...

動作確認

地点1 緯度: 経度:

地点2 緯度: 経度:

距離: km

下記リンクから緯度、経度を取得して色々と試してみてください。

ShowGoogleMap

参考リンク

JavaScript】関連記事