緯度経度からなる地点Aから地点Bへの距離と方角がほしい人生だった
環境
- nodejs 10
求める計算式面倒問題
正直地理の計算詳しくないのでさっぱりだが、地球が楕円であるので、式が面倒らしい
例えば以下はPythonで計算するコードを載せてくれている例 長い
こんなの自分で書きたくない。。。とか思ってたらさすがJS界隈、ライブラリがあった。その名も「geodesy」
インストール
npm install -S geodesy
ただ、import形式でないとロードできないらしいので、nodejs経由で使う場合はwebpack等でコンパイルするか、esmを使う(npm install -S esm
が必要)
コード
例えば、2地点間の距離を求めるならdistanceTo()、方位はfinalBearingTo()で求めることができる。
ややこしいが、LatLon()に与える引数は緯度、経度の順番なので注意
import LatLon from 'geodesy/latlon-ellipsoidal-vincenty.js' // 渋谷駅 const p1 = new LatLon(35.658034, 139.701636) // 新宿駅 const p2 = new LatLon(35.689738, 139.700391) console.log(p1.distanceTo(p2)) // 3519.458 console.log(p1.finalBearingTo(p2)) // 358.1643691
ロードしているファイル名のvincentyはVincenty法のことであり、精度が高いらしい。他にもいくつかある
詳しい使い方は公式ドキュメント参照