フリーソフト

« [Delphi] 修正ユリウス通日と年月日の変換 | トップページ | [Delphi] 2地点の緯度経度から方位を計算する »

[Delphi] 2地点の緯度経度からその間の距離を計算する

Hubenyの簡易式を使用した方法です。

uses Math;

// 引数
//  Lon1 地点1の経度(度)
//  Lat1 地点1の緯度(度)
//  Lon2 地点2の経度(度)
//  Lat2 地点2の緯度(度)
//
//   北緯は0~90度、南緯は-90~0度
//   東経は0~180度、西経は-180~0度
//
// 戻り値
//  2地点間の距離(km)
function GetHubenyDistance(Lon1:Double; Lat1:Double; Lon2:Double; Lat2:Double):Double;
var
 Lon1Rad, Lat1Rad, Lon2Rad, Lat2Rad:Double;
 LatAveRad, LatDiff, LonDiff:Double;
 Meridian, PrimeVertical:Double;
 X,Y:Double;
begin
 //ラジアンに変換
 Lon1Rad := Lon1 * PI / 180;
 Lat1Rad := Lat1 * PI / 180;
 Lon2Rad := Lon2 * PI / 180;
 Lat2Rad := Lat2 * PI / 180;

 LatAveRad := (Lat1Rad + Lat2Rad) / 2;
 LatDiff := Lat1Rad - Lat2Rad;
 LonDiff := Lon1Rad - Lon2Rad;

 //子午線曲率半径
 Meridian := 6334834 / Sqrt(Power(1 - 0.006674*Sin(LatAveRad)*Sin(LatAveRad),3));
 //卯酉線曲率半径
 PrimeVertical := 6377397 / Sqrt(1 - 0.006674*Sin(LatAveRad)*Sin(LatAveRad));

 //ヒュベニの公式
 X := Meridian*LatDiff;
 Y := PrimeVertical*Cos(LatAveRad)*LonDiff;

 Result := Sqrt(X*X + Y*Y);
end;

« [Delphi] 修正ユリウス通日と年月日の変換 | トップページ | [Delphi] 2地点の緯度経度から方位を計算する »

Delphi」カテゴリの記事

アルゴリズム」カテゴリの記事

コメント

この記事へのコメントは終了しました。