>웹 프론트엔드 >JS 튜토리얼 >경도와 위도를 기반으로 지구상의 두 지점 사이의 거리를 계산합니다. js 구현 code_javascript 기술

경도와 위도를 기반으로 지구상의 두 지점 사이의 거리를 계산합니다. js 구현 code_javascript 기술

WBOY
WBOY원래의
2016-05-16 17:40:53996검색

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));
}


이 공식으로 계산한 결과는 물론 최종 결과의 경도가 더 좋습니다. 실제로 더 좋습니다. 전달된 좌표의 정확성에 따라 다릅니다.
성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.