Slide 23
Slide 23 text
球面三角法
Function spherical_trigonometry( lat1 As Double, lng1 As Double, lat2 As
Double, lng2 As Double ) As Double
Dim radLat1 As Double, radLng1 As Double ‘地点1
Dim radLat2 As Double, radLng2 As Double ‘地点2
Dim averageLat As Double, averageLng As Double
Dim c As Double
Const r = 6378137.0 '赤道半径
c = 180 / Pi '1周を360とする60分法からラジアンへ変換する際に使用する。(360/2πを約
分)
' 円弧の長さを扱うため、角度(緯度経度)をラジアンへ変換
radLat1 = lat1 / c
radLng1 = lng1 / c
radLat2 = lat2 / c
radLng2 = lng2 / c
averageLat = (radLat1 - radLat2) / 2
averageLng = (radLng1 - radLng2) / 2
spherical_trigonometry = r * 2 * Asin( Sqr( Sin( averageLat ) ^ 2 +
Cos( radLat1 ) * Cos( radLat2 ) * Sin( averageLng ) ^ 2 ) )
End Function
ヒュベニイ(Hubeny)の式
Function hubeny( lat1 As Double, lng1 As Double, lat2 As Double, lng2 As
Double ) As Double
Dim dLat As Double, dLng As Double
Dim i As Double, W As Double, M As Double, N As Double
Const E2 = 6.69437999019758E-03 '第2離心率(e^2)
Const r = 6378137.0 '赤道半径
dLat = lat2 - lat1
dLng = lng2 - lng1
i = ( lat1 + lat2 ) / 2
W = Sqr( 1 - E2 * Sin( i * Pi / 180 ) ^ 2 )
M = r * ( 1 - E2 ) / W ^ 3
N = r * W
hubeny = Sqr( ( dLat * Pi / 180 * M ) ^ 2 + ( dLng * Pi / 180 * N * Cos( i * Pi /
180 ) ) ^ 2 )
End Function