如何使用 mongoid、rails 和谷歌地图搜索“附近的用户”
Posted
技术标签:
【中文标题】如何使用 mongoid、rails 和谷歌地图搜索“附近的用户”【英文标题】:How to search for "Nearby Users" using mongoid, rails, and google maps 【发布时间】:2011-06-16 03:43:59 【问题描述】:我有一个模型 User 使用 Mongo DB 存储纬度和经度数据。
我正在使用 google maps javascript api v3 来获取这些数据。
显示“附近用户”的最佳方式是什么?
【问题讨论】:
抱歉,这“过于宽泛”,同时又“过于本地化”。我们是来帮忙的,而不是替你着想。向我们展示您遇到的具体问题,或者告诉我们哪个孤立的部分给您带来了麻烦。 抱歉,我应该换一种说法:/ 我显然可以想到各种解决方案,但我不知道 mongo 有地理空间索引。 DhruvPathak 的回答非常完美。 【参考方案1】:虽然 DhruvPathak 的答案是正确的,但这里是用于进行地理查询的等效 mongoid ruby 代码
User.where(:loc => '$near' => [50,50])
User.where(:loc => '$near' => [50,50],'$maxDistance' => 5)
【讨论】:
【参考方案2】:存储您的数据,使其具有地理空间索引。 MongoDb 对此具有内置支持。然后您可以轻松地使用内置查询 距离/接近度。
看看:
http://www.mongodb.org/display/DOCS/Geospatial+Indexing
*Querying
The index can be used for exact matches:
db.places.find( loc : [50,50] )
Of course, that is not very interesting. More important is a query to find points near another point, but not necessarily matching exactly:
db.places.find( loc : $near : [50,50] )
The above query finds the closest points to (50,50) and returns them sorted by distance (there is no need for an additional sort parameter). Use limit() to specify a maximum number of points to return (a default limit of 100 applies if unspecified):
db.places.find( loc : $near : [50,50] ).limit(20)
You can also use $near with a maximum distance
db.places.find( loc : $near : [50,50] , $maxDistance : 5 ).limit(20)*
【讨论】:
以上是关于如何使用 mongoid、rails 和谷歌地图搜索“附近的用户”的主要内容,如果未能解决你的问题,请参考以下文章
GPS 追踪器与 jQuery 移动、PhoneGap 和谷歌地图