मुझे अक्षांश और देशांतर को कितनी सही तरह से संग्रहित करना चाहिए?


103

मैं इस सवाल को यहाँ पढ़ रहा था:

SQL डेटाबेस में अक्षांश और देशांतर डेटा संग्रहीत करते समय क्या डेटाटाइप का उपयोग करना है?

और ऐसा लगता है कि आम सहमति यह है कि दशमलव (9,6) का उपयोग करना है। मेरे लिए सवाल यह है कि मुझे वास्तव में इसकी कितनी सही आवश्यकता है?

उदाहरण के लिए, Google का API एक परिणाम देता है:

"lat": 37.4219720,
"lng": -122.0841430

-122.0841430 में से मुझे कितने अंकों की आवश्यकता है? मैंने कई गाइड पढ़े हैं, लेकिन मैं यह समझ पाने के लिए उनमें से पर्याप्त अर्थ नहीं निकाल सकता।

मेरे प्रश्न में अधिक सटीक होने के लिए: यदि मैं सटीक स्थान के 50 फीट के भीतर सटीक होना चाहता हूं, तो मुझे कितने दशमलव अंक स्टोर करने की आवश्यकता है?

शायद एक बेहतर सवाल वास्तव में एक गैर-प्रोग्रामिंग सवाल होगा, लेकिन यह होगा: प्रत्येक दशमलव बिंदु आपको कितना अधिक सटीक देता है?

क्या यह सरल है?

  1. सामग्री सूचीबद्ध करें
  2. x00 = 6000 मील
  3. xx0 = 600 मील
  4. xxx = 60 मील
  5. xxx.x = 6 मील
  6. xxx.xx = .6 मील
  7. आदि?

7
निर्देशांक की सटीकता इस बात पर निर्भर करती है कि वे निर्देशांक कहाँ हैं, क्योंकि ग्रह की सतह एक सही गोला नहीं है और ध्रुवों से दूरी एक MAJOR MAJOR कारक भी है। 3 दशमलव स्थान, औसतन, लगभग 120 मीटर / 400 फीट है, हालांकि। 4 दशमलव 12 मीटर / 40 फ़ुट, आदि होगा ...
मार्क बी


जवाबों:


191

विषुवत रेखा पर दशमलव बनाम दशमलव स्थान

decimal  degrees    distance
places
-------------------------------  
0        1.0        111 km
1        0.1        11.1 km
2        0.01       1.11 km
3        0.001      111 m
4        0.0001     11.1 m
5        0.00001    1.11 m
6        0.000001   0.111 m
7        0.0000001  1.11 cm
8        0.00000001 1.11 mm

रेफरी: https://en.wikipedia.org/wiki/Decimal_degrees#Preaches


4
यदि ये भूमध्य रेखा पर हैं, तो इसका मतलब है कि ये सबसे खराब स्थिति हैं?
Liath

6
दरअसल, भूमध्य रेखा सबसे अच्छा मामला है। एक अक्षांश और एक देशांतर डिग्री भूमध्य रेखा (69 मील) पर समान आकार के होते हैं, लेकिन देशांतर का एक डिग्री शून्य तक सिकुड़ जाता है क्योंकि यह ध्रुवों में से किसी एक के पास पहुंच जाता है। यहाँ एक बहुत ही अच्छा व्याख्या दी गई है: nationalatlas.gov/articles/mapping/a_latlong.html#four
codingoutloud

11
@codingoutloud जो इन सबसे खराब स्थिति को गलत करेगा। या पांडित्यपूर्ण होने के लिए, समुद्र तल पर लेट / लोन का उपयोग करने के लिए ये सबसे खराब स्थिति हैं। 6,378 मीटर की ऊंचाई पर, त्रुटि 0.1% बढ़ जाती है।
स्कॉट बी

