ユーザ用ツール

サイト用ツール


geographical_distance

Geographical distance

地球上の2点間の距離を求める

球面の公式(大円距離の公式)

地球を真球と仮定して球面余弦定理に当てはめると近似値が得られる。haversine(半正矢関数)を使用して球面余弦定理を変形すると三角関数表を引く回数が1回減らせるが、コンピュータで計算するなら不要だろう

実際の地球は地軸方向に僅かに潰れた楕円体のため誤差が出る

function calcDistanceBetween(point1, point2) {
  const π = Math.PI;
  const φ1 = point1.lat * (π / 180);
  const λ1 = point1.lng * (π / 180);
  const φ2 = point2.lat * (π / 180);
  const λ2 = point2.lng * (π / 180);
 
  const r = 6371;
  const a = Math.sin(φ1) * Math.sin(φ2) + Math.cos(φ1) * Math.cos(φ2) * Math.cos(λ2 - λ1)
  return Math.acos(a) * r;
}
// 東京駅
const tokyo = {
  lat: 35.6812362,
  lng: 139.7671248
}
 
// 大阪駅
const osaka = {
  lat: 34.7343206,
  lng: 135.4948995
}
 
// 北極点
const northPole = {
  lat: 90,
  lng: 0
}
 
// シドニー
const sydney = {
  lat: -33.847927,
  lng: 150.6517825
}
 
// リオデジャネイロ
const rio = {
  lat: -22.9140693,
  lng: -43.5860691
}
 
// ロングイェールビーン
const longyearbyen = {
  lat: 78.223333,
  lng: 15.646667
}
 
// 東京・大阪
console.log(calcDistanceBetween(tokyo, osaka));
 
// 東京・リオデジャネイロ
console.log(calcDistanceBetween(tokyo , rio));
 
// 北極点・ロングイェールビーン
console.log(calcDistanceBetween(northPole , longyearbyen));
 
// 北極点・シドニー
console.log(calcDistanceBetween(northPole , sydney));
geographical_distance.txt · 最終更新: 2024/02/27 09:06 by nullpon