数据库/地理定位。寻找附近的人

时间:2013-06-23 06:35:41

标签: mongodb web geolocation location coordinates

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

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

每次,我都会将这个位置与最近办理登机手续的人(位置收集中的人)进行比较,以找到离家很近的人。

这种方法似乎效率不高,人数可能很大,这意味着要重复一长串清单,并与不同国家的人进行比较。

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

有任何建议或想法吗?

由于

1 个答案:

答案 0 :(得分:2)

我会在这里使用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,您可以控制“最近”用户所提供坐标的距离。