2011-10-09 13 views

उत्तर

47

आप भू अनुक्रमित इस तरह 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]}}) 

यह दिया बाउंडिंग बॉक्स के भीतर आइटम खोजने के लिए आप में मदद मिलेगी।

+0

(maxDistance के साथ) जब मैं $ आदेश के पास का उपयोग करने की यह एक त्रुटि देता है: {$ maxDistance: .001799856011519079, $ के पास: [80.249, १३.०,६०,४२२]} भू मूल्यों संख्या होना जरूरी किसी भी विचार? यह जगह पर "करीब $" के साथ काम करता है, लेकिन जब मैं "$ maxDistance" जोड़ता हूं, तो यह चोक करता है। – Vasily

+0

@ वैसे, मुझे यकीन नहीं है .. $ maxdistance के साथ $ निकटतम क्वेरी आपके द्वारा निर्दिष्ट मानों के साथ पूरी तरह से ठीक काम करती है। 'Item.where (: loc => {" $ near "=> [80.249, 13.060422], '$ maxDistance' => 0.001799856011519079})'। यह ठीक काम करता है .. हो सकता है कि आप मुझे वह प्रश्न दिखा सकें जो आप कोशिश कर रहे थे? हम तब देखेंगे – RameshVel

+0

जब मैं maxDistance का उपयोग करता हूं तो मुझे एक ही त्रुटि मिलती है। रुबी 1.8। क्या आपको लोगों को समाधान मिला? –

7

रमेशवेल का जवाब बहुत अच्छा है।

index(
    { loc: Mongo::GEO2D }, 
    { background: true } 
) 
+6

वास्तव में यह मेरे लिए 'मोंगोइड 3.0.0' के साथ काम नहीं करता है, दस्तावेज निम्नलिखित प्रारूप' सूचकांक ({loc: "2d"}, {min: -200, अधिकतम: 200}) इंगित करता है। चीयर्स। – rjgonzo

0

सभी उन जवाब MongoDB के नवीनतम संस्करण के साथ एक पुराने हो गए हैं और फेंक देगा:

एक अद्यतन के रूप में, Mongoid 3.0.4 में, मैं के रूप में यह rake db:mongoid:create_indexes साथ काम करने के लिए इस प्रकार सूचकांक को परिभाषित करने के लिए किया था कुछ uninitialized constant Mongo::GEO2D

mongoid 4/5 के लिए, मैं सुझाव है कि आप mongoid-geospatial gem पर नजर है आप 2 डी ऑब्जेक्ट्स या निर्देशांक के साथ खेलने की जरूरत है।

संबंधित मुद्दे