Open2

ハバースインの公式を使用して2点間の距離を計算する

harutiroharutiro

Kotlinで緯度と経度を2点渡した際に、その距離をメートル単位で返す関数を以下のように書くことができます。ここでは、ハバースインの公式を使用して2点間の距離を計算しています。

import kotlin.math.*

fun distanceInMeters(lat1: Double, lon1: Double, lat2: Double, lon2: Double): Double {
    val R = 6371000.0 // 地球の半径(メートル)

    val dLat = Math.toRadians(lat2 - lat1)
    val dLon = Math.toRadians(lon2 - lon1)

    val a = sin(dLat / 2) * sin(dLat / 2) +
            cos(Math.toRadians(lat1)) * cos(Math.toRadians(lat2)) *
            sin(dLon / 2) * sin(dLon / 2)
    
    val c = 2 * atan2(sqrt(a), sqrt(1 - a))

    return R * c
}

fun main() {
    val lat1 = 35.681236
    val lon1 = 139.767125
    val lat2 = 34.693738
    val lon2 = 135.502165

    val distance = distanceInMeters(lat1, lon1, lat2, lon2)
    println("距離: $distance メートル")
}