我目前正在尝试创建一个小型网络应用程序,它可以找到附近也在使用它的其他人。
当我使用地理定位功能时,我将用户的“最后已知位置”保存在服务器上大约一个小时,然后从数据库集合中删除该位置(我使用 MongoDb)
每次,我都会将位置与所有最近签到的人(位置集合中的人)进行比较,以找到接近的人。
但是这种方法似乎效率不高,人数可能很大,这意味着要迭代一长串列表并与不同国家的人比较职位。
我正在考虑为每个国家或时区分成多个表。这将阻止应用程序搜索太远。
有什么建议或想法吗?
谢谢
我目前正在尝试创建一个小型网络应用程序,它可以找到附近也在使用它的其他人。
当我使用地理定位功能时,我将用户的“最后已知位置”保存在服务器上大约一个小时,然后从数据库集合中删除该位置(我使用 MongoDb)
每次,我都会将位置与所有最近签到的人(位置集合中的人)进行比较,以找到接近的人。
但是这种方法似乎效率不高,人数可能很大,这意味着要迭代一长串列表并与不同国家的人比较职位。
我正在考虑为每个国家或时区分成多个表。这将阻止应用程序搜索太远。
有什么建议或想法吗?
谢谢
我会在这里使用 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 您可以控制“最近”用户可能距离提供的坐标多少米。