動かざることバグの如し

近づきたいよ 君の理想に

Javascriptで2地点間の距離と方角を計算するライブラリ

緯度経度からなる地点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法のことであり、精度が高いらしい。他にもいくつかある

詳しい使い方は公式ドキュメント参照

JSDoc:クラス:LatLonEllipsoidal_Vincenty