JS를 사용하여 지구 위의 두 지점 사이의 거리를 경도와 위도를 기준으로 계산합니다
최근에는 위도와 경도를 기준으로 지구 표면의 두 지점 사이의 거리를 계산하는 공식을 사용하고 이를 JS를 사용하여 구현했습니다.
지구 표면의 두 지점 사이의 거리를 계산하는 방법은 대략 두 가지가 있습니다.
첫 번째 는 지구가 매끄러운 구형 표면이라고 가정하고 두 지점 사이의 거리를 계산하는 것입니다.
공식은 다음과 같습니다.
JS를 사용하여 다음과 같이 구현합니다.
var EARTH_RADIUS = 6378137.0; //단위 M
var PI = Math.PI
function getRad(d){
return d*PI/ 180.0;
}
/**
* 대권 거리 계산
* @param {Object} lat1
* @param {Object} lng1
* @param {Object} lat2
* @param {Object} lng2
*/
function getGreatCircleDistance(lat1,lng1,lat2,lng2){
var radLat1 = getRad(lat1); radLat2 = getRad(lat2);
var a = radLat1 - radLat2;
var b = getRad(lng1) - getRad(lng2)
var s = 2*Math.asin (Math.sqrt(Math.pow (Math.sin(a/2),2) Math.cos(radLat1)*Math.cos(radLat2)*Math.pow(Math.sin(b/2),2)) );
s = s *EARTH_RADIUS;
s = Math.round(s*10000)/10000.0;
return s; 공식은 대부분 맞지만, 구면의 상대점을 다룰 때만 문제가 발생합니다. .
물론 우리 모두는 지구가 실제로 구형이 아니라 타원체라는 것을 알고 있으므로 다음 공식을 사용합니다.
코드 복사 코드는 다음과 같습니다:
* @param {Object } lng2
*/
function getFlatternDistance(lat1,lng1,lat2,lng2){
var f = getRad ( (lat1 lat2)/2);
var g = getRad((lat1 - lat2)/2)
var l = getRad((lng1 - lng2)/2); sg = Math.sin(g);
var sl = Math.sin(l);
var sf = Math.sin(f);
var s,c,w,r, d ,h1,h2;
var a = EARTH_RADIUS;
sg = sg*sg; sf *sf
s = sg*(1-sf)*sl
c = (1-sg)*(1-sl)
w = Math.atan(Math.sqrt(s/c));
r = Math.sqrt(s*c)/w
d = 2*w*a; = (3*r -1)/2/c;
h2 = (3*r 1)/2/s
return d*(1 fl*(h1*sf*(1- sg ) - h2*(1-sf)*sg));
}
이 공식으로 계산한 결과는 물론 최종 결과의 경도가 더 좋습니다. 실제로 더 좋습니다. 전달된 좌표의 정확성에 따라 다릅니다.