//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))一定,一定,一定不要把经纬度输反了。
val rdd01=df04.rdd.map(x=>(x(0
spark编程10——经纬度和距离之间的转化:由两个经纬度点求它们之间的距离
最新推荐文章于 2025-10-26 09:11:07 发布
该博客介绍了如何在Spark中编写一个UDF(用户定义函数)来计算两个经纬度之间的距离,采用haversine公式。同时,通过广播较小的数据集来提高效率,对数据进行匹配,当距离小于100米时认为匹配成功。这个过程对于地理数据处理和分析具有实际应用价值。

最低0.47元/天 解锁文章
767

被折叠的 条评论
为什么被折叠?



