Du kan definere geoindekser som dette i mongoid
class Item
include Mongoid::Document
field :loc, :type => Array
index(
[
[:loc, Mongo::GEO2D]
], background: true
)
end
Og for forespørgsler
$near kommando (uden maxDistance)
location = [80.24958300000003, 13.060422]
items = Item.where(:loc => {"$near" => location})
$near kommando (med maxDistance)
distance = 10 #km
location = [80.24958300000003, 13.060422]
items = Item.where(:loc => {"$near" => location , '$maxDistance' => distance.fdiv(111.12)})
Konverter distance med 111,12 (en grad er ca. 111,12 kilometer), når du bruger km, eller lad afstanden være som den er ved brug af grad
$centerSphere / $nearSphere forespørgsler
location = [80.24958300000003, 13.060422]
items = Item.where(:loc => {"$within" => {"$centerSphere" => [location, (distance.fdiv(6371) )]}})
Dette vil finde emnerne inden for en radius på 10 km. Her skal vi konvertere afstanden/6371(jordens radius) for at få det til at fungere med km.
$box (afgrænsningsrammeforespørgsler)
first_loc = [80.24958300000003, 13.060422]
second_loc = [81.24958300000003, 12.060422]
items = Item.where(:loc => {"$within" => {"$box" => [first_loc, second_loc]}})
Dette vil hjælpe dig med at finde emnerne inden for den givne afgrænsningsramme.