Javascriptと緯度経度を使用し、2地点の距離を導き出す方法は?
2020.03.20
みなさま、こんにちは。
とある個人的な案件で、「ある場所の緯度経度」~「ある場所の緯度経度」の距離を測りたかったので、調べてみました。
Javascriptを使用し、2地点の緯度経度から距離を導き出したい
この思いを抱き調べ始めると、「ヒュベニの公式」、「球面三角法」……etc、色々出てき、深みにはまりました。
文系エンジニアの人は計算式など考えないようにしましょう。意味が分かりません。
なので、とりあえず調べたコードを記載します。
私も仕組みはわかっていません、何も考えずに書いてください。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
// 緯度経度で2点間の距離を測る方法 function distance(lat1, lng1, lat2, lng2) { lat1 *= Math.PI / 180; lng1 *= Math.PI / 180; lat2 *= Math.PI / 180; lng2 *= Math.PI / 180; return 6371 * Math.acos(Math.cos(lat1) * Math.cos(lat2) * Math.cos(lng2 - lng1) + Math.sin(lat1) * Math.sin(lat2)); } // 経度、緯度を定義 let tokyoLat = 139.76608399999998, // 東京駅の緯度 tokyoLng = 35.681382, // 東京駅の経度 shinbashiLat = 139.75964, // 新橋駅の緯度 shinbashiLng = 35.665498 // 新橋駅の経度 console.log(distance(tokyoLat, tokyoLng, shinbashiLat, shinbashiLng)); //1.5268670823169612 |
Googleマップで東京駅から新橋駅の直線距離を求めると「1.82 km」とのことでした。
誤差は「0.293132917683039 km」。
他地点では
1 |
distance(43.064313,141.347255,35.663729,139.744047); // 834.321307653742 |
Googleマップでは「840.74 km」でしたので、誤差は「6.418692346258 km」
まあ多少の誤差はありますが、そこまで厳密に求める必要がなければ上記方法を試してみてください。
緯度経度から2地点間の距離 (km) を計算する JavaScriptを参考にさせていただきました。
ありがとうございました。