हाँ, एक बेहतर तरीका है। आपको एक स्थानिक सूचकांक का उपयोग करने की आवश्यकता है । ये इंडेक्स ज्यामिति के बारे में मेटाडेटा का आयोजन करते हैं जो बहुत तेज़ी से दूर ज्यामितीय रूप से फ़िल्टर करने के लिए आपके द्वारा वर्णित गणनाओं से बचने के लिए बहुत सारे सीपीयू चक्रों को बचाता है। आपको अपने आप को लागू करने से परेशान नहीं होना चाहिए क्योंकि सभी प्रमुख संबंधपरक डेटाबेस उनके साथ जाने के लिए एक स्थानिक ज्यामिति प्रकार और अनुक्रमित प्रदान करते हैं।
आप "दूरी के भीतर" प्रश्न (कुछ अन्य ज्यामिति की एक निश्चित दूरी के भीतर ज्यामिति के लिए प्रश्न) में देखना चाहते हैं। ये बहुत मानक और बहुत हल की गई समस्याएँ हैं और उपरोक्त सभी डेटाबेस में संभव हैं (और कई में निर्मित):
- PostGIS:
ST_DWithin
- SQL सर्वर:
STDistance
(स्पष्ट नहीं है कि इस फ़ंक्शन के 3D भूगोल संस्करण पर सूचकांक का उपयोग समर्थित है)
- ओरेकल:
SDO_WITHIN_DISTANCE
(यह स्पष्ट रूप से यह नहीं कहता है कि यह सूचकांक उपयोग को ट्रिगर करेगा। मैं क्वेरी योजना की दोहरी जांच करूंगा। आपको सूचकांक का उपयोग SDO_FILTER
करने के लिए इसे प्राप्त करने के लिए आवेदन करने की आवश्यकता हो सकती है ।)
- MySQL: फिर भी यह पता लगाना।
सूचकांक उपयोग को ट्रिगर करने के लिए समाधान
में सबसे खराब मामला है जहाँ आप मुसीबत प्रणाली इन प्रश्नों के साथ स्थानिक सूचकांक का उपयोग करने के लिए हो रही है, तो आप एक अतिरिक्त फ़िल्टर जोड़ सकते हैं। आप लंबाई 2 * (खोज दूरी) के पक्षों के साथ एक वर्ग सीमांकन बॉक्स बना सकते हैं अपनी खोज बिंदु पर केंद्रित और तालिका geometries 'के खिलाफ बॉक्स बाउंडिंग तुलना कि वास्तविक दूरी की जाँच से पहले। यही ST_DWithin
ऊपर PostGIS ' आंतरिक रूप से वैसे भी करता है।
जीआईएस में दूरी
जबकि स्थानिक सूचकांक शानदार हैं और आपकी समस्या का बिल्कुल सही समाधान है, दूरी की गणना तार्किक रूप से जटिल हो सकती है। विशेष रूप से, आपको यह चिंता करने की आवश्यकता है कि आपके डेटा में कौन से प्रक्षेपण (मूल रूप से समन्वय प्रणाली के लिए सभी पैरामीटर) संग्रहीत हैं। अधिकांश 2D अनुमान (विभिन्न अक्षांश / लंबे अनुमानों की तरह कोणीय समन्वय प्रणालियों के अलावा अन्य चीजें) लंबाई को काफी विकृत करती हैं। उदाहरण के लिए, वेब मर्केटर प्रोजेक्शन (Google, बिंग और प्रत्येक अन्य प्रमुख आधार मानचित्र प्रदाता द्वारा उपयोग किया जाने वाला) क्षेत्रों और दूरियों का विस्तार करता है, क्योंकि स्थान भूमध्य रेखा से और आगे बढ़ जाता है । मैं गलत हो सकता हूं क्योंकि मैं जीआईएस में औपचारिक रूप से शिक्षित नहीं हूं, लेकिन 2 डी अनुमानों के लिए मैंने जो सबसे अच्छा देखा है वह कुछ विशिष्ट हैं जो एक से दूरी का वादा करते हैंपूरी दुनिया में एकल, निरंतर बिंदु । (नहीं, यह हर क्वेरी के लिए एक अलग प्रक्षेपण का उपयोग करने के लिए व्यावहारिक नहीं है; जो आपके अनुक्रमित बेकार को प्रस्तुत करेगा।)
लब्बोलुआब यह है कि आपको यह सुनिश्चित करने की आवश्यकता है कि आपका गणित सटीक है। विकास के दृष्टिकोण से ऐसा करने का सबसे सरल तरीका कोणीय अनुमानों का उपयोग करना है (इन्हें अक्सर "भौगोलिक" के रूप में संदर्भित किया जाता है) और ऐसे कार्य जो एक गोलाकार मॉडल का उपयोग करके गणित का समर्थन करते हैं, लेकिन ये गणना 2 डी समकक्षों की तुलना में थोड़ी अधिक महंगी हैं। और कुछ DBs उन्हें अनुक्रमण का समर्थन नहीं कर सकते हैं। यदि आप उनका उपयोग करके स्वीकार्य प्रदर्शन प्राप्त कर सकते हैं, हालांकि, शायद यही रास्ता तय करना है। एक अन्य आम विकल्प क्षेत्रीय अनुमानों (जैसे कि UTM ज़ोन) हैं जो दोनों दूरी और क्षेत्रों को सही होने के लिए प्राप्त करते हैं यदि आपका डेटा दुनिया के किसी विशेष हिस्से तक सीमित है। आपके ऐप के लिए जो सबसे अच्छा है वह आपकी विशिष्ट आवश्यकताओं पर निर्भर करेगा,
यह तब भी लागू होता है जब आप स्थानिक अनुक्रमित में निर्मित का उपयोग नहीं करते हैं। आपके डेटा में इस बात की परवाह किए बिना कि आप वर्तमान में किस तकनीक या तकनीक का उपयोग कर रहे हैं या भविष्य में उपयोग कर रहे हैं, और यह पहले से ही वर्तमान में आपके द्वारा किए जा रहे किसी भी प्रश्न और गणना को प्रभावित कर रहा है।