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

अक्षांश/देशांतर द्वारा MySQL क्वेरी को सॉर्ट करना

पाइथागोरस याद है?

$sql = "SELECT * FROM table 
    WHERE lon BETWEEN '$minLon' AND '$maxLon' 
      AND lat BETWEEN '$minLat' AND '$maxLat'
    ORDER BY (POW((lon-$lon),2) + POW((lat-$lat),2))";

तकनीकी रूप से यह वास्तविक दूरी के बजाय दूरी का वर्ग है, लेकिन चूंकि आप इसे केवल छँटाई के लिए उपयोग कर रहे हैं इससे कोई फर्क नहीं पड़ता।

यह तलीय दूरी सूत्र का उपयोग करता है, जो छोटी दूरी पर अच्छा होना चाहिए।

हालांकि:

यदि आप अधिक सटीक होना चाहते हैं या लंबी दूरी का उपयोग करना चाहते हैं, तो इस सूत्र का उपयोग महान सर्कल दूरियों के लिए करें रेडियन में :

dist = acos[ sin(lat1)*sin(lat2)+cos(lat1)*cos(lat2)*cos(lng1-lng2) ]

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

MySQL कंप्यूटेशन इंजन द्वारा अक्षांश और देशांतर को रेडियन में माना जाता है, इसलिए यदि यह डिग्री में संग्रहीत है (और शायद यह है), तो आपको प्रत्येक मान को pi/180 से गुणा करना होगा, लगभग 0.01745:

$sf = 3.14159 / 180; // scaling factor
$sql = "SELECT * FROM table 
    WHERE lon BETWEEN '$minLon' AND '$maxLon' 
      AND lat BETWEEN '$minLat' AND '$maxLat'
    ORDER BY ACOS(SIN(lat*$sf)*SIN($lat*$sf) + COS(lat*$sf)*COS($lat*$sf)*COS((lon-$lon)*$sf))";

या यहां तक ​​कि:

$sf = 3.14159 / 180; // scaling factor
$er = 6350; // earth radius in miles, approximate
$mr = 100; // max radius
$sql = "SELECT * FROM table 
    WHERE $mr >= $er * ACOS(SIN(lat*$sf)*SIN($lat*$sf) + COS(lat*$sf)*COS($lat*$sf)*COS((lon-$lon)*$sf))
    ORDER BY ACOS(SIN(lat*$sf)*SIN($lat*$sf) + COS(lat*$sf)*COS($lat*$sf)*COS((lon-$lon)*$sf))";


  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. PHP Mysql PDO बाध्य चर की संख्या टोकन की संख्या से मेल नहीं खाती

  4. mysql कस्टम सॉर्ट

  5. एक कॉलम के MySql योग तत्व