如何使用 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 和谷歌地图搜索“附近的用户”的主要内容,如果未能解决你的问题,请参考以下文章

Xamarin 和谷歌地图上的不同距离

谷歌地图和谷歌位置自动完成冲突

GPS 追踪器与 jQuery 移动、PhoneGap 和谷歌地图

即时运行和谷歌地图的问题

Laravel 和谷歌地图:foreach 纬度/经度显示标记或地图

React.memo 不适用于功能组件和谷歌地图