उस फ़ंक्शन का उपयोग करके दूरी की गणना करना काफी कम्प्यूटेशनल रूप से महंगा है, क्योंकि इसमें अनुवांशिक कार्यों का एक पूरा समूह शामिल है। जब आपके पास फ़िल्टर करने के लिए बड़ी संख्या में पंक्तियाँ हों, तो यह समस्याग्रस्त होने वाला है।
यहां एक विकल्प दिया गया है, एक अनुमान जो कम्प्यूटेशनल रूप से कम खर्चीला है:
मील में अनुमानित दूरी:
sqrt(x * x + y * y)
where x = 69.1 * (lat2 - lat1)
and y = 53.0 * (lon2 - lon1)
आप कोसाइन गणित फ़ंक्शन को जोड़कर इस अनुमानित दूरी की गणना की सटीकता में सुधार कर सकते हैं:
मीलों में बेहतर अनुमानित दूरी:
sqrt(x * x + y * y)
where x = 69.1 * (lat2 - lat1)
and y = 69.1 * (lon2 - lon1) * cos(lat1/57.3)
स्रोत:http://www.meridianworlddata.com/Distance-Calculation.asp
मैंने बेतरतीब ढंग से जेनरेट किए गए डेटासेट के साथ परीक्षणों का एक समूह चलाया।
- 3 एल्गोरिदम के लिए सटीकता में अंतर न्यूनतम है , विशेष रूप से कम दूरी पर
- सबसे धीमा एल्गोरिथम, निश्चित रूप से, ट्रिगर फ़ंक्शंस वाला एक है (आपके प्रश्न पर एक)। यह अन्य दो की तुलना में 4 गुना धीमी है।
निश्चित रूप से इसके लायक नहीं है। बस एक अनुमान के साथ जाएं।
कोड यहां है:http://pastebin.org/424186
MySQL पर इसका उपयोग करने के लिए, एक संग्रहीत प्रक्रिया बनाएं। जो समन्वय तर्क लेता है और दूरी लौटाता है, तो आप कुछ ऐसा कर सकते हैं:
SELECT columns
FROM table
WHERE DISTANCE(col_x, col_y, target_x, target_y) < 25