【GAS】위도 경도로부터 2점간의 거리를 구한다

개요



일로 거리를 알고 싶은 것이 많고, 언제나 GoogleMap의 「거리를 측정」으로 측정하고 있었지만, 이것도 혹시 계산할 수 있는 것은? 라고 생각 구구했는데, 나올 나와 위도 경도로부터 2점간의 거리를 구하는 방법.

지구를 타원체로 보았다고 해서, 몇개의 정수를 알면 휴베니의 공식이므로 구하는 것 같다···.

속편 있음



「측지선 항해산법」으로 보다 고정밀도로 거리를 구하는 속편 있음.
Qiita 기사 : 위도 경도에서의 거리 계산 휴베니에서 항해 산법이 더 정밀

이 기사의 문제점 등도 해결 ^^) b 한화 휴제

우선 결론 & 코드



여러가지 있어, 2점의 위도와 경도를 넣으면 거리[km]를 계산하는 것에 성공! 문제나 의문은 남았지만, 일단 자신의 일에서 사용하려면 실용 수준의 물건이 완성.

스프레드 시트의 셀에서 다음과 같이 거리를 구할 수 있습니다.=関数(緯度A, 経度A, 緯度B, 経度B)
리굴이나 검토는 후회해 "코드.gs"가 이쪽.
function measureDistance(latA,lngA,latB,lngB){ 

  //定数定義 
  const a = 6377397.16;             //長半径a(m) 
  const b = 6356079;                //短半径b(m) 
  const E2 = 0.006674361028297;     //第一離心率eの二乗 
  const M_numer = 6334832.10663254; //子午線曲率半径Mの分子a(1-e^2) 

  //緯度経度をラジアンに変換 
  var latARad = latA * (Math.PI/180); 
  var lngARad = lngA * (Math.PI/180); 
  var latBRad = latB * (Math.PI/180); 
  var lngBRad = lngB * (Math.PI/180); 

  //緯度経度の差 
  var dy = latARad - latBRad; 
  var dx = lngARad - lngBRad; 

  //緯度の平均値 
  var latAve = (latARad + latBRad) / 2; 

  //子午線曲率半径M 
  var sinP = (Math.cos(latAve)); 
  var sinP2 = sinP * sinP; 
  var W_ofroot = 1 - (E2 * sinP2); 
  var W = (Math.sqrt(W_ofroot)); 
  var W3 = W*W*W; 
  var M = M_numer / W3; 

  //卯酉線曲率半径N 
  var N = a / W; 

  //途中式
  var f1 = dy*dy*M*M; 
  var f2 = dx*N*(Math.cos(latAve)); 
  var f3 = f2 * f2; 
  var f4 = f1 + f3; 

  //2点間の距離(m→km)
  var D = (Math.sqrt(f4)); 
  var km = D / 1000; 

  return km; 

}

리굴 & 좋은 이유



공식 등의 자세한 해설은 전문적인 사이트가 많기 때문에 할애.

최초로 정의하고 있는 각 정수에 대해, 측정한 시기나 단체? 등에 따라 차이가있는 모양. 3종류 정도 시험해, GoogleMap의 거리 측정과의 오차가 제일 작았던 「베셀 타원체(구 일본 측지계)」라고 불리는 것을 사용.

도중의 식은 깨끗이 시키고 싶지만・・・더 이상 정리하면 계산 결과가 미치기 때문에 이런 느낌에 ^^; 이 근처가 아마추어 리먼의 한계인가?

실제로 계산해 보았습니다.



위도 경도는, GoogleMap의 「이 장소에 대해」로 취득.

음의 값이 있기 때문인지 국회의사당에서 백악관까지의 거리에서 심한 오차가 나왔다. 그 이외는 나쁘지 않아, 도쿄 타워로부터 스카이 트리는 실질 오차 제로! 개인적으로는 도쿄 도내에서만 사용하기 때문에 문제 없을 것 같아 ^^)b

거리가 늘어날수록 오차가 커지면, 위도 경도의 평균을 중간으로 하고, 각각으로부터 중간까지의 거리를 계산해 더하면 좋을까? 라고 생각했지만, 한층 더 오차가 커졌습니다(웃음)

타원체의 곡선이 원인일지도? GoogleMapAPI의 거리 계산은 지구를 구체로 계산하고 있다는 설명도 있었기 때문에 타원체로 계산하고 있는 휴베니의 공식과 오차가 나온다?

? 투성이가 되었지만



한정된 범위(라고 해도 생활권적으로는 충분히)로 사용할 수 있는 거리 측정 함수가 완성.

여담입니다만, 엑셀에서도 계산할 수 있었습니다.

오시마

좋은 웹페이지 즐겨찾기