FAQ
【サンプルプラグラム】大圏距離を求める (Great Circle Distance)

ナレッジ番号:5532 | 登録日:2023/07/27 | 更新日:2024/11/21


大圏距離を求める
Image

説明

このサンプルはArcObjectsではありませんが、2点間の地理的距離を求める場合に便利です。大圏距離は回転楕円体上ではなく、球体上で計算されます。回転楕円体上での距離を計算するには、' ★関連ナレッジがみつかりませんでした★測地線関数'サンプルをご覧ください。

製品:
  Engine: VB6, Java
プラットフォーム:Windows
ArcGISバージョン:9.0

使用法

[VB6]

  1. VBのコード ウィンドウにGCircleDistance関数を追加し、以下の例のようにして呼び出します。

    Sub GetDist()

     Dim dist As Double
     dist = GCircleDistance(135, 35, 136, 35)

     Debug.Print dist

    End Sub

[Java]

  1. Javaクラスファイルにdistance()メソッドを追加します。
  2. メソッドに以下の引数を渡します。
    ・lat1:始点の緯度(単位:十進緯度経度)
    ・lon1:始点の経度(単位:十進緯度経度)
    ・lat2:終点の緯度(単位:十進緯度経度)
    ・lon2:終点の緯度 (単位:十進緯度経度)
  3. メソッドはDouble型で返します。

[VB6]
Public Function GCircleDistance(dXO As Double, dYO As Double, _
                     dXD As Double, dYD As Double) _
                     As Double

' dXO = 始点の経度(単位:十進緯経度)
' dYO = 始点の緯度(単位:十進緯経度)
' dXD = 終点の経度(単位:十進緯経度)
' dYD = 終点の緯度(単位:十進緯経度)
'
' 関数を実行すると、2点間の距離(単位:メートル)が返ります。

On Error GoTo CalcError

 Dim dOrigDistance As Double
 Dim dDestDistance As Double
 Dim dTemp As Double
 Dim dFinalDistance As Double
 Dim dDistL As Double
 Dim dCossa As Double
 Dim dArcCos As Double
 Dim dGreatCircle As Double

 Const DEG_PER_RAD = 57.29578
 Const EARTH_CIRC_METERS = 40030218   '半径 = 6371007 (GRS80 Authalic Sphere)

 dOrigDistance = 90 - dYO
 dDestDistance = 90 - dYD
 dTemp = dXO - dXD

 dDistL = 0

 If dTemp < 0 Then
  dDistL = dTemp * -1
 Else
  dDistL = dTemp
 End If

 dOrigDistance = dOrigDistance / DEG_PER_RAD
 dDestDistance = dDestDistance / DEG_PER_RAD
 dDistL = dDistL / DEG_PER_RAD

 dCossa = (Cos(dOrigDistance) * Cos(dDestDistance)) + _
        (Sin(dOrigDistance) * Sin(dDestDistance) * Cos(dDistL))

 Select Case dCossa
  Case 1
   dFinalDistance = 0
  Case -1
   dFinalDistance = EARTH_CIRC_METERS / 2
  Case Else
   dArcCos = 1.570796 - Atn(dCossa / Sqr(1 - (dCossa ^ 2)))
   dGreatCircle = dArcCos / 6.2831853
   dFinalDistance = EARTH_CIRC_METERS * dGreatCircle
 End Select

 GCircleDistance = dFinalDistance

 Exit Function
CalcError:
 GCircleDistance = -9999

End Function

[Java]
/**
* Description -
*
* @param lat1 - Latitude of origin point in decimal degrees
* @param lon1 - longitude of origin point in deceimal degrees
* @param lat2 - latitude of destination point in decimal degrees
* @param lon2 - longitude of destination point in decimal degrees
*
* @return metricDistance - great circle distance in meters
*/

public static double distance(double lat1, double lon1, double lat2, double lon2){

 double radLat1 = Math.toRadians( lat1 );
 double radLon1 = Math.toRadians( lon1 );
 double radLat2 = Math.toRadians( lat2 );
 double radLon2 = Math.toRadians( lon2 );

 double d = Math.acos( ( Math.cos( radLat1 ) * Math.cos( radLat2 ) ) + ( Math.sin( radLat1 ) * Math.sin( radLat2 ) ) * ( Math.cos( radLon1 - radLon2 ) ) );
 return ( d * EARTH_CIRC_METERS );
}

private static double EARTH_CIRC_METERS = 40030218; // Radius = 6371007 (GRS80)


 

メタデータ

機能

種類

製品