google地图距离算法_不同海拔两点间距离算法
时间: 2023-09-17 09:10:41 浏览: 163
gis地图距离计算
4星 · 用户满意度95%
计算不同海拔两点间的距离需要考虑地球的椭球形状和大气层的影响。目前常用的算法是Vincenty算法,它可以计算地球上任意两点之间的大圆距离,并且考虑了大气层的影响。
Vincenty算法的原理是基于椭球体模型,使用迭代法求解两点之间的距离。公式如下:
a = 6378137 # 赤道半径
b = 6356752.3142 # 极半径
f = 1/298.257223563 # 扁率
L = lon₂ - lon₁
U₁ = atan((1-f) * tan(lat₁))
U₂ = atan((1-f) * tan(lat₂))
sinU₁ = sin(U₁)
cosU₁ = cos(U₁)
sinU₂ = sin(U₂)
cosU₂ = cos(U₂)
λ = L
λʹ = 2 * pi
iterLimit = 20
while abs(λ - λʹ) > 1e-12 and iterLimit > 0:
iterLimit -= 1
sinλ = sin(λ)
cosλ = cos(λ)
sinσ = sqrt((cosU₂ * sinλ) ** 2 + (cosU₁ * sinU₂ - sinU₁ * cosU₂ * cosλ) ** 2)
cosσ = sinU₁ * sinU₂ + cosU₁ * cosU₂ * cosλ
σ = atan2(sinσ, cosσ)
sinα = cosU₁ * cosU₂ * sinλ / sinσ
cos²α = 1 - sinα ** 2
cos2σm = cosσ - 2 * sinU₁ * sinU₂ / cos²α
C = f / 16 * cos²α * (4 + f * (4 - 3 * cos²α))
λʹ = λ
λ = L + (1 - C) * f * sinα * (σ + C * sinσ * (cos2σm + C * cosσ * (-1 + 2 * cos2σm ** 2)))
u² = cos²α * (a ** 2 - b ** 2) / b ** 2
A = 1 + u² / 16384 * (4096 + u² * (-768 + u² * (320 - 175 * u²)))
B = u² / 1024 * (256 + u² * (-128 + u² * (74 - 47 * u²)))
Δσ = B * sinσ * (cos2σm + B / 4 * (cosσ * (-1 + 2 * cos2σm ** 2) - B / 6 * cos2σm * (-3 + 4 * sinσ ** 2) * (-3 + 4 * cos2σm ** 2)))
s = b * A * (σ - Δσ)
其中,a、b分别是赤道半径和极半径,f是扁率,lat₁、lon₁和lat₂、lon₂分别表示两点的纬度和经度。需要注意的是,这里的纬度和经度应该以弧度为单位。
此外,还需要考虑到两点之间的高度差对距离的影响。可以使用勾股定理计算出两点之间的直线距离,然后使用勾股定理和勾股定理的逆定理计算出两点间的斜距离。最终的距离可以表示为:
d = sqrt(s² + h²)
其中,s是Vincenty算法计算出的两点间地球表面距离,h是两点间的高度差。
阅读全文