mysql中如何计算距离排序好点呢?

mysql中如何计算距离排序好点呢?

倚栏听风 发布于 2021-11-30 字数 238 浏览 761 回复 13

数据库中每条记录都有经纬度两个字段

然后前端会传过过来用户的经纬度。。

最后我得按照最近的距离来进行排序返回到前台展示出来。。

那么问题来了,我该如何设计这个排序呢,总不能所有的距离都算出来再排序吧。。

如果你对这篇文章有疑问,欢迎到本站 社区 发帖提问或使用手Q扫描下方二维码加群参与讨论,获取更多帮助。

扫码加入群聊

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(13

晚风撩人 2021-12-01 13 楼

先利用 四叉树类似的算法  利用点碰撞找到 一大群点中 找到最近的可能 一小的集合。

然后利用距离公式求解距离 排序

带上头具痛哭 2021-12-01 12 楼

高级应用别选mysql

因为看清所以看轻 2021-12-01 11 楼

http://my.oschina.net/alexgaoyh/blog/392123

不过建议不要使用mysql,效率不高。

2021-12-01 10 楼

用空间扩展的话只能用myisam,可以对空间字段索引,使用提供的空间函数来计算距离. 不过没有测过性能

各自安好 2021-12-01 9 楼

mysql没有按函数结果进行的索引, 没有什么好的办法.

可以按以下方法

1. 先到附近钜形内记录

2. 遍历等到的结果

流心雨 2021-12-01 8 楼

写出这个公式的人是真有心啊

沙与沫 2021-12-01 7 楼

公式拿去

"acos(cos((t.lng - {$lng}) * 0.01745329252) * cos((t.lat - {$lat}) * 0.01745329252)) * 6371.004 as distance"

这个方法太简单粗暴了,自行想象优化的办法吧。

高跟鞋的旋律 2021-12-01 6 楼

pgsql或者mongodb都有这方面的api可以调用

眼泪淡了忧伤 2021-12-01 5 楼

先设定一个范围,之后根据范围进行经纬度的匹配

绝情姑娘 2021-12-01 4 楼

计算的函数已经有了。。。 现在就是我的是把数据库所有记录都查到缓存中,然后遍历完然后根据距离来排序。。 但我总感觉每次都遍历完有点不爽

泛滥成性 2021-12-01 3 楼

你这个不是程序问题,你应该问有没有地理(或数学)上的理论支持不计算距离,直接通过经纬度(或球面坐标)就能得出距离远近的

就我的知识而言是没有的,所以要么mysql里自己写function算距离,要么查出来程序处理

丢了幸福的猪 2021-12-01 2 楼

不是用mysql来算2点距离,我是想该如何设计更便捷点

裸钻 2021-12-01 1 楼

不要用mysql比较好。。。