作成日:2024年08月02日
緯度経度で2点間の距離を計測する(2)

2点間の距離を計測する
緯度経度による2点間距離の計測方法について検索すると、国土地理院のサイトがみつかりました
計算方法も公開されているので見てみると……、ちょっと手軽に計算という感じでもないので他の方法も探します
他で見つかったものでは、Haversine公式、Hubeny公式、測地線航海算法というものがありました
また、Yahoo!JAPANの2点間距離APIでも計算できそうです
順番に見ていきましょう
Haversine公式
世界的に使用されている公式です
とりあえず、公式通りに当て嵌めます
計算式
Let ( [ #earth = 6378.137; #Y1 = Radians ( A地点緯度 ); #X1 = Radians ( A地点経度 ); #Y2 = Radians ( B地点緯度 ); #X2 = Radians ( B地点経度 ) ]; #earth * Acos ( Sin ( #Y1 ) * Sin ( #Y2 ) + Cos ( #Y1 ) * Cos ( #Y2 ) * Cos ( #X2 - #X1 ) ) )
Hubeny公式
主に日本のサイトで使用されている公式です
正式なものではなく簡易版だそうですが、下記の様に記述できます
計算式
Let ( [ #earth_X = 6378.137; #earth_Y = 6356.752; #Y1 = Radians ( A地点緯度 ); #X1 = Radians ( A地点経度 ); #Y2 = Radians ( B地点緯度 ); #X2 = Radians ( B地点経度 ) #DX = #X2 - #X1; #DY = #Y2 - #Y1; #MU = (#Y1 + #Y2) / 2; #E = Sqrt ( 1 - (#earth_Y / #earth_X) ^ 2 ); #W = Sqrt ( 1 - (#E * Sin ( #MU )) ^ 2 ); #M = #earth_X * (1 - #E ^ 2) / (#W ^ 3); #N = #earth_X / #W ]; Sqrt ( (#M * #DY) ^ 2 + (#N * #DX * Cos ( #MU )) ^ 2 ) )
測地線航海算法
続いて、測地線航海算法です
計算式
Let ( [ #earth_X = 6378.137; #earth_Y = 6356.752; #Y1 = Radians ( A地点緯度 ); #X1 = Radians ( A地点経度 ); #Y2 = Radians ( B地点緯度 ); #X2 = Radians ( B地点経度 ) #P1 = Atan ( #earth_Y / #earth_X * Tan ( #Y1 ) ); #P2 = Atan ( #earth_Y / #earth_X * Tan ( #Y2 ) ); #S = Sin ( #P1 ) * Sin ( #P2 ); #C = Cos ( #p1 ) * Cos ( #P2 ) * Cos ( #X1 - #X2 ); #X = Acos ( #S + #C ); #F = ( #earth_X - #earth_Y ) / #earth_X; #DR = #F / 8 * ( ( ( Sin ( #X ) - #X ) * ( Sin ( #P1 ) + Sin ( #P2 ) ) ^ 2 / ( Cos ( #X / 2 ) ^ 2 ) - Sin ( #X ) - #X ) * ( Sin ( #P1 ) - Sin ( #P2 ) ) ^ 2 / Sin ( #X / 2 ) ^ 2 ) ]; #earth_X * (#X + #DR) )
Yahoo!JAPAN 2点間距離API
最後に、Yahoo!JAPAN の提供する2点間距離APIです
計算方式は公開されていませんので、呼び出しするスクリプトの内容です
スクリプト
フィールド設定 [test::距離API: ""] URLから挿入 [ダイアログあり:オフ; ターゲット:$res; ""https://map.yahooapis.jp/dist/V1/distance?coordinates=" & test::A地点経度 & "," & test::A地点緯度 & " " & test::B地点経度 & "," & test::B地点緯度 & "&appid=" & test::clientID & "&output=json" ] フィールド設定 [test::距離API: JSONGetElement ( $res; "Feature[0]Geometry.Distance" )]
距離計測結果
とりあえず愛知県庁を起点として、名古屋市役所、東京都庁、中国 国務院、南極 コンコーディア・ステーションまでの距離を算出してみました




距離が遠くなる程計測値に差が出てきています
国土地理院の値が最も正確だと考えるなら、2点間距離APIが精度が高くてよさそうです
計算だけで済ませたいなら測地線航海算法でしょうか
必要な速度・精度などの要件を満たすなら、ぜひ活用してみてください

以上で今日のメモ書きは終了です
内容はいかがでしたか?
もしご意見やご要望、誤りの指摘などありましたら、下記フォームよりお気軽にご連絡ください