通常進行軌跡數據的挖掘,都會用到經緯度轉換距離。特別是Spark需要scala語言編寫,這方面的輪子比較少。
object getDistance{
def main(args: Array[String]) {
val lon1 = 108.956769;val lat1 = 34.229644
val lon2 = 108.958830;val lat2 =34.229701
def getDistance(lon1: Double, lat1: Double, lon2: Double, lat2: Double): Double ={
//pi爲π,r爲地球半徑
val pi = 3.1415926
val r: Double = 6370.99681
//a1、a2、b1、b2分別爲上面數據的經緯度轉換爲弧度
val a1 = lat1 * pi /180.0
val a2 = lon1 * pi /180.0
val b1 = lat2 * pi /180.0
val b2 = lon2 * pi /180.0
var t1: Double = Math.cos(a1) * Math.cos(a2) * Math.cos(b1)* Math.cos(b2)
var t2: Double = Math.cos(a1) * Math.sin(a2) * Math.cos(b1)* Math.sin(b2)
var t3: Double = Math.sin(a1) * Math.sin(b1)
val distance = Math.acos(t1 + t2 + t3) * r
distance
}
println(getDistance(lon1,lat1,lon2,lat2))
}
}
下面是該程序的打印結果