PHP

2009-01-02 14 views
23

में ज़िप कोड के बीच दूरी की गणना करना मैंने This page से ज़िप कोड और उनके लैंगिट्यूड्स/अक्षांश आदि का डेटाबेस लिया। यह निम्नलिखित क्षेत्रों मिल गया है:PHP

ज़िप, अक्षांश, देशांतर, शहर, राज्य, काउंटी, ZIP_CLASS

डेटा एक पाठ फ़ाइल में था, लेकिन मैं इसे एक MySQL तालिका में सम्मिलित। मेरा सवाल यह है कि, मैं ऊपर दिए गए फ़ील्ड का उपयोग कैसे कर सकता हूं ताकि दो ज़िप कोड के बीच की दूरी की गणना की जा सके जो उपयोगकर्ता वेबसाइट पर प्रवेश कर सकता है? पीएचपी में कार्य करना कोड

+5

"दूरी" क्या है? क्या आप "कौवा मक्खियों के रूप में दूरी"/महान-सर्कल दूरी चाहते हैं? सड़क दूरी? अंतरिक्ष में दो बिंदुओं के बीच वास्तविक 3 डी दूरी? – ShreevatsaR

+3

@ श्रीवत्स: चूंकि वह लेट/लांग का उपयोग करके गणना की मांग कर रहा है, इसलिए यह मानना ​​सुरक्षित है कि आपको सड़क की दूरी नहीं मिल रही है। अंतरिक्ष में दो बिंदुओं के बीच वास्तविक दूरी (जैसे पृथ्वी के शरीर के माध्यम से) शायद भी उपयोगी नहीं है। इसलिए, "कौवा मक्खियों के रूप में"/महान सर्कल सबसे अधिक संभावना है। –

उत्तर

6

तुम भी दूरी calc के लिए वेब सेवा से टकराने की कोशिश कर सकते हैं। किसी और को भारी उठाने दें।

https://www.zipcodeapi.com/API#distance

+3

जो 2 ज़िपकोड के लिए काम करेगा, लेकिन डेटाबेस में हजारों रिकॉर्ड्स से दिए गए ज़िप कोड में शीर्ष 100 निकटतम स्थानों का चयन करने की कोशिश कर रहा है :) – aryaxt

+0

लिंक मर चुका है –

+0

काम कर रहे विभिन्न सेवा के लिए अद्यतन लिंक – brendan

7

यह सिर्फ गणित के साथ किया जा सकता है की सराहना की होगी ...

function calc_distance($point1, $point2) 
{ 
    $distance = (3958 * 3.1415926 * sqrt(
      ($point1['lat'] - $point2['lat']) 
      * ($point1['lat'] - $point2['lat']) 
      + cos($point1['lat']/57.29578) 
      * cos($point2['lat']/57.29578) 
      * ($point1['long'] - $point2['long']) 
      * ($point1['long'] - $point2['long']) 
     )/180); 

    return $distance; 
} 
+3

क्या आप इस संदर्भ को कहां से लेते हैं इसका संदर्भ दे सकते हैं? –

+2

बहुत सारे जादू संख्याएं, और दाईं ओर बहुत अधिक इंडेंटेशन! –

+0

यह किस इकाई में दूरी लौट रहा है? एक ज़िप कोड के लिए जो 10 मील देना चाहिए, उसने 7892.xx (लगभग) जैसे कुछ दिया। इसे मील में कैसे परिवर्तित किया जा सकता है? –

6

चेक बाहर दो अंक के बीच महान चक्र दूरी की गणना के लिए Haversine formula

  • आर = पृथ्वी की त्रिज्या (मतलब त्रिज्या = 6,371km)
  • Δlat = lat2- lat1
  • Δlong = long2- long1
  • : कुछ और नमूने here

    Haversine सूत्र पाया जा सकता है एक = sin² (Δlat/2) + cos (lat1) .cos (lat2) .sin² (Δlong/2)

  • c = 2.atan2 (√a, √ (1-ए))
  • d = Rc

(ध्यान दें कि त्रिगुट कार्यों को पार करने के लिए कोणों को रेडियंस में होना आवश्यक है)।

24

यह जादू संख्या के लिए कुछ एनोटेशन के साथ माइक का जवाब है। यह some test data के लिए मेरे लिए ठीक काम करने के लिए लग रहा था:

function calc_distance($point1, $point2) 
{ 
    $radius  = 3958;  // Earth's radius (miles) 
    $deg_per_rad = 57.29578; // Number of degrees/radian (for conversion) 

    $distance = ($radius * pi() * sqrt(
       ($point1['lat'] - $point2['lat']) 
       * ($point1['lat'] - $point2['lat']) 
       + cos($point1['lat']/$deg_per_rad) // Convert these to 
       * cos($point2['lat']/$deg_per_rad) // radians for cos() 
       * ($point1['long'] - $point2['long']) 
       * ($point1['long'] - $point2['long']) 
     )/180); 

    return $distance; // Returned using the units used for $radius. 
} 
1

अपने ज़िप तालिका में आप दो अंक जिसके लिए आप दूरी प्राप्त करना चाहते हैं के लिए निर्देशांक (अक्षांश, लंबे) हड़पने के लिए की जरूरत है।

आप या तो SQL या PHP के साथ दूरी की गणना कर सकते हैं। दोनों ही तरीकों से इस पोस्ट में दिए गए हैं:

http://dev.strategystar.net/2011/10/mysql-php-get-distance-between-two-coordinates-in-miles-kilometers/

उदाहरण में गणना सूत्र पहले से ही इस धागे में चर्चा पर आधारित है। यह पृथ्वी के लिए त्रिज्या दोनों मील और किलोमीटर दोनों में प्रदान करता है ताकि यह आपको दोनों इकाइयों में दो बिंदुओं के बीच दूरी प्राप्त करने की अनुमति देगा।

उपरोक्त लिंक बहुत अच्छा है क्योंकि गणना के लिए विधि में किसी भी जादू संख्या, पृथ्वी की त्रिज्या शामिल नहीं है!

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