एक औसत अक्षांश और देशांतर निर्देशांक की गणना करना


19

मैं कई अक्षांशों और देशांतर स्थानों के बीच औसत की गणना कैसे कर सकता हूं?

क्या मुझे केवल लेट और लैंग दोनों के लिए अंकगणित माध्य की गणना करनी चाहिए?


3
मुझे लगता है कि आपके उपयोग के मामले में औसत की उपयुक्तता निर्भर करती है। यदि आप वेब मानचित्र के लिए बस शहर के रेस्तरां स्थानों को बंद कर रहे हैं, तो सुनिश्चित करें कि औसत समय सबसे अधिक काम करेगा। हालाँकि आपको कुछ स्थानों पर कीड़े मिल जाएंगे .. एक प्रोटोटाइप या कम बजट ऐप के लिए शायद यह ठीक है। हालांकि, यदि आप कुछ अधिक गंभीर कर रहे हैं या एक विस्तृत क्षेत्र को कवर कर रहे हैं, तो आपको संभवतः प्रक्षेपण की बारीकियों को ध्यान में रखना होगा।
ग्लेन

1
इन बिंदुओं को कैसे एकत्र किया गया? निर्देशांक को औसत करने का तरीका पूछने के बजाय, शायद पूछें कि क्या औसत माप त्रुटियों के लिए क्षतिपूर्ति करने का एक उपयुक्त तरीका है। इस ईबुक में बहुत सारी त्रुटि परिभाषाएँ हैं।
किर्क कुएकेन्डल

बस ध्यान दें कि कुछ किनारे मामले हैं जहां एक 'औसत बिंदु' अच्छी तरह से परिभाषित नहीं है: उदाहरण के लिए भूमध्य रेखा के साथ कहीं भी एन और एस डंडे के "औसत" हो सकते हैं।
दान एस।

जवाबों:


15

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

इस प्रकार की चीज़ के लिए मैंने जिस विधि का उपयोग किया है, वह देशांतर / अक्षांश निर्देशांक को 3 डी कार्टेशियन निर्देशांक (x, y, z) में परिवर्तित करना है। औसत ये (एक कार्टेशियन वेक्टर देने के लिए), और फिर वापस फिर से परिवर्तित करें। ध्यान दें कि आपको शायद वेक्टर को सामान्य करने की आवश्यकता नहीं है, इसलिए वास्तविक औसत प्रक्रिया एक साधारण योग हो सकती है।


संपादित करें, यहाँ मेरा कोड है:

निम्नलिखित धर्मान्तरित कार्टेशियन अक्षांश / देशांतर (डिग्री में) का निर्देशांक करता है: RAD2DEGरेडियन के लिए स्थिरांक हटा दें ।

Latitude = MPUtility.RAD2DEG * Math.Atan2(z, Math.Sqrt(x * x + y * y));
Longitude = MPUtility.RAD2DEG * Math.Atan2(-y, x);

और यहां हम अक्षांश / देशांतर (रेडियन में निर्दिष्ट) से कार्टेशियन निर्देशांक की गणना करते हैं:

private void CalcCartesianCoord()
{
    _x = Math.Sin(LatitudeRadians) * Math.Cos(LongitudeRadians);
    _y = Math.Sin(LatitudeRadians) * Math.Sin(LongitudeRadians);
    _z = Math.Cos(LatitudeRadians); 
}

दोनों को वास्तविक कोड से काटा और चिपकाया जाता है, इसलिए डिग्री और रेडियन का मिश्रण। यहां ऐसे गुण हैं जो कुछ रूपांतरण करते हैं (जैसे LatitudeRadiansएक संपत्ति जो एक रेडियन मान लौटाता है)।

ध्यान दें कि अनुकूलन संभव है: उदाहरण के लिए डुप्लिकेट साइन गणना। यदि आप उन्हें बहुत बुलाते हैं तो भी ट्रिगर की गणना संभव नहीं हो सकती है।


1
महान बिंदु। मैं विश्वास नहीं कर सकता कि मैं यह बताना भूल गया कि .. पोल के पास औसत और डेट लाइन ने मुझे पहले काट लिया है।
ग्लेन

3
(+1) समस्या केवल खंभे और + -180 डिग्री मेरिडियन तक सीमित नहीं है: जब अंकों के अक्षांश को औसत रूप से भिन्न किया जाता है, तो प्लेट / लॉन निर्देशांक का एक सीधा औसत प्लेट कैर्री प्रक्षेपण का उपयोग करने के लिए टैंटनमाउंट होता है, जो अक्षांश के साथ एक चर मीट्रिक विकृति बढ़ रही है। कोई संख्यात्मक समस्याएं नहीं हैं, लेकिन औसत बस गलत स्थान पर है। इस कारण से @ ग्लेन के उत्तर में सुझाए गए लाट / लोन की गणना अपेक्षाकृत छोटे गैर-ध्रुवीय क्षेत्रों को छोड़कर शायद ही स्वीकार्य हो।
whuber

@winwaed धन्यवाद, क्या आप ऐसा करने के लिए कुछ (जावा) कोड स्निपेट या अच्छा ट्यूटोरियल सुझा सकते हैं?
aeuryzm

