一对多地理空间搜索
Posted
技术标签:
【中文标题】一对多地理空间搜索【英文标题】:One to many geospatial search 【发布时间】:2013-05-25 13:01:48 【问题描述】:对于一个对象,我想关联多个 lat/lng 对,这样当给定我的地理位置时,我可以获得离我最近的对象 [即如果这些 lat/lng 对中的任何一个满足最近的条件]
虽然我知道如果对象只有一对 lat/lng 时如何进行地理空间搜索,但我被困在这个多重地理空间搜索中。
我想知道如何在 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
【讨论】:
【参考方案2】:制作新表 - 一对多的关系。所以有你的对象表,第二个有一个 object_id 和一个纬度/经度。如果一个对象有很多位置,那么它在这个新表中有很多行。
然后像其他方式一样搜索这个新表。 (无论是 mysql 还是 sphinx)
(您已经有了 MongoDB 的答案:)
【讨论】:
以上是关于一对多地理空间搜索的主要内容,如果未能解决你的问题,请参考以下文章