2013-05-25 95 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的答案:)

相關問題