2010-02-28 6 views
6

हम आपको एक Android अनुप्रयोग है कि उपयोगकर्ता के वर्तमान स्थान (अक्षांश, लंबे समय) का उपयोग करें और शीर्ष 50 दिखाएगा निर्माण कर रहे हैं वर्तमान स्थान के आस-पास के स्थान, दूरी से क्रमबद्ध।Android पर SQLite: एक SQLite जिले db समारोह बनाने के लिए कैसे - अक्षांश का उपयोग कर दूरी गणना के लिए अनुप्रयोग में प्रयोग की जाने वाली, लंबे

हमारे पास इन स्थानों को SQLite डीबी में संग्रहीत किया गया है। हम ऐप के साथ स्क्लाइट डीबी के साथ जहाज करने की योजना बना रहे हैं।

आदेश केवल प्रासंगिक शीर्ष 50 सबसे करीब स्थानों लाने के लिए, हम (दो अंक के बीच दूरी की गणना करने के लिए) और हमारे क्वेरी में इसका इस्तेमाल एक डाटाबेस समारोह जिला परिभाषित करना चाहते हैं।

मैं कैसे Android एप्लिकेशन के लिए एक कस्टम SQLite समारोह को परिभाषित कर सकते हैं? ऐसा करने के लिए जावा एपीआई कॉल क्या होगा?

हम सफलतापूर्वक हमारे iPhone App में इस दृष्टिकोण को लागू किया है - का उपयोग कर उद्देश्य सी

+0

http://stackoverflow.com/questions/3126830/query-to-get-records-based-on-radius-in-sqlite – Pentium10

+0

हैलो आपने आईओएस पर इसे कैसे एकीकृत किया ?? क्योंकि मुझे एक ही काम करने की ज़रूरत है, धन्यवाद –

उत्तर

5

अद्यतन: जवाब यह है कि यदि आप ऐसा नहीं कर सकते हैं।

से: Android. Is it possible to write custom function on C/C++ and use it in SQL query?

+0

जोश, धन्यवाद! यदि आपको कोई फर्क नहीं पड़ता है, तो क्या आप मुझे कुछ नमूना कोड पर इंगित कर सकते हैं - मैं तब सुनिश्चित करूँगा कि कोई गलती न करें। अनेक अनेक धन्यवाद! – Puneet

+2

org.sqlite एक एंड्रॉइड एपीआई नहीं है, इसलिए यह प्रासंगिक नहीं है। – hackbod

+1

आप सही हैं, org.sqlite एक एंड्रॉइड एपीआई नहीं है। हालांकि, आप इसे एक सामग्री प्रदाता को लागू करने के लिए उपयोग कर सकते हैं जो उसने पूछा था। –

0

यह किया जा सकता है, लेकिन आप जावा एपीआई से डेटाबेस में इस लोड नहीं कर सकता। आपको स्क्लाइट लाइब्रेरी का अपना कार्यान्वयन प्रदान करने की आवश्यकता होगी जो कि सी स्तर पर आपके इच्छित कार्यों को प्रदान करने के लिए बढ़ाया गया है। यह मजेदार नहीं है लेकिन यह अच्छी तरह से काम करता है। ध्यान रखें कि गैर-मानक आर्किटेक्चर का उपयोग करके आपको Android डिवाइस के साथ समस्या हो सकती है।

1

का संभावित हल सभी रिकॉर्ड जहां मूल्यों (जैसे कि, देशांतर) में से एक वर्तमान स्थान के करीब है लाने के लिए हो सकता है। यदि आप इस कॉलम को इंडेक्स के रूप में उपयोग करते हैं तो इन्हें लाने से बहुत तेज़ होगा।

उसके बाद, आप अक्षांश तुलना और अपना पूरा दूरी गणना कर से अधिक पुनरावृति करने के लिए एक बहुत कम सबसेट है।

0

मुझे पता है कि यह एक पुराना सवाल है, लेकिन मुझे लगता है कि थोड़ा आसान समाधान है।

यह एक उदाहरण है, लेकिन यह विफल रहता है जब 0 डिग्री को पार कर, यद्यपि आप सभी अक्षांश/देशांतर समायोजित करने के लिए बदलाव कर सकता है।

समग्र समाधान ऑर्डर करने के लिए बहुत अच्छी तरह से काम करता है, लेकिन सापेक्ष में गणना करने के लिए केवल पाइथागोरियन प्रमेय का उपयोग करता है (नोट: स्क्लाइट में कोई वर्ग रूट फ़ंक्शन नहीं है, लेकिन यह प्रासंगिक नहीं है)।

String calcDistance = "(((abs(" + cLat + ") - " + Math.abs(lat) + ") * (abs(" + cLat + ") - " + Math.abs(lat) + "))" + 
        "+ ((abs(" + cLng + ") - " + Math.abs(lng) + ") * (abs(" + cLng + ") - " + Math.abs(lng) + "))) as calc_distance"; 

यदि आपको इस दूरी को ठीक करने की आवश्यकता है, तो आप सभी अक्षांशों के लिए 90 अक्षांश और 180 जोड़कर समायोजित करना चाहते हैं। फिर आप उस बुरा पेट कार्यों से छुटकारा पा सकते हैं।

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