第三种就是利用数据库的空间索引来做,貌似MySQL本身就支持的,用R Tree实现的,效率更高。
1、把经纬度换成整数。 2、不算圆型算方型,避开乘方根号运算,直接 between 经度 and between 纬度。 3、确定了这个方内的人后,再进行乘方(但不开根号)排序就行。
查找 1000 米以内的人,数据库设计和查询如何实现这个功能? - 数据库设计
快使用开源工具,横横哈嘿,快打开源代码,嘿嘿哈横。
用mongodb,自带这类算法
大家的坐标保存起来,然后把你的坐标与大家的坐标求距离就行了。
geohash | rtree
方案:geohash + redis set
时间复杂度:O(1)
空间复杂度:O(n),挺省的,因为redis的key很短,参考下表:
Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn