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

डेटाबेस में निर्देशांक तुलना

निकटता खोजों को संभालने का सबसे अच्छा तरीका किसी प्रकार के बाउंडिंग-आयताकार सन्निकटन से शुरू करना है, और फिर वहां से लोगों के बीच वास्तविक महान-वृत्त दूरी तक जाना है।

जब तक आपके अक्षांश ध्रुवों के बहुत पास नहीं हैं, दो बिंदुओं के बीच की दूरी के लिए एक टेढ़ा लेकिन व्यावहारिक अनुमान यह है (SQLish में):

GREATEST(ABS(lat1-lat2),ABS(long1-long2))

यदि आप अधिक सटीक होना चाहते हैं और आप जानते हैं कि आप केवल उन लोगों की परवाह करते हैं जो भीतर हैं, तो मान लें, 10 किमी एक दूसरे के लिए आप इस तरह एक बाउंडिंग आयत खोज का उपयोग कर सकते हैं।

WHERE latitude_from_table
    BETWEEN latpoint  - (10.0 / 111.045)
        AND latpoint  + (10.0 / 111.045)
  AND longitude_from_table
    BETWEEN longpoint - (10.0 / (111.045 * COS(RADIANS(latpoint))))
        AND longpoint + (10.0 / (111.045 * COS(RADIANS(latpoint))))

यह काम करता है क्योंकि एक डिग्री अक्षांश में 111.045 किमी हैं। देशांतर सीमा में कोसाइन शब्द इस तथ्य के लिए जिम्मेदार हैं कि जैसे ही आप ध्रुवों के पास आते हैं अक्षांश की रेखाएं एक साथ करीब होती हैं। इससे आप अपने अक्षांश_से_टेबल और देशांतर_से_टेबल कॉलम पर MySQL अनुक्रमणिका का उपयोग कर सकते हैं।

एक बार जब आपके पास बाउंडिंग-बॉक्स निकटता हो, तो आप एक महान सर्कल दूरी फॉर्मूला लागू कर सकते हैं। यहाँ उस पर पृष्ठभूमि है। http://www.plumislandmedia.net/mysql/haversine-mysql- निकटतम-स्थान/

आप जिस तरह के आवेदन पर विचार कर रहे हैं, उसके लिए 32-बिट आईईईई -488 फ्लोटिंग पॉइंट आपके निर्देशांक के लिए काफी सटीक है। यदि आप जिन बिंदुओं को देख रहे हैं, वे वास्तव में एक-दूसरे के करीब हैं (एक किमी या उससे भी कम) तो आप विन्सेन्टी सूत्र का उपयोग करना चाहते हैं (http://www.plumislandmedia.net/mysql/vicenty-great-circle-distance-formula/ ) अधिक सामान्य तथाकथित हैवरसाइन सूत्र के बजाय (http://www.plumislandmedia.net/mysql/stored-function-haversine-distance-computation/ )।

यदि आपके लोगों की संख्या 300K से अधिक हो जाती है, तो आप MySQL भू-स्थानिक अनुक्रमण योजना का उपयोग करने पर विचार कर सकते हैं। यह केवल MyISAM तालिकाओं के साथ काम करता है, लेकिन यह बहुत है बाउंडिंग-आयताकार खोज करने में तेज़। यहाँ देखें। http://www.plumislandmedia.net/mysql/haversine-mysql- निकटतम-स्थान/



  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. सोलर डेटाइम्पोर्टहैंडलर कॉन्फ़िगरेशन

  3. डीबी रिकॉर्ड संपत्ति के लिए पूर्णांक बनाम चार

  4. डॉकर रिटर्न में MySQL सर्वर ने क्लाइंट के लिए अज्ञात प्रमाणीकरण विधि का अनुरोध किया

  5. PHP/MySQL:एडजेंसी लिस्ट मॉडल में सिंगल पाथ को पुनः प्राप्त करें