【Kotlin】Hubenyの公式で距離計算 のバックアップ(No.1)
- バックアップ一覧
- 差分 を表示
- 現在との差分 を表示
- ソース を表示
- 【Kotlin】Hubenyの公式で距離計算 へ行く。
- 1 (2018-12-25 (火) 05:39:00)
- 2 (2018-12-25 (火) 06:10:06)
- 3 (2018-12-29 (土) 01:25:14)
- 4 (2018-12-29 (土) 01:25:14)
Hubenyの公式で距離計算 †
2点の地理座標間の距離を計算するのに、そんなに複雑ではなくて、球面三角法よりももう少し精度の良い計算でHubenyの公式というものがあるみたいです。
とりあえず簡単にKotolinで試してみます。
// https://ja.wikipedia.org/wiki/%E6%B8%AC%E5%9C%B0%E5%AD%A6 val WGS84_A = 6378137.0 //長半径 val WGS84_B = 6356752.314245 //短半径 val WGS84_E2 = ((WGS84_A * WGS84_A) - (WGS84_B * WGS84_B)) / (WGS84_A * WGS84_A) // 離心率 val WGS84_A1E2 = WGS84_A * (1 - WGS84_E2) // 赤道上の子午線曲率半径 fun deg2rad(d: Double): Double { return d * Math.PI / 180.0 } fun calcHubeny(lat1: Double, lng1: Double, lat2: Double, lng2: Double): Double { val latdiff = deg2rad(lat1 - lat2) // 緯度差 val lngdiff = deg2rad(lng1 - lng2) // 経度差 val latavg = deg2rad((lat1 + lat2) / 2.0) // 緯度平均 //卯酉線曲率半径 val sinLatAvg = Math.sin(latavg) val w2 = 1.0 - WGS84_E2 * (sinLatAvg * sinLatAvg) val n = WGS84_A / Math.sqrt(w2) //子午線曲率半径 val m = WGS84_A1E2 / (Math.sqrt(w2) * w2) // Hubeny val t1 = m * latdiff val t2 = n * Math.cos(latavg) * lngdiff return Math.sqrt((t1 * t1) + (t2 * t2)) }