2013-05-25 55 views
0

对于一个对象,我想关联多个纬度/经度对,这样,当给定我的地理位置时,我可以得到离我最近的对象[即如果这些纬度/经度对任何一个满足最近的条件]一对多地理空间搜索

虽然我知道如何做一个地理空间搜索,如果一个对象只有一个经纬度/对,我坚持这个多地理空间搜索。

我想知道如何在MySQL,Sphinx或MongoDB中实现这个功能?如果还有其他技术可以完成这项工作,我也很乐意了解这一点。非常感谢!

回答

1

您可以在MongoDB中使用位置数组。

> db.array.insert({locs:[ [ 1, 2], [1.5, 1.8], [2, 1] ]}) 
Inserted 1 record(s) in 134ms 
> db.array.ensureIndex({locs:'2d'}) 
Inserted 1 record(s) in 6ms 
> db.array.insert({locs:[ [ 1, 2], [7.5, 1.8], [2, 5] ]}) 
Inserted 1 record(s) in 2ms 
> db.array.find({locs:{$near:[1,2]}}) 
{ "_id" : ObjectId("51a193f11192cab2195f7a8a"), "locs" : [ [ 1, 2 ], [ 1.5, 1.8 ], [ 2, 1 ] ] } 
{ "_id" : ObjectId("51a1940b1192cab2195f7a8c"), "locs" : [ [ 1, 2 ], [ 7.5, 1.8 ], [ 2, 5 ] ] } 
{ "_id" : ObjectId("51a193f11192cab2195f7a8a"), "locs" : [ [ 1, 2 ], [ 1.5, 1.8 ], [ 2, 1 ] ] } 
{ "_id" : ObjectId("51a193f11192cab2195f7a8a"), "locs" : [ [ 1, 2 ], [ 1.5, 1.8 ], [ 2, 1 ] ] } 
{ "_id" : ObjectId("51a1940b1192cab2195f7a8c"), "locs" : [ [ 1, 2 ], [ 7.5, 1.8 ], [ 2, 5 ] ] } 
{ "_id" : ObjectId("51a1940b1192cab2195f7a8c"), "locs" : [ [ 1, 2 ], [ 7.5, 1.8 ], [ 2, 5 ] ] } 
Fetched 6 record(s) in 8ms 
1

建立新的表格 - 一对多的关系。所以有你的对象表,其次是一个object_id和lat/long。如果一个对象有许多位置,它在这个新表中有很多行。

然后,只要搜索这个新的表格,否则。 (是那个mysql或狮身人面像)

(你已经有了MongoDB的答案:)

相关问题