//TODO 计算经纬度之间距离的函数 def Distance(x1: Double, y1: Double, x2: Double, y2: Double): Double = { //用haversine公式计算球面两点间的距离。 //经纬度转换成弧度 val lon1: Double = x1 * math.Pi / 180//经度(大) val lat1: Double = y1 * math.Pi / 180//纬度(小) val lon2: Double = x2 * math.Pi / 180//经度 val lat2: Double = y2 * math.Pi / 180//纬度 //差值 val vLon = math.abs(lon1 - lon2) val vLat = math.abs(lat1 - lat2) //h is the great circle distance in radians, great circle就是一个球体上的切面,它的圆心即是球心的一个周长最大的圆。 val h = (math.sin(vLat / 2))*(math.sin(vLat / 2)) + math.cos(lat1) * math.cos(lat2) * (math.sin(vLon / 2))*(math.sin(vLon / 2)) val distance = 2 * 6371.0 * math.atan2(math.sqrt(h), math.sqrt(1 - h)) distance*1000 } spark.udf.register("Distance",Distance(_:Double,_:Double,_:Double,_:Double))
一定,
07-03
3795

12-29
1615
