多个点经纬度距离最近算法,怎么优化?

2019-12-16 11:00:54 +08:00
 hereIsChen
有两组数据,第一组为服务人员的经纬度地址,第二组为服务地址的经纬度地址,怎么计算出最近的,如果每个都要单独算感觉服务器受不住,有啥比较好的优化方式
3252 次点击
所在节点    问与答
23 条回复
fightingZ
2019-12-16 14:10:51 +08:00
没理解错的话,这个问题不应该就是多源点寻找最短路径吗
NingAnMe
2019-12-16 17:55:38 +08:00
使用 KDtree。
1. 适合多维数据找最近。使用数量少的一组构建树,对数量多的一组查最近点。
2. 如果有一组数据不变,可以把数保存下来。
不会贴图,你自己查一下复杂度吧。
SKHuang
2019-12-16 18:05:14 +08:00
func GetDistance(lat1 float64, lng1 float64, lat2 float64, lng2 float64) float64 {
var (
radLat1 float64
radLat2 float64
a float64
b float64
s float64
)
radLat1 = GetRad(lat1)
radLat2 = GetRad(lat2)
a = radLat1 - radLat2
b = GetRad(lng1) - GetRad(lng2)
s = 2 * earth_padius * math.Asin(math.Sqrt(math.Pow(math.Sin(a/2), 2)+math.Cos(radLat1)*math.Cos(radLat2)*math.Pow(math.Sin(b/2), 2)))
return s
}

func GetRad(d float64) float64 {
return d * math.Pi / 180.0
}

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/629390

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX