Mongoid的Model.near方法的最大距离

4

我一直在使用地理位置附近查询,但似乎无法限制结果在某个半径范围内。例如,如何在此查询中将搜索限制在20英里范围内?

Place.near(:coordinates => location.reverse) 
# must reverse the resulting coordinates array because mongo stores them backwards [lng,lat]
4个回答

10

在任何纬度上,一度南北纬差的弧长约为60海里、111公里或69英里。你可以在维基百科这里或Mongo地理空间页面“地球是圆的,但地图是平的”了解更多信息。

当使用英里或公里时,将距离除以69或111,因此现在您可以像这样查询:

Place.where(:coordinates => {"$near" => location.reverse , '$maxDistance' => 20.fdiv(69)})

3

MongoDB支持一个名为maxDistance的属性(MongoDB查询)。

db.places.find( { loc : { $near : [50,50] , $maxDistance : 5 } } )

mongoid_geo扩展提供了within_boxwithin_center方法,可用于处理地理位置相关的问题。


1

控制器:

lng, lat, dis = params[:lng], params[:lat], params[:dis]
page, per_page = params[:page] || 1 , params[:per_page] || 30
sms = SideMongo.geo_near([lng.to_f,lat.to_f], max_distance: dis.to_i, unit: "km".to_sym, spherical: true).sort_by!{|r| r.geo[:distance] }
page_sms = sms.per(per_page).page(page)

3
在 Mongoid 4.0 中这不起作用...会返回一个 ArgumentError:参数数量错误(2个参数应该是1个)。 - vanboom

0

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接