अक्षांश / देशांतर के बीच की दूरी


10

मैं दो अक्षांश / देशांतर बिंदुओं के बीच की दूरी की गणना करने का प्रयास कर रहा हूँ। मेरे पास कोड का एक टुकड़ा है जो ज्यादातर काम करता है जो मैं इस पद से मिला था लेकिन मुझे वास्तव में समझ नहीं आया कि यह कैसे काम करता है।

यहाँ कोड है:

<?php
// POINT 1
$thisLat = deg2rad(44.638);
$thisLong = deg2rad(-63.587);

// POINT 2
$otherLat = deg2rad(44.644);
$otherLong = deg2rad(-63.911);

$MeanRadius = 6378 - 21 * sin($lat1);

$xa = (Cos($thisLat)) * (Cos($thisLong));
$ya = (Cos($thisLat)) * (Sin($thisLong));
$za = (Sin($thisLat));

$xb = (Cos($otherLat)) * (Cos($otherLong));
$yb = (Cos($otherLat)) * (Sin($otherLong));
$zb = (Sin($otherLat));

$distance = $MeanRadius * Acos($xa * $xb + $ya * $yb + $za * $zb);

echo $distance;
?>

मेरे कुछ सवाल हैं:

  1. xa, ya, za क्या हैं? मैं समझता हूं कि वे एक 3 डी कार्टेसियन प्लेन के पॉइंट हैं, लेकिन वे किसके सापेक्ष हैं? पृथ्वी का केंद्र?
  2. यह cos($xa * $xb + $ya * $yb + $za * $zb)अंकों के बीच की दूरी की गणना कैसे करता है ? मुझे पता है कि 2 डी में मैं यह करूंगा:

वैकल्पिक शब्द

Pythagorean Theorem 
distance^2 = b^2 + a^2
distance = sqr((y2-y1)^2 + (x2 - x1)^2)
  1. यह कितना सही होगा? उस बारे में दूसरे पृष्ठ पर कुछ चर्चा हुई। लेकिन मैं विशेष रूप से यह बताने के लिए दूरी का उपयोग करना चाहता हूं कि उपयोगकर्ता 10 मीटर, 20 मीटर या 50 मीटर की दूरी पर हैं। क्या मैं इसे अच्छी सटीकता के साथ कर पाऊंगा?
  2. मुझे इसके लिए क्या उपयोग करना चाहिए $MeanRadius? क्या यह एक उचित मूल्य है? मुझे लगता है कि यह मान लेता है कि पृथ्वी एक बीजाणु है।

जवाबों:


17

सामान्य प्रयोजन के उपयोग के लिए यह भयानक कोड है क्योंकि यह गलत परिणाम दे सकता है या छोटी दूरी के लिए पूरी तरह से विफल हो सकता है। इसके बजाय हैवेरसिन फॉर्मूला का प्रयोग करें ।

(वह सूत्र जिस पर आपका कोड आधारित है , इकाई पर उनके 3D कार्टेशियन निर्देशांक (xa, ya, za) और (xb, yb, zb) में गोले (एक दीर्घवृत्त नहीं) पर दो बिंदुओं को परिवर्तित करता है।गोले और उनके डॉट उत्पाद बनाते हैं, जो उनके बीच के कोण के कोसाइन के बराबर होगा। ACos फ़ंक्शन उस कोण को वापस करता है, जिसे जब पृथ्वी की त्रिज्या द्वारा स्केल किया जाता है, तो दूरी का अनुमान लगाएगा। समस्या यह है कि एक छोटे कोण के कोसाइन, रेडियंस में आकार 'ई' का कहना है, 1 से लेकर ई ^ 2/2 के करीब राशि से भिन्न होता है। यह फ़्लोटिंग पॉइंट एरर क्लाउड में गायब हो जाता है जब e, फ़्लोटिंग पॉइंट प्रिसिजन के दो बार वर्गमूल से छोटा होता है। यदि आप एकल परिशुद्धता में गणना कर रहे हैं, तो इसका मतलब है कि ई का मान 0.001 से कम है - लगभग एक किलोमीटर - शून्य से भ्रमित हो जाएगा! दोहरी सटीकता में कटऑफ ई = 10 ^ -8 के आसपास होती है, लेकिन तब तक ई = 10 ^ -4 या (लगभग 10 मीटर) आप संभावित रूप से इतनी सटीकता खो सकते हैं कि आपको चिंता करने की आवश्यकता है,, में निर्मित कुछ उच्च-सटीक आंतरिक संगणनाएं हैं)।


7

इस साइट को देखें , http://www.movable-type.co.uk/scripts/latlong.html

यदि आप इसे लागू करते हैं और आपको गलत उत्तर मिलते हैं, तो संभवतः आपके पास गलत इकाइयाँ हैं। मुझे लगता है कि उस साइट के लिए अधिकांश ऑपरेशन दशमलव डिग्री के बजाय रेडियन में किए जाते हैं।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.