Puede definir índices geográficos como este en mongoid
class Item
include Mongoid::Document
field :loc, :type => Array
index(
[
[:loc, Mongo::GEO2D]
], background: true
)
end
Y para consultas
$cerca comando (sin maxDistance)
location = [80.24958300000003, 13.060422]
items = Item.where(:loc => {"$near" => location})
$cerca comando (con maxDistance)
distance = 10 #km
location = [80.24958300000003, 13.060422]
items = Item.where(:loc => {"$near" => location , '$maxDistance' => distance.fdiv(111.12)})
Convierta la distancia en 111,12 (un grado es aproximadamente 111,12 kilómetros) cuando use km, o deje la distancia como está al usar grados
$centerSphere / $nearSphere consultas
location = [80.24958300000003, 13.060422]
items = Item.where(:loc => {"$within" => {"$centerSphere" => [location, (distance.fdiv(6371) )]}})
Esto encontrará los artículos dentro del radio de 10 km. Aquí necesitamos convertir la distancia/6371 (radio terrestre) para que funcione con km.
$caja (consultas de cuadro delimitador)
first_loc = [80.24958300000003, 13.060422]
second_loc = [81.24958300000003, 12.060422]
items = Item.where(:loc => {"$within" => {"$box" => [first_loc, second_loc]}})
Esto le ayudará a encontrar los elementos dentro del cuadro delimitador dado.