1
गणित 'कार्टेशियन निर्देशांक' के तहत en.wikipedia.org/wiki/Spherical_coordinates पर है । (मेरा कार्यान्वयन C # है और आंशिक रूप से अनुकूलित है - साथ ही मैं दंत चिकित्सकों पर यह लिख रहा हूं !!)
winwaed

1
मुझे लगता है कि सटीक इंजीनियरिंग उपयोग मामलों के लिए आप बहुत सही हैं। हालाँकि, जब तक कि अत्यधिक सटीकता की आवश्यकता नहीं होती, WGS84 लैट के औसत, शहर और यहां तक ​​कि क्षेत्रीय क्षेत्रों में भी निर्देशांक बहुत अच्छी तरह से काम करता है और ऐसे परिणाम देता है जो ज्यादातर उपयोगों के लिए स्वीकार्य हैं जहां औसत का उपयोग किया जाएगा।
ग्लेन

3

क्लस्टरिंग विकल्प : मुझे लगता है कि इस प्रकार के ऑपरेशन को कवर करने वाला वैचारिक चर्चा शब्द "क्लस्टरिंग" है। Averaging को लागू करने के लिए सबसे सरल है और अधिकांश उद्देश्यों के लिए अच्छी तरह से काम करता है। केवल एक बार मैं कुछ और उपयोग करूंगा यदि आप आउटलेर्स [संपादित करें] -> या डंडे या अंतर्राष्ट्रीय डेटलाइन के बारे में चिंतित हैं। [संपादित करें] -> औसत भी, जबकि यह आपको कुछ ऐसा देगा जो क्लस्टर के केंद्र के करीब दिखता है, प्रोजेक्शन की अशुद्धियों के कारण थोड़ा हटकर होगा, इस तथ्य के कारण कि डिग्री लैंग लैंग हमेशा एक ही दूरी पर नहीं होते हैं इसके अलावा किमी / मील में। जितना बड़ा क्षेत्र आप उतने ही अधिक विकृति पर औसत करेंगे।

यहाँ कुछ क्लस्टरिंग विकल्पों की तुलना है

औसत (आसान, सबसे तेज़, गलत): बस अक्षांशीय मानों को गिनें और गणना द्वारा विभाजित करें और lng मानों के लिए समान करें। अतिप्रवाह के लिए बाहर देखना सुनिश्चित करें यदि आप एक Int32 का उपयोग कर रहे हैं कुछ सिस्टम (विशेष रूप से c #) चुपचाप कम संख्या में वापस बह जाएगा। आप अपने योग संचायक के लिए फ्लोटिंग पॉइंट प्रिसिजन का उपयोग करके इन इरोज़ से बच सकते हैं। इस पद्धति के साथ एक समस्या यह है कि आउटलेयर आपके स्थान को तिरछा कर सकता है। [संपादित करें] -> एक और ध्रुव के पास गणित है और अंतर्राष्ट्रीय तिथि रेखा अच्छी तरह से औसत नहीं है और स्थानों को बुरी तरह से तिरछा कर देगी।

निकटतम पड़ोसी (थोड़ा सख्त, धीमा, बाहर का पक्षपाती नहीं) बल्कि औसत से आप अपने सभी पड़ोसियों के लिए सबसे छोटी औसत दूरी के साथ वास्तविक अक्षांश स्थान के साथ जा सकते हैं। यह एक "माध्यिका" लेने जैसा है। नीचे का पक्ष यह है कि यह कम्प्यूटेशनल रूप से महंगा है क्योंकि आप हर बिंदु की तुलना हर दूसरे बिंदु से करते हैं और उनके बीच की दूरी की गणना करते हैं। उदाहरण के लिए, 10,000 अंकों के क्लस्टरिंग के लिए 100 मिलियन दूरी की गणना की आवश्यकता होगी .. जो कि धीमी नहीं है, लेकिन यह निश्चित रूप से अच्छी तरह से पैमाने पर नहीं है।

ग्रिड सेल (थोड़ा अतिरिक्त सेटअप की जरूरत है, बहुत तेज, बाहरी पक्षपाती नहीं) यह निकटतम पड़ोसी के समान है लेकिन बहुत तेज है। आप .01 डिसे लेट लैंग (जो कि आबादी वाले लेटिट्यूड पर लगभग 1 किमी है) और अपने पॉइंट्स को .01 x .01 डिग्री बकेट में ग्रुप कर सकते हैं। फिर आप इसमें सबसे अधिक अंक के साथ बाल्टी चुन सकते हैं और या तो उन बिंदुओं का औसत ले सकते हैं या उन बिंदुओं पर निकटतम पड़ोसी विश्लेषण चला सकते हैं। मैं वास्तव में बड़े डेटासेट्स (सैकड़ों अरबों रिकॉर्ड) के साथ इस पद्धति का उपयोग करता हूं और इसे सटीक और गति के बीच एक अच्छा संतुलन पाता हूं।

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


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

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

0

निश्चित नहीं है कि आप क्या हासिल करना चाह रहे हैं, लेकिन वह बिंदु जिसका अक्षांश मूल बिंदु सेट और देशांतर के अक्षांश का मूल बिंदु सेट के देशांतरों का औसत है, मूल बिंदु सेट का औसत बिंदु होगा। [अद्यतन]: उपरोक्त में, औसत अंकगणितीय माध्य है।


आपके उत्तर में, avg = अंकगणित का मतलब है?
aeuryzm

1
हाँ सही। मुझे स्पष्टता की कमी के लिए खेद है। मैंने जवाब अपडेट किया। लेकिन मुझे यकीन नहीं है कि मैं यहाँ टेबल के लिए बहुत उपयोगी हूँ ...
GuillaumeC
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.