@ कोडिंगआउट: यह लिंक जाहिरा तौर पर अब मौजूद नहीं है :(
टॉम स्टैम्फॉ

1
@ टॉम स्टम्बॉग: इसके लिए web.archive.org है: web.archive.org/web/20070810120810/http://nationalatlas.gov/…-
स्टीफन स्टीगर

19
+----------------+-------------+
|    Decimals    |  Precision  |
+----------------+-------------+
|    5           |  1m         |
|    4           |  11m        |
|    3           |  111m       |
+----------------+-------------+

यदि आप 50ft (15m) परिशुद्धता 4 अंकों के लिए चाहते हैं। इसलिएdecimal(9,6)


9
यदि आप SQL सर्वर का उपयोग कर रहे हैं ... यह ध्यान देने योग्य है कि 1-9 की सटीकता 5 बाइट्स का उपयोग करती है। तो आप अच्छी तरह से दशमलव (7,4) के बजाय एक दशमलव (9,6) का उपयोग कर सकते हैं और उच्च सटीकता का लाभ उठा सकते हैं क्योंकि वे दोनों एक ही राशि के स्थान पर कब्जा कर लेते हैं।
थियो

अक्षांश के लिए, (8,6)(या (6,4)MySQL में बाइट बचाने के लिए) का उपयोग करें।
रिक जेम्स

15

मैं डेटाबेस डिजाइन करता हूं और कुछ समय से इस सवाल का अध्ययन कर रहा हूं। हम ओरेकल बैकएंड के साथ एक ऑफ-द-शेल्फ एप्लिकेशन का उपयोग करते हैं जहां डेटा फ़ील्ड को 17 दशमलव स्थानों की अनुमति देने के लिए परिभाषित किया गया था। हास्यास्पद! वह इंच के हजारवें हिस्से में है। दुनिया में कोई भी GPS उपकरण सटीक नहीं है। तो आइए 17 दशमलव स्थानों को अलग रखें और व्यावहारिक रूप से व्यवहार करें। सरकार गारंटी देती है कि उनका सिस्टम 95% आत्मविश्वास स्तर पर 7.8 मीटर की "सबसे खराब स्थिति" छद्म सटीकता की "अच्छा है" लेकिन फिर वास्तविक एफएए (उनके उच्च गुणवत्ता वाले उपकरणों का उपयोग करके) ने कहा कि आमतौर पर अच्छा होने के लिए जीपीएस रीडिंग दिखाया गया है एक मीटर के भीतर।

इसलिए आपको अपने आप से दो प्रश्न करने होंगे: 1) आपके मूल्यों का स्रोत क्या है? 2) डेटा का उपयोग किसके लिए किया जाएगा?

सेल फोन विशेष रूप से सटीक नहीं हैं, और Google / MapQuest रीडिंग शायद केवल 4 या 5 दशमलव तक अच्छे हैं। एक उच्च गुणवत्ता वाला जीपीएस उपकरण आपको 6 (संयुक्त राज्य के भीतर) मिल सकता है। लेकिन इससे अधिक कब्जा करना टाइपिंग और स्टोरेज स्पेस की बर्बादी है। इसके अलावा, यदि कोई खोज मूल्यों पर की जाती है, तो उपयोगकर्ता के लिए यह जानना अच्छा है कि 6 सबसे अधिक होगा / उसे तलाश करनी चाहिए (स्पष्ट रूप से दर्ज किया गया कोई भी खोज मूल्य पहले उसी सटीकता के साथ होना चाहिए, जितना डेटा मान खोजा जा रहा है )।

इसके अलावा, यदि आप सब करने जा रहे हैं, तो Google मानचित्र में कोई स्थान देखें या वहां पहुंचने के लिए उसे GPS में डालें, चार या पांच बहुत है।

मुझे उन सभी अंकों में प्रवेश करने के लिए आसपास के लोगों पर हंसना होगा। और वास्तव में वे माप कहां ले रहे हैं? सामने का दरवाजा घुंडी? सामने मेलबॉक्स? भवन का केंद्र? सेल टॉवर के ऊपर? और ... क्या हर कोई इसे एक ही जगह पर ले रहा है?

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


4
जबकि मैं मानता हूं कि 17 अंक बहुत अधिक हैं, मेरा सुझाव है कि यदि डेटा पोस्ट-प्रोसेस होने वाला है तो 6 बहुत कम है। त्रिज्या क्वेरी ("इस बिंदु के 0.5 मील के दायरे में उत्तर सुविधाओं") जैसी चीजें करते समय, त्रुटियां - ट्रंकेशन सहित - बढ़ाई जाती हैं। यदि आपको ऐसी क्वेरी के आउटपुट पर 6 दशमलव अंकों की आवश्यकता है, तो इनपुट को काफी अधिक से शुरू करना चाहिए। हमारी दुकान DECIMAL (18,15) का उपयोग करती है। हमारा लक्ष्य यह सुनिश्चित करना है कि स्थानिक गणना की सटीकता में db सीमित कारक नहीं है।
टॉम स्टैम्फॉ

