2009-08-07 16 views
6

मुझे इस लोकप्रिय PHP/MySQL स्क्रिप्ट को सनीसोफ्ट द्वारा ज़िप स्थान कहा जाता है और यह एक चीज़ के अलावा बहुत अच्छा काम करता है: यह कुछ मामलों में नहीं है।एक विशिष्ट त्रिज्या में ज़िप कोड ढूँढना

ऐसा लगता है कि 20 मील के नीचे कोई त्रिज्या 20 मील की दूरी पर ज़िप कोड की समान राशि देता है। मैंने पूरे Google पर खोज की है, लेकिन इसका कोई फायदा नहीं हुआ और मैं सोच रहा था कि किसी को इस स्थिति पर कुछ अंतर्दृष्टि है या नहीं।

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

धन्यवाद !!

संपादित करें: स्क्रिप्ट प्रदान करने वाले दूरी समारोह का उपयोग करने से मुझे पता चला है कि ज़िप कोड के बीच की दूरी जो प्रोग्राम मुझे देता है और मेरा ज़िप कोड 0 मील के रूप में आ रहा है।

प्रमुख अद्यतन

अनुसंधान से यह पता चला है कि डेटाबेस अक्षांश/देशांतर मूल्यों नकल की है। ज़िप लोकेटर का उपयोग करते समय कृपया इसके बारे में जागरूक रहें। हालांकि PHP अपना काम करता है, आपको ज़िप कोड का एक नया डेटाबेस ढूंढना होगा। मैं अपने निष्कर्ष बाद की तारीख में पोस्ट करूंगा।

उत्तर

1

दूसरा प्रयास करें!

अपनी संपादित समस्या कथन देखकर, मैं देखता हूं कि आप अपने ज़िप मान कैसे असाइन करते हैं।

यदि आपके ज़िप कोड स्ट्रिंग के बजाय पूर्णांक हैं तो बहुत सारी त्रुटियां पेश की जा सकती हैं। सबसे बड़ी समस्या यह है कि अमेरिकी ज़िप कोड 0 से शुरू हो सकते हैं

ziptest.php में उदाहरण अच्छे नहीं हैं, क्योंकि उपचार ज़िप पूर्णांक के रूप में हैं। जब आप एक पूर्णांक के साथ अपने ही जिप कोड का वर्णन करने के लिए प्रयास करें:

$zip1 = 02446; 

इसके ऑक्टल मान 2446. phpZipLocator का उपयोग करता है कि किसी भी स्पष्ट रूपांतरण के बिना एक स्ट्रिंग के रूप में मान के रूप में PHP द्वारा व्याख्या की। इसलिए PHP इसे स्ट्रिंग (1318) के रूप में ऑक्टल 2446 का दशमलव मान देता है जो कि ज़िप कोड नहीं है।

इसके बजाय यह सूचित करते हैं कि यह एक ज़िप कोड नहीं मिला की

, phpZipLocator कुछ की दी गई के दायरे में सभी पिन कोड की जो मौजूद नहीं है, जो यह तय करता है की परिधि खोज होना चाहिए 1.

तो करता है मैंने एक स्ट्रिंग

$zip1 = '02446'; 

का उपयोग करके ज़िप कोड सेट किया है, मुझे सही परिणाम मिल रहा है।

आईएमएचओ ऐसा लगता है जैसे phpZipLocator थोड़ा काम कर सकता है।

+0

आपको बहुत धन्यवाद। आपके लिए +1 लेकिन दुर्भाग्यवश यह समस्या हल नहीं करता है। मैं जिस ज़िप कोड का उपयोग कर रहा हूं वह 11950 है, और त्रिज्या मैं 5 पर सेट करता हूं, यह 73 ज़िप कोड के साथ आता है। मैं वर्तमान में एक पोस्ट चर के माध्यम से ज़िप कोड चर भेज रहा हूँ। लेकिन मैंने वैरिएबल को $ zip1 = '11950' में बदल दिया; और मुझे अभी भी एक ही परिणाम मिल गया है। –

