Możesz zdefiniować indeksy geograficzne w ten sposób w mongoid
class Item
include Mongoid::Document
field :loc, :type => Array
index(
[
[:loc, Mongo::GEO2D]
], background: true
)
end
Oraz w przypadku zapytań
$blisko polecenie (bez maxDistance)
location = [80.24958300000003, 13.060422]
items = Item.where(:loc => {"$near" => location})
$blisko polecenie (z maxDistance)
distance = 10 #km
location = [80.24958300000003, 13.060422]
items = Item.where(:loc => {"$near" => location , '$maxDistance' => distance.fdiv(111.12)})
Konwertuj odległość o 111,12 (jeden stopień to około 111,12 km) przy użyciu km lub pozostaw odległość tak, jak jest włączona, używając stopni
$centerSphere / $nearSphere zapytania
location = [80.24958300000003, 13.060422]
items = Item.where(:loc => {"$within" => {"$centerSphere" => [location, (distance.fdiv(6371) )]}})
Spowoduje to znalezienie przedmiotów w promieniu 10 km. Tutaj musimy przekonwertować odległość/6371 (promień ziemi), aby działał z km.
Pole $ (zapytania w obwiedni)
first_loc = [80.24958300000003, 13.060422]
second_loc = [81.24958300000003, 12.060422]
items = Item.where(:loc => {"$within" => {"$box" => [first_loc, second_loc]}})
Pomoże Ci to znaleźć elementy w podanym polu ograniczającym.