원점, 거리 및 방향이 주어진 지구 표면에서 점을 찾는 방법 (방위각)

StackOverflow https://stackoverflow.com/questions/1019642

  •  06-07-2019
  •  | 
  •  

문제

이전 질문 "거리 및 베어링별로 알려진 위치에서 지점의 좌표를 찾기위한 지구 조작" 같은 것을 묻지 만 발견 된 솔루션은 대략적인 근사치입니다. 더 정확한 솔루션을 원합니다. 결과를 THE와 비교하고 있습니다 큰 원 거리 공식은 최고 중 하나입니다 지리적 거리 알려진 공식.

도움이 되었습니까?

해결책

이것은 내가 지금까지 본 최고의 공식입니다. http://www.movable-type.co.uk/scripts/latlong-vincenty-direct.html

a, b = major & minor semiaxes of the ellipsoid   
f = flattening (a−b)/a   
φ1, φ2 = geodetic latitude   
s = length of the geodesic   
α1, α2 = azimuths of the geodesic (initial/final bearing)    

tanU1 = (1−f).tanφ1 (U is ‘reduced latitude’)    
cosU1 = 1/√(1+tan²U1), sinU1 = tanU1.cosU1 (trig identities; §6)     
σ1 = atan2(tanU1, cosα1)    (1)
sinα = cosU1.sinα1  (2)
cos²α = 1 − sin²α (trig identity; §6)    
u² = cos²α.(a²−b²)/b²    
A = 1+u²/16384.{4096+u².[−768+u².(320−175.u²)]} (3)
B = u²/1024.{256+u².[−128+u².(74−47.u²)]}   (4)

σ = s / b.A (1st approximation), σ′ = 2π     
while abs(σ−σ′) > 10-12 { (i.e. 0.06mm)  
        cos2σm = cos(2.σ1 + σ)  (5)
    Δσ = B.sinσ.{cos2σm + B/4.[cosσ.(−1 + 2.cos²2σm) − B/6.cos2σm.(−3 + 4.sin²σ).(−3 + 4.cos²2σm)]} (6)
    σ′ = σ   
    σ = s / b.A + Δσ    (7)
}        
φ2 = atan2(sinU1.cosσ + cosU1.sinσ.cosα1, (1−f).√[sin²α + (sinU1.sinσ − cosU1.cosσ.cosα1)²])    (8)
λ = atan2(sinσ.sinα1, cosU1.cosσ − sinU1.sinσ.cosα1)    (9)
C = f/16.cos²α.[4+f.(4−3.cos²α)]    (10)
L = λ − (1−C).f.sinα.{σ+C.sinσ.[cos2σm + C.cosσ.(−1 + 2.cos²2σm)]} (difference in longitude)    (11)
α2 = atan(sinα, −sinU1.sinσ + cosU1.cosσ.cosα1) (reverse azimuth)   (12)
p2 = (φ2, λ1+L)

다른 팁

이 두 지점은 얼마나 멀리 떨어져 있습니까? 나는 Gauss-Kruger 예측을 사용하는 팬입니다. 두 지점이 100 해리 내에있는 경우 잘 작동합니다. 그것은 로컬 공간에서 정기적 인 삼각법으로 작업 할 수있게 한 다음이를 측정 좌표로 전환 할 수 있다는 이점이 있습니다.

그들이 그보다 더 멀리 떨어져 있다면, 나는 큰 원으로 떨어지지 만, 원의 반경은 WGS-84 타원체를 사용하여 계산 된 원하는 베어링을 따라 주어진 지점에서 지구의 곡률 반경으로서 지구의 곡률의 반경으로.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top