+0

मुझे लगता है कि यह आपके ज़िप कोड, यहां दिलचस्प सामग्री के साथ कैसे काम कर रहा है। –

+0

और भी दिलचस्प, 73 ज़िप कोड में से कुछ लगभग 20 मील दूर हैं। –

10

निम्नलिखित अनुमानित दूरी की गणना अपेक्षाकृत सरल है, लेकिन 10% की दूरी त्रुटियों का उत्पादन कर सकती है। ये अनुमान गणना डिग्री में अक्षांश और देशांतर मानों का उपयोग करके की जाती हैं।

Approximate distance in miles = sqrt(x * x + y * y) 

where 
     x = 69.1 * (lat2 - lat1) 
and 
     y = 69.1 * (lon2 - lon1) * cos(lat1/57.3) 

आप अधिक सटीकता की जरूरत है, तो आप का उपयोग करना चाहिए:

Approximate distance in miles = sqrt(x * x + y * y) 

where 
     x = 69.1 * (lat2 - lat1) 
and 
     y = 53 * (lon2 - lon1) 

आप कोज्या गणित समारोह जोड़ने द्वारा इस अनुमानित दूरी गणना की सटीकता में सुधार कर सकते हैं: पहली सन्निकटन केवल सरल गणित कार्यों की आवश्यकता है सटीक दूरी की गणना। सटीक दूरी गणना के लिए गोलाकार ज्यामिति का उपयोग करने की आवश्यकता है, क्योंकि पृथ्वी एक क्षेत्र है। सटीक दूरी की गणना के लिए फ्लोटिंग पॉइंट गणितीय सटीकता के उच्च स्तर की आवश्यकता होती है - सटीकता के लगभग 15 अंक (कभी-कभी "डबल-परिशुद्धता" कहा जाता है)। इसके अलावा, सटीक गणना में उपयोग किए गए ट्रिग गणित फ़ंक्शन अक्षांश और डिग्री से रेडियंस तक देशांतर मानों के रूपांतरण की आवश्यकता होती है। डिग्री से रेडियंस तक अक्षांश या देशांतर को परिवर्तित करने के लिए, इस डेटाबेस में 180/पीआई, या 57.2958 द्वारा अक्षांश और देशांतर मान विभाजित करें। पृथ्वी का त्रिज्या पर 6,371 किलोमीटर, या 3,958.75 मील की दूरी पर माना जाता है।

आपको गणना में डिग्री-से-रेडियंस रूपांतरण शामिल करना होगा। रेडियंस के लिए डिग्री स्थानापन्न, गणना है:

  Exact distance in miles = 3958.75 * arccos[sin(lat1/57.2958) * 
           sin(lat2/57.2958) + 
           cos(lat1/57.2958) * 
           cos(lat2/57.2958) * 
           cos(lon2/57.2958 - lon1/57.2958)] 
0

phpZipLocator के लिए प्रदर्शन लिपि में त्रिज्या के लिए डिफ़ॉल्ट मान (ziptest।php) को उसके डिफ़ॉल्ट त्रिज्या के रूप में 20 मील की दूरी

$radius = 20; 
$zipArray = $zipLoc->inradius($zipOne,$radius); 

मेरा अनुमान का उपयोग करता होगा कि $radius के लिए है कि मूल्य अपने कोड में अब भी है और त्रिज्या आप उपयोग करना चाहते अधिलेखन है। $radius के लिए खोज-और-प्रतिस्थापन करने का प्रयास करें।

अभी तक बेहतर है, डीबगर के साथ अपना कोड देखें और देखें कि $radiusinradius() पर कॉल करते समय 20 पर सेट है।

+0

मैंने उस मूल्य को सीधे पहली बार बदल दिया। यद्यपि आपकी मदद के लिए धन्यवाद। –

+0

Ive दूरी समारोह का उपयोग किया, और मेरे आश्चर्य के लिए, ज़िप कोड जो मेरे ज़िप कोड से 0 मील दूर हैं। –

संबंधित मुद्दे