上一個問題"Geoalgorithm for finding coordinates of point from a known location by distance and bearing"詢問同樣的事情,但找到的解決方案是粗略的近似值。我想要一個更準確的解決方案。我將結果與Great Circle Distance公式進行比較,公式是已知的最佳Geographical Distance公式之一。如何在給定原點,距離和方向(方位角)的情況下在地球表面找到一個點
3
A
回答
3
這是迄今爲止我所見過的最好的配方,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)
2
這兩點有多遠?我喜歡使用高斯 - 克魯格投影,如果兩點在100海里左右的話,效果很好。它的優點是讓你在局部空間中使用正則三角函數,然後將其轉換回大地座標。
如果它們進一步分開,我會回到大圓圈,但圓的半徑作爲沿着所需軸承給定點的地球曲率半徑,使用WGS-84橢圓體計算。
相關問題
- 1. 繪製一個給定原點,角度和距離的CGPoint
- 2. 航向和目標點之間的方位角和距離
- 3. 沿着距離兩個給定點的距離找到一條中間點
- 4. 查找哪些點位於每個點的給定距離內
- 5. 如何在一個點和一個方向形成的假想線上得到一個點x的距離
- 6. 計算終點給定距離,方位,起點
- 7. 如何找到polyData和沿某個方向的點之間的距離?
- 8. 找到距離地點最小總距離的點的算法
- 9. 你如何找到距離某條線的給定垂直距離上的點?
- 10. OpenGL找到一個點的距離
- 11. 在給定距離的方向畫線 - 谷歌地圖
- 12. 使用地理位置確定距離固定點的距離
- 13. 在給定某一對點的情況下制定指數方程
- 14. 在特定方向上獲取距離最近的SpriteKit節點
- 15. 在球狀條件下,給定3分和它們各自到第4點的距離,如何找到其地理位置?
- 16. 找到距離原點最近的位置
- 17. 什麼是在一定距離內找到所有點的有效方法? (Javascript)
- 18. 如何找到兩個地點之間的距離?
- 19. 從另一個距離,距離和極角確定地理位置
- 20. SVG在一條路徑上找到一個點到x軸的方向(角度)
- 21. 如何在一組給定的點上找到一個正方形?
- 22. 如何查找給定點的經度和緯度,給定兩個點之間的距離?
- 23. Android:MapController.zoomToSpan:給定距離和中心點的距離
- 24. 有一個地球的定向版本漫步者距離
- 25. 如何從角度和距離中計算出一個點?
- 26. 如何找到附近的一個點的x距離
- 27. 如何找到離斜坡m上給定點d距離的xy座標?
- 28. 如何排序距離給定點(經度和緯度)最近的點列表?
- 29. 在三維空間中找到等距離的所有點位於預定義平面上的4個點
- 30. 如何計算距離另一點一定距離的點的緯度/經度?
你確定你的意思100nm的?難道不是100公里嗎? – 2009-06-20 21:32:51