对于我想要关联多个lat / lng对的对象,以便在给定我的地理位置时,我可以得到离我最近的对象[即如果这些lat / lng对中的任何一个满足最近的条件]
虽然我知道如果一个对象只有一个lat / lng对,如何进行地理空间搜索,但我仍然坚持这个多地理空间搜索。
我想知道如何在MySQL,Sphinx或MongoDB中实现这一目标?如果还有其他技术可以做到这一点,我也很感激知道这一点。非常感谢!
答案 0 :(得分: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 :(得分:1)
制作新表 - 一对一的关系。所以有你的对象表,第二个是object_id和lat / long。如果一个对象有很多位置,则在这个新表中有很多行。
然后就像搜索新表一样。 (是那个mysql或sphinx)
(你已经有了MongoDB的答案:)