数据库/地理位置。寻找附近的人[关闭]

Posted

技术标签:

【中文标题】数据库/地理位置。寻找附近的人[关闭]【英文标题】:Database / geolocation. Finding people nearby [closed] 【发布时间】:2013-06-23 06:35:40 【问题描述】:

我目前正在尝试创建一个小型网络应用程序,它可以找到附近也在使用它的其他人。

当我使用地理定位功能时,我将用户的“最后已知位置”保存在服务器上大约一个小时,然后从数据库集合中删除该位置(我使用 MongoDb)

每次,我都会将位置与所有最近签到的人(位置集合中的人)进行比较,以找到接近的人。

虽然这种方法似乎效率不高,但人数可能很大,这意味着要迭代一长串名单并与不同国家的人比较职位。

我正在考虑为每个国家或时区划分为多个表。这会阻止应用搜索太远。

有什么建议或想法吗?

谢谢

【问题讨论】:

【参考方案1】:

我会在这里使用 MongoDB 2.4 的地理空间支持。对于每个用户,以以下格式存储位置(它是 GeoJSON):


    _id: ...,
    name: ...,
    last_known_location:  
        "type": "Point",
        "coordinates": [ longitude, latitude ]
    

并设置以下索引:

db.location.ensureIndex(  last_known_location: "2dsphere"  );

现在您可以使用以下查询非常轻松地搜索当前用户附近的所有人:

db.location.find( 
    last_known_location: 
        $near:  
            $geometry:  
                "type" : "Point", 
                "coordinates" : [ -0.1485302, 51.5250157 ] 
            
        , 
        $maxDistance: 10 
     
 );

使用 $maxDistance,您可以控制“最近”用户可能距离提供的坐标多少米。

【讨论】:

效果很好,谢谢!

以上是关于数据库/地理位置。寻找附近的人[关闭]的主要内容,如果未能解决你的问题,请参考以下文章

查找附近的人。

查找附近的人。

使用地理跟踪和 SQL 查询

LBS基于地理位置的搜索之微信 附近的人 简单实现

vertx+redis实现查找附近的人

如何使用 Redis 实现 “附近的人” 这个功能