6 दशमलव स्थानों से आगे जाना आज के जीपीएस उपग्रहों की उपलब्ध परिशुद्धता से परे है। पोस्ट प्रोसेसिंग में महत्वपूर्ण मात्रा में त्रुटि नहीं होगी। DECIMAL(18,15)9 बाइट लेता है।
रिक जेम्स

11

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

50 फीट 0.01524 किमी है, इसलिए:

  • 0.01524 / 110.574 = 1/725 अक्षांश का एक डिग्री
  • 0.01524 / 111.320 = 1/7304 देशांतर की डिग्री

आपको सटीकता के कुल सात अंकों के साथ, चार अंकों के पैमाने की आवश्यकता है, जो एक डिग्री के दस-हजारवें हिस्से तक जाने के लिए पर्याप्त है।

DECIMAL(7,4) अपनी आवश्यकताओं के लिए भरपूर होना चाहिए।


5

एक गोले और एक विकर्ण दूरी के विभिन्न भागों को ध्यान में रखते हुए, यहाँ उपलब्ध पूर्वजों की एक तालिका है:

   Datatype           Bytes       resolution
   ------------------ -----  --------------------------------
   Deg*100 (SMALLINT)     4  1570 m    1.0 mi  Cities
   DECIMAL(4,2)/(5,2)     5  1570 m    1.0 mi  Cities
   SMALLINT scaled        4   682 m    0.4 mi  Cities
   Deg*10000 (MEDIUMINT)  6    16 m     52 ft  Houses/Businesses
   DECIMAL(6,4)/(7,4)     7    16 m     52 ft  Houses/Businesses
   MEDIUMINT scaled       6   2.7 m    8.8 ft
   FLOAT                  8   1.7 m    5.6 ft
   DECIMAL(8,6)/(9,6)     9    16cm    1/2 ft  Friends in a mall
   Deg*10000000 (INT)     8    16mm    5/8 in  Marbles
   DOUBLE                16   3.5nm     ...    Fleas on a dog

- http://mysql.rjweb.org/doc.php/latlng#repretation_choices


3

फ्लोटिंग पॉइंट वैल्यू स्टोर न करें। जबकि आप मान सकते हैं कि वे सटीक हैं, वे नहीं हैं। वे एक सन्निकटन हैं। और यह पता चलता है कि विभिन्न भाषाओं में फ्लोटिंग पॉइंट जानकारी "पार्सिंग" के विभिन्न तरीके हैं। और अलग-अलग डेटाबेस में मूल्य अनुमानों को लागू करने के विभिन्न तरीके हैं।

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


FLOATऔर DOUBLE, इस संदर्भ में , आपके द्वारा वर्णित कुछ मुद्दों से ग्रस्त नहीं है।
रिक जेम्स

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

1
यदि एक FLOATमान और 'अगला' मान एक-दूसरे के मूल्य के इतने करीब हैं कि आप एक शहर (या वाहन या व्यक्ति या पिस्सू) को दूसरे से नहीं बता सकते हैं, तो गोलाई और प्रतिनिधित्व त्रुटियों से कोई फर्क नहीं पड़ता। इस बीच, '=' के साथ दो FLOATs( DOUBLEsया लगभग DECIMALs) की तुलना करना लगभग हमेशा मूर्खतापूर्ण होता है ।
रिक जेम्स

आपको वह बिंदु याद आ रहा है। यदि स्पष्ट रूप से नहीं, तो कोई भी क्वेरी समान रूप से समान रूप से उपयोग की जा रही है। और यह मानता है कि आप अन्य परतों और भाषाओं से नहीं गुजर रहे हैं, जो कि SQL सर्वर के अंदर सख्ती से रहते हैं। SQL सर्वर के लिए यहां आधिकारिक Microsoft प्रतिक्रिया है: blogs.msdn.microsoft.com/qingsongyao/2009/11/14/…
chaotic3quilibrium

मुझे खेद है, मुझे लगा कि प्रश्न [mysql]SQL सर्वर नहीं, बल्कि टैग किया गया था ।
रिक जेम्स

2

यदि आप Google मानचित्र पर स्थान क्लिक करते हैं, तो आपको 7 दशमलव स्थानों के साथ अक्षांश और देशांतर मिलते हैं

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