Anda dapat menentukan indeks geografis seperti ini di mongoid
class Item
include Mongoid::Document
field :loc, :type => Array
index(
[
[:loc, Mongo::GEO2D]
], background: true
)
end
Dan untuk pertanyaan
$dekat perintah (tanpa maxDistance)
location = [80.24958300000003, 13.060422]
items = Item.where(:loc => {"$near" => location})
$dekat perintah (dengan maxDistance)
distance = 10 #km
location = [80.24958300000003, 13.060422]
items = Item.where(:loc => {"$near" => location , '$maxDistance' => distance.fdiv(111.12)})
Ubah jarak dengan 111,12 (satu derajat kira-kira 111,12 kilometer) saat menggunakan km, atau biarkan jarak seperti saat menggunakan derajat
$centerSphere / $nearSphere kueri
location = [80.24958300000003, 13.060422]
items = Item.where(:loc => {"$within" => {"$centerSphere" => [location, (distance.fdiv(6371) )]}})
Ini akan menemukan item dalam radius 10 km. Di sini kita perlu mengonversi jarak/6371(jari-jari bumi) untuk membuatnya bekerja dengan km.
$kotak (kueri kotak pembatas)
first_loc = [80.24958300000003, 13.060422]
second_loc = [81.24958300000003, 12.060422]
items = Item.where(:loc => {"$within" => {"$box" => [first_loc, second_loc]}})
Ini akan membantu Anda menemukan item di dalam kotak pembatas yang diberikan.