附近的人,实现思路

来源:互联网 发布:python instance 编辑:程序博客网 时间:2024/04/28 06:40

附近的人,实现思路

1 空间数据库
mongodb mysql oracle postgresql(空间数据库,网上推荐这个)

2 redis新版本也支持geohash

一般都采用Geohash算法,用一个字符串表示二维坐标,并且两个点越接近,这两个Geohash的字符串前缀相同的位数就越多(这句话可能不太严谨),这样查询的效率就会高很多。

https://www.zhihu.com/question/36299685

https://ruby-china.org/topics/22059

http://www.cnblogs.com/iforever/p/4061095.html

http://www.infoq.com/cn/articles/depth-study-of-Symfony2

http://www.cnblogs.com/woshimrf/p/5000123.html

=====

基于以上资料,决定使用redis的lbs功能:

http://blog.huangz.me/diary/2015/redis-geo.html

redis 3.2版本以上

1 给集合Guangdong-cities 增加一个城市,指定它的坐标
127.0.0.1:6379> GEOADD Guangdong-cities 113.2099647 23.593675 Qingyuan
(integer) 1

2 :同时指定多个
127.0.0.1:6379> GEOADD Guangdong-cities 113.2278442 23.1255978 Guangzhou 113.106308 23.0088312 Foshan 113.7943267 22.9761989 Dongguan 114.0538788 22.5551603 Shenzhen
(integer) 4

3:获得指定城市的经纬度坐标。
127.0.0.1:6379> GEOPOS Guangdong-cities Qingyuan Guangzhou Foshan
1) 1) “113.20996731519699097”
2) “23.59367501967128788”
2) 1) “113.22784155607223511”
2) “23.1255982020608073”
3) 1) “113.10631066560745239”
2) “23.00883120241353907”

4:获得指定城市之间的距离
127.0.0.1:6379> GEODIST Guangdong-cities Qingyuan Guangzhou
“52094.4338”

5:获得集合中,指定城市,指定距离内,有多少城市。(附近的城市)
127.0.0.1:6379> GEORADIUSBYMEMBER Guangdong-cities Guangzhou 150 km
1) “Foshan”
2) “Guangzhou”
3) “Dongguan”
4) “Qingyuan”
5) “Shenzhen”

0 0