Mysql
 sql >> डेटाबेस >  >> RDS >> Mysql

PHP MySql और जियोलोकेशन

उस फ़ंक्शन का उपयोग करके दूरी की गणना करना काफी कम्प्यूटेशनल रूप से महंगा है, क्योंकि इसमें अनुवांशिक कार्यों का एक पूरा समूह शामिल है। जब आपके पास फ़िल्टर करने के लिए बड़ी संख्या में पंक्तियाँ हों, तो यह समस्याग्रस्त होने वाला है।

यहां एक विकल्प दिया गया है, एक अनुमान जो कम्प्यूटेशनल रूप से कम खर्चीला है:

मील में अनुमानित दूरी:

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


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. mysql दिनांक में पार्सिंग स्ट्रिंग

  2. MySQL में एक शॉट में कई टेबल ड्रॉप करें

  3. एफ # शुरुआती:सर्वर से डेटा की एक सरणी पुनर्प्राप्त करना

  4. InnoDB पर पूर्ण टेक्स्ट जैसी खोज प्राप्त करने का कोई भी तरीका

  5. MySQL में डिफ़ॉल्ट सॉर्ट-ऑर्डरिंग (वैकल्पिक तालिका ... द्वारा आदेश ...;)