2010-07-13 8 views
7

मैं MySQL के साथ Grails 1.3.2 पर काम कर रहा हूं। मुझे डेटाबेस में कुछ स्थानों के अक्षांश और देशांतर को स्टोर करने की आवश्यकता है और फिर उपयोगकर्ता के वर्तमान स्थान के आधार पर, मुझे उस स्थान के किसी विशेष त्रिज्या के भीतर मौजूद वस्तुओं को वापस करने की आवश्यकता है। उपयोगकर्ता की वर्तमान समन्वय की दी गई त्रिज्या Grails में खोज स्थानिक (भू-स्थान) को कार्यान्वित करने के लिए कैसे?

  • एक पूर्ण पाठ खोज प्रदान में साथ-स्थानों के लिए

    1. खोज: तो, हम मूल रूप से निम्नलिखित आवश्यकताओं है। वर्तमान में हम इस
    2. के लिए खोज योग्य उपयोग कर रहे हैं उपयोगकर्ता के वर्तमान समन्वय के दिए गए त्रिज्या के साथ पूर्ण पाठ खोज का संयोजन करें।

    मैं यहां हमारे विभिन्न विकल्पों को देख रहा हूं और यह जानना चाहता हूं कि इसे लागू करने के लिए आपके विचार/सुझाव क्या हैं। विभिन्न विकल्पों यहाँ है कि हम कर रहे हैं:

    1. Lucene स्थानिक खोज (http://wiki.apache.org/lucene-java/SpatialSearch) और कैसे खोजा

    2. Grails Solr प्लगइन (http://www.grails.org/plugin/solr) के साथ इसका इस्तेमाल करने पर गौर। लेकिन यह डोमेन ऑब्जेक्ट्स वापस नहीं करता है।

    3. Grails सिलाई प्लगइन (http://www.grails.org/plugin/stitches)। लेखक की साइट (http://www.philliprhodes.com/content/stitches-30-seconds) को छोड़कर बहुत सारे दस्तावेज नहीं हैं।

    4. डोमेन वर्ग के सभी क्षेत्रों में एक पूर्ण पाठ अनुक्रमणिका के साथ MySQL स्पेटियल एक्सटेंशन। अगर हम इस मार्ग पर जाते हैं, तो हम खोज योग्य नहीं होंगे।

    5. Postgres/

    हाइबरनेट-स्थानिक (http://blog.mollusca.ch/2008/10/4/grails-spatial-data-postgis) के साथ PostGIS एकीकरण मुझे विश्वास है कि यह है कि नक्शे के साथ एकीकृत किसी भी आवेदन में एक बहुत ही बुनियादी आवश्यकता है।

    तो, मैं वास्तव में इस कार्यक्षमता को लागू करने के लिए सबसे उपयुक्त तरीका जानने में रूचि रखता हूं।

    धन्यवाद

  • उत्तर

    4

    (मैं एक प्रोटोटाइप दायरे में पंक्तियों को खोजने के लिए देशांतर/अक्षांश का उपयोग किया जाता है, लेकिन अब त्याग दिया है कि ब्रिटेन में उपलब्ध GridRef प्रणाली के पक्ष में)

    पहले कदम के रूप, किसी गणना क्षेत्र के आधार पर WHERE स्थिति का उपयोग न करें (उदाहरण के लिए दिए गए समन्वय और पंक्ति के समन्वय के आधार पर वास्तविक दूरी)।

    इसके बजाय, इस प्रयास करें:

    1. चक्र जहां त्रिज्या = अधिकतम दूरी
    2. यह चारों ओर एक बॉक्स आकर्षित घुमावदार देशांतर रेखाओं का उपयोग कर कल्पना कीजिए।
    3. उस बॉक्स में आइटम खोजें।

    व्यवहार में इसका मतलब है:

    1. काम से बाहर कितने डिग्री देशांतर अपने अधिकतम दूरी दिए गए अक्षांश पर
    2. काम से बाहर में कितने डिग्री अक्षांश दिया देशांतर पर अपनी अधिकतम दूरी का प्रतिनिधित्व करते हैं (इस एक गोलाकार-पृथ्वी मॉडल का उपयोग करते समय गुणक तय किया जाएगा)।
    3. चुनें * स्थानों से जहां लंबे> $ वेस्टसाइड और लंबे समय < $ Eastside और अक्षां < $ northside और> $ साउथसाइड

    इसका मतलब है आप एक अस्पष्ट सबसेट प्राप्त करने के लिए बहुत ही सरल गणना करने के एक क्षेत्र को कवर अक्षां के बारे में 30 आपके वास्तविक सर्कल से% बड़ा है। यदि आप टेक्स्ट खोज भी जोड़ना चाहते हैं, तो ऊपर से सरल तुलना के बाद या तो अपने टेक्स्ट क्लॉज को जोड़ें (उपकुंजी) या टेक्स्ट टेक्स्ट को कम्प्यूटेशनल रूप से महंगे हैं।

    1

    Grails Spatial plugin है। ऐसा लगता है कि इसके कुछ सबप्लगिन खोज का समर्थन करते हैं, जैसे HDB plugin

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