मोंगोडीबी का बहुत अच्छा Geospatial Indexing सुविधा है। मैं इसे Mongoid के साथ रेल में कैसे उपयोग कर सकता हूं?रेल में मोंगोइड के साथ मोंगोडीबी - भू-स्थानिक सूचकांक
उत्तर
आप भू अनुक्रमित इस तरह mongoid
class Item
include Mongoid::Document
field :loc, :type => Array
index(
[
[:loc, Mongo::GEO2D]
], background: true
)
end
में और प्रश्नों
$ आदेश (maxDistance बिना)
location = [80.24958300000003, 13.060422]
items = Item.where(:loc => {"$near" => location})
$ के पास आदेश के पास के लिए (के साथ परिभाषित कर सकते हैं maxDistance)
.12 द्वाराdistance = 10 #km
location = [80.24958300000003, 13.060422]
items = Item.where(:loc => {"$near" => location , '$maxDistance' => distance.fdiv(111.12)})
Convert दूरी जब किमी का उपयोग कर, या दूरी छोड़ के रूप में यह डिग्री
का उपयोग कर$ centerSphere/$ nearSphere पर है (एक डिग्री लगभग 111.12 किलोमीटर की दूरी पर है) प्रश्नों
location = [80.24958300000003, 13.060422]
items = Item.where(:loc => {"$within" => {"$centerSphere" => [location, (distance.fdiv(6371))]}})
यह वस्तुओं को 10 किमी त्रिज्या के भीतर मिल जाएगा। यहां हमें किमी/किमी के साथ काम करने के लिए दूरी/6371 (पृथ्वी त्रिज्या) को बदलने की जरूरत है।
$ बॉक्स (बाउंडिंग बॉक्स प्रश्नों)
first_loc = [80.24958300000003, 13.060422]
second_loc = [81.24958300000003, 12.060422]
items = Item.where(:loc => {"$within" => {"$box" => [first_loc, second_loc]}})
यह दिया बाउंडिंग बॉक्स के भीतर आइटम खोजने के लिए आप में मदद मिलेगी।
रमेशवेल का जवाब बहुत अच्छा है।
index(
{ loc: Mongo::GEO2D },
{ background: true }
)
वास्तव में यह मेरे लिए 'मोंगोइड 3.0.0' के साथ काम नहीं करता है, दस्तावेज निम्नलिखित प्रारूप' सूचकांक ({loc: "2d"}, {min: -200, अधिकतम: 200}) इंगित करता है। चीयर्स। – rjgonzo
सभी उन जवाब MongoDB के नवीनतम संस्करण के साथ एक पुराने हो गए हैं और फेंक देगा:
एक अद्यतन के रूप में, Mongoid 3.0.4 में, मैं के रूप में यह rake db:mongoid:create_indexes
साथ काम करने के लिए इस प्रकार सूचकांक को परिभाषित करने के लिए किया था कुछ uninitialized constant Mongo::GEO2D
mongoid 4/5 के लिए, मैं सुझाव है कि आप mongoid-geospatial gem पर नजर है आप 2 डी ऑब्जेक्ट्स या निर्देशांक के साथ खेलने की जरूरत है।
(maxDistance के साथ) जब मैं $ आदेश के पास का उपयोग करने की यह एक त्रुटि देता है: {$ maxDistance: .001799856011519079, $ के पास: [80.249, १३.०,६०,४२२]} भू मूल्यों संख्या होना जरूरी किसी भी विचार? यह जगह पर "करीब $" के साथ काम करता है, लेकिन जब मैं "$ maxDistance" जोड़ता हूं, तो यह चोक करता है। – Vasily
@ वैसे, मुझे यकीन नहीं है .. $ maxdistance के साथ $ निकटतम क्वेरी आपके द्वारा निर्दिष्ट मानों के साथ पूरी तरह से ठीक काम करती है। 'Item.where (: loc => {" $ near "=> [80.249, 13.060422], '$ maxDistance' => 0.001799856011519079})'। यह ठीक काम करता है .. हो सकता है कि आप मुझे वह प्रश्न दिखा सकें जो आप कोशिश कर रहे थे? हम तब देखेंगे – RameshVel
जब मैं maxDistance का उपयोग करता हूं तो मुझे एक ही त्रुटि मिलती है। रुबी 1.8। क्या आपको लोगों को समाधान मिला? –