问下研究过 [附近的人] 功能的朋友,你的解决是什么?
两三年前做过类似于微信『附近的人』功能,就是基于地理位置信息算出离你最近的人。当时使用的是 MongoDB 的 $near
方案,在已经存入用户坐标后,使用类似以下代码算出来:
'$near' => [
'$geometry' => ['type' => 'Point', 'coordinates' => $mylocation],
'$maxDistance' => 50 * 1000, // unit is meter, 50 公里内
]
当时选择这个方案有几个考虑点:
- 速度可接受,100w 数据内少于 0.3 秒;
- 实现起来比较简单,只需要加个 MongoDB 然后存储地理位置信息即可查询;
- 架构相对简单,只多了个 MongoDB;
- 应用使用量不是很大。
对于研究过这个话题的同学,想听听看你们最终使用的方案是什么?为什么选择这个方案?方案的亮点在哪里?
本帖已被设为精华帖!
本帖由系统于 7年前 自动加精
高认可度评论:
今天早上还在讨论这个,也准备用mongodb了。
原来看到了 http://www.cocoachina.com/ios/20141118/102... 又看到了 https://github.com/mjaschen/phpgeo
mysql 就能搞定,
算法的问题用勾股定理
假设中心点的坐标为 (a, b)
Summer,我听说过几种方案,但也是只用过 MongoDB
ElasticSearch 多边形搜索,先根据人的坐标确定多边形。
https://www.elastic.co/guide/en/elasticsea...
PostgreSQL+PostGIS 这是一个做 Rails 的人分享的。
百度 api,先把用户的数据信息插入进去,之后使用百度的 api 来查询,这个没用过,也是道听途书。
没有做过。我所知道的:
MongoDB 2.4 后就加入了 Geo 特性
Redis 3.2 加入了 Geo 特性
用过ES,专业做搜索,还能配合其他的查询、排序、聚合功能。
我同学补充的:ElasticSearch 和 PostgreSQL 也支持 Geo 特性
以前使用的redis的geo,还挺方便的
使用Redis GEO
今天早上还在讨论这个,也准备用mongodb了。
原来看到了 http://www.cocoachina.com/ios/20141118/102... 又看到了 https://github.com/mjaschen/phpgeo
mysql 就能搞定,
算法的问题用勾股定理
假设中心点的坐标为 (a, b)
前几天同事做的【附近的人】也是用的MongoDB
redis里也有geo,但是没用过
@lijinma
PostgreSQL+PostGIS
这种之前也有听到过。1、数据库中存 “根据纬经度hash计算值” 的字段 H,并加索引提高查询速度;
2、计算当前用户A “经纬度hash值” H1,根据其值H1 模糊查询 字段H,可得到附近人列表。并根据经纬度计算其距离;
3、将附近人列表加入redis sort set, sort为距离,值为用户id (或者可用array_multisort 来排序);
4、返回list
印象中几年前国家电网的内网 GIS 系统是用 PostgreSQL 实现。