U kunt geo-indexen zoals deze definiëren in mongoïde
class Item
include Mongoid::Document
field :loc, :type => Array
index(
[
[:loc, Mongo::GEO2D]
], background: true
)
end
En voor vragen
$bijna commando (zonder maxDistance)
location = [80.24958300000003, 13.060422]
items = Item.where(:loc => {"$near" => location})
$bijna commando (met maxDistance)
distance = 10 #km
location = [80.24958300000003, 13.060422]
items = Item.where(:loc => {"$near" => location , '$maxDistance' => distance.fdiv(111.12)})
Converteer afstand met 111,12 (één graad is ongeveer 111,12 kilometer) wanneer km wordt gebruikt, of laat afstand zoals deze is met graad
$centerSphere / $nearSphere vragen
location = [80.24958300000003, 13.060422]
items = Item.where(:loc => {"$within" => {"$centerSphere" => [location, (distance.fdiv(6371) )]}})
Deze vindt de artikelen binnen de straal van 10 km. Hier moeten we de afstand/6371 (aardradius) omrekenen om het met km te laten werken.
$box (query's met selectiekader)
first_loc = [80.24958300000003, 13.060422]
second_loc = [81.24958300000003, 12.060422]
items = Item.where(:loc => {"$within" => {"$box" => [first_loc, second_loc]}})
Dit zal je helpen om de items binnen het gegeven selectiekader te vinden.