0

对于一个对象,我想关联多个 lat/lng 对,这样当给定我的地理位置时,我可以获得离我最近的对象 [即,如果这些 lat/lng 对中的任何一个满足最近的条件]

虽然我知道如果一个对象只有一对 lat/lng 时如何进行地理空间搜索,但我被困在这个多重地理空间搜索中。

我想知道如何在 MySQL、Sphinx 或 MongoDB 中实现这一点?如果有其他技术可以做到这一点,我也将不胜感激。非常感谢!

4

2 回答 2

1

制作新表 - 一对多的关系。所以有你的对象表,第二个有一个 object_id 和一个纬度/经度。如果一个对象有很多位置,那么它在这个新表中有很多行。

然后像其他方式一样搜索这个新表。(无论是 mysql 还是 sphinx)

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

于 2013-05-27T14:38:11.053 回答
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
于 2013-05-26T04:50:41.130 回答