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

एक ज़िप कोड की निर्दिष्ट दूरी के भीतर सभी ज़िप कोड खोजें

यहां कुछ ऐसा है जो मैंने कुछ समय पहले लिखा था जो आपको सही दिशा में शुरू कर सकता है।

जब आपने VB.Net के लिए कहा था, तो आपको वास्तव में एक ऐसी क्वेरी की आवश्यकता है जो "ग्रेट सर्कल दूरी "अक्षांश और देशांतर द्वारा पहचाने गए दो बिंदुओं के बीच की दूरी निर्धारित करने के लिए गणना।

तो, निम्नलिखित धारणाएँ बनाते हुए:

  1. आपका ज़िप कोड डेटा एक ही तालिका में है।
  2. कहा गया तालिका में lat और lon के लिए विशेषताएँ हैं जो ज़िप कोड के अनुमानित केन्द्रक हैं

आप LINQ से SQL क्वेरी का उपयोग कर सकते हैं जो कुछ इस तरह का उपयोग करके वांछित परिणाम सेट करता है

Const EARTH_RADIUS As Single = 3956.0883313286095
Dim radCvtFactor As Single = Math.PI / 180
Dim zipCodeRadius As Integer = <Your Radius Value>

Dim zipQry = From zc In db.ZipCodes 
             Where zc.Zip = "<Your Zip Code>" _
             Select zc.Latitude, 
                    zc.Longitude, 
                    ZipLatRads = RadCvtFactor * zc.Latitude, 
                    ZipLonRads = RadCvtFactor * zc.Longitude
Dim zipRslt = zipQry.SingleOrDefault()
If zipRslt IsNot Nothing Then
    Dim zcQry = From zc In db.ZipCodes _
                Where zc.Latitude >= (zipRslt.Latitude - 0.5) And zc.Latitude <= (zipRslt.Latitude + 0.5) _
                And zc.Longitude >= (zipRslt.Longitude - 0.5) And (zc.Longitude <= zipRslt.Longitude + 0.5) _
                And Math.Abs(EARTH_RADIUS * (2 * Math.Atan2(Math.Sqrt(Math.Pow(Math.Sin(((RadCvtFactor * zc.Latitude) - zipRslt.ZipLatRads) / 2), 2) + _
                Math.Cos(zipRslt.ZipLatRads) * Math.Cos(RadCvtFactor * zc.Latitude) * _
                Math.Pow(Math.Sin(((RadCvtFactor * zc.Longitude) - zipRslt.ZipLonRads) / 2), 2)), _
                Math.Sqrt(1 - Math.Pow(Math.Sin(((RadCvtFactor * zc.Latitude) - zipRslt.ZipLatRads) / 2), 2) + _
                Math.Cos(zipRslt.ZipLatRads) * Math.Cos(RadCvtFactor * zc.Latitude) * _
                Math.Pow(Math.Sin((RadCvtFactor * zc.Longitude) / 2), 2))))) <= zipCodeRadius _
                Select zc
End If

यह जटिल लगता है, क्योंकि यह है। यहां SO पर कहीं अधिक चतुर लोग हैं जो एल्गोरिथम की व्याख्या कर सकते हैं। मैंने इसे केवल इंटरनेट पर मिले कुछ SQL कोड से लागू किया - मुझे याद नहीं है कि मैं कहाँ से हूँ। एक Google खोज आपको वहां पहुंचा देगी।

पहली क्वेरी (zipQry) डिग्री और रेडियन दोनों में शुरुआती ज़िप कोड का अक्षांश और देशांतर लौटाती है। फिर इन परिणामों का उपयोग दूसरी क्वेरी को निष्पादित करने के लिए किया जाता है।

दूसरी क्वेरी में WHERE क्लॉज का पहला भाग:

Where zc.Latitude >= (zipRslt.Latitude - 0.5) And zc.Latitude <= (zipRslt.Latitude + 0.5) _
And zc.Longitude >= (zipRslt.Longitude - 0.5) And (zc.Longitude <= zipRslt.Longitude + 0.5) _

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

यह शायद अधिक दक्षता के लिए एक प्रश्न में किया जा सकता था, लेकिन मुझे उस समय इस तरह से इसकी आवश्यकता थी, जो अब मेरे लिए खो गए हैं।



  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. क्या पाइथन के सेट प्रकार के बराबर एक MySQL है?

  4. PERIOD_ADD () उदाहरण – MySQL

  5. एकाधिक स्तंभों के साथ एकल निश्चित तालिका बनाम लचीली सार सारणी