我一直在使用地球附近的查詢一段時間了,但我似乎無法弄清楚如何限制結果在一定範圍內。例如,如何在此查詢中將搜索範圍限制在20英里以內?與Mongoid的Model.near方法的最大距離
Place.near(:coordinates => location.reverse)
# must reverse the resulting coordinates array because mongo stores them backwards [lng,lat]
我一直在使用地球附近的查詢一段時間了,但我似乎無法弄清楚如何限制結果在一定範圍內。例如,如何在此查詢中將搜索範圍限制在20英里以內?與Mongoid的Model.near方法的最大距離
Place.near(:coordinates => location.reverse)
# must reverse the resulting coordinates array because mongo stores them backwards [lng,lat]
南北緯度差的arcdegree的長度,大約是60海里,111公里或69法定英里在任何緯度;你可以閱讀更多關於here in wikipedia或mongo geospatial頁面The Earth is Round but Maps are Flat。通過69或分別使用英里或公里時111
鴻溝的距離,所以現在你可以查詢它像這樣
Place.where(:coordinates => {"$near" => location.reverse , '$maxDistance' => 20.fdiv(69)})
MongoDB的支持maxDistance屬性(MongoDB Querying)
db.places.find({ loc : { $near : [50,50] , $maxDistance : 5 } })
而且該mongoid_geo擴展名具有within_box和within_center方法。
控制器:
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)
嘗試......
的$ maxDistance通過蒙戈需要的是弧度,所以你需要的距離轉換成在地球的表面成經/緯度角度。
https://en.wikipedia.org/wiki/Arc_(geometry)
角(弧度)= distance_at_surface/radius_of_earth
角=10公里/6371公里
角= 10SM/3960sm
這並不在Mongoid工作4.0 ...返回一個ArgumentError:錯誤的參數數目(2代表1) – vanboom