दिलचस्प पोस्ट
त्वरित समय अंतराल के लिए डेटा संरचना देखें स्विंग में मैं छवि को कैसे फीका कर सकता हूं? रेल 4 नेस्टेड विशेषताएँ Unpermitted पैरामीटर पथ से फ़ाइल नाम निकालने के लिए कैसे? अगर कोई सरणी में एक निश्चित मान है, तो मैं कैसे परीक्षण कर सकता हूं? एसटीएल एल्गोरिदम: कंटेनरों के लिए कोई अतिरिक्त इंटरफेस क्यों नहीं है (इटरेटर जोड़े से अतिरिक्त)? निर्धारित हैडर के लिए समायोजित करने के लिए एक HTML एंकर को ऑफसेट करना Jstl में foreach लूप से सूचक मूल्य कैसे प्राप्त करें yii2 थीम एकीकरण फ्रेगमेंट में एंड्रॉइड साझा किए गए संदर्भ एंड्रॉइड स्टूडियो से एमुलेटर पर स्क्रीनशॉट लेना मैं पायथन समारोह के तर्कों की संख्या कैसे पा सकता हूं? एनिमेटेड जीआईएफ़ प्रदर्शित करें कैसे jquery में एक href (अद्यतन) को अद्यतन करें? मैं स्वागत पृष्ठ को स्ट्रट्स एक्शन के लिए कैसे सेट कर सकता हूं?

MySQL डाटाबेस में अक्षांश / रेखांति को संचित करते समय उपयोग करने के लिए आदर्श डेटा प्रकार क्या है?

ध्यान में रखते हुए कि मैं अक्षांश / लंबी जोड़े पर गणना कर रहा हूँ, क्या डाटासेट एक MySQL डाटाबेस के साथ उपयोग करने के लिए सबसे उपयुक्त है?

Solutions Collecting From Web of "MySQL डाटाबेस में अक्षांश / रेखांति को संचित करते समय उपयोग करने के लिए आदर्श डेटा प्रकार क्या है?"

जीआईएस के साथ MySQL के स्थानिक एक्सटेंशन का उपयोग करें

Google, Google Maps के साथ एक उदाहरण "स्टोर लोकेटर" एप्लिकेशन के लिए PHP / MySQL समाधान को खत्म करने की शुरुआत करता है। इस उदाहरण में, वे अक्षांश / एलएजी मूल्यों को "फ्लोट" के रूप में "10,6" की लंबाई के साथ संग्रहीत करते हैं

http://code.google.com/apis/maps/articles/phpsqlsearch.html

मूल रूप से यह आपके स्थानों के लिए आवश्यक परिशुद्धता पर निर्भर करता है। डबल का उपयोग करने पर आपके पास 3.5 एनएम सटीक होगा डीसीआईएमएएल (8,6) / (9, 6) 16 सेमी तक नीचे चला जाता है फ्लोट 1.7 मीटर है …

यह बहुत दिलचस्प तालिका में एक और पूरी सूची है: http://mysql.rjweb.org/doc.php/latlng :

 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 

उम्मीद है की यह मदद करेगा।

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

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

इसके अलावा, MySQL स्थानिक में दूरी आपकी पहली ज्यामिति के समान इकाइयों में है। इसका अर्थ है कि यदि आप दशमलव डिग्री का उपयोग कर रहे हैं, तो आपकी दूरी माप दशमलव डिग्री में है। यह आपको सटीक परिणाम प्राप्त करना बहुत कठिन बना देगा, क्योंकि आप भूमध्य रेखा से फुर्थर प्राप्त करते हैं।

जब मैंने ऐसा एआरआईएनसी 424 से बनाया गया एक नेविगेशन डेटाबेस के लिए किया था, तो मैंने एक निष्पक्ष परीक्षण किया और कोड पर वापस देख लिया, मैंने डेसीमैल (18,12) (वास्तव में एक NUMERIC (18,12) का प्रयोग किया क्योंकि यह फायरबर्ड था)।

तैरता है और डबल्स सटीक नहीं होते हैं और गोल त्रुटियों में परिणामस्वरूप हो सकता है जो बहुत बुरी चीज हो सकती है मुझे याद नहीं आ रहा है कि मुझे कोई वास्तविक डेटा मिल गया है, जिसमें समस्याएं थीं- लेकिन मैं काफी हद तक निश्चित हूं कि फ्लोट या डबल में सही ढंग से स्टोर करने में अक्षमता से समस्याएं हो सकती हैं

बिंदु यह है कि जब डिग्री या रेडियन का उपयोग करते हैं तो हम मूल्यों की सीमा जानते हैं – और आंशिक भाग को सबसे अधिक अंक की आवश्यकता होती है।

MySQL स्थानिक एक्सटेंशन एक अच्छा विकल्प हैं क्योंकि वे OpenGIS ज्यामिति मॉडल का पालन करते हैं। मैंने उनका उपयोग नहीं किया क्योंकि मुझे अपने डेटाबेस को पोर्टेबल रखने की जरूरत थी

इस विकी लेख http://en.wikipedia.org/wiki/Decimal_degrees#Accuracy के आधार पर, MySQL में उचित डेटा प्रकार अलग क्षेत्रों में देशांतर और अक्षांश को संग्रहीत करने के लिए दशमलव (9, 6) है।

उस सटीक पर निर्भर करता है जिसे आपको आवश्यकता होती है।

 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

संक्षेपित करते हुए:

  • सबसे सटीक उपलब्ध विकल्प DOUBLE
  • सबसे आम देखा जाने वाला प्रकार DECIMAL(8,6)/(9,6)

MySQL 5.7 के अनुसार , एक एकल समन्वय के भंडारण के लिए विशेष डेटा प्रकार (एसडीटी), विशेष रूप से POINT का उपयोग करने पर विचार करें। 5.7 से पहले, एसडीटी अनुक्रमितों का समर्थन नहीं करता है (जब तालिका प्रकार माइसाम है तब 5.6 के अपवाद के साथ)।

ध्यान दें:

  • POINT वर्ग का उपयोग करते समय, संरेखण निर्देशांक के लिए तर्कों का क्रम POINT(latitude, longitude) होना चाहिए।
  • स्थानिक सूचकांक बनाने के लिए एक विशेष सिंटैक्स है
  • ST_Distance का उपयोग करने का सबसे बड़ा फायदा यह है कि आपके पास स्थानिक विश्लेषण कार्यों तक पहुंच है, जैसे कि दो बिंदुओं ( ST_Distance ) के बीच दूरी की गणना और यह निर्धारित करने के लिए कि एक बिंदु एक अन्य क्षेत्र ( ST_Contains ) में है।

अक्षांश (90 से -90 डिग्री) और DECIMAL(9,6) रेखांश (180 से -180 डिग्री) के लिए DECIMAL(8,6) उपयोग करें DECIMAL(8,6) अधिकांश अनुप्रयोगों के लिए 6 दशमलव स्थान ठीक हैं नकारात्मक मानों की अनुमति के लिए दोनों को "हस्ताक्षरित" होना चाहिए।

Google Maps के अनुसार, दूर जाने की कोई आवश्यकता नहीं है, सबसे अच्छा अक्षांश और एलएनजी के लिए फ्लोट (10,6) है

हम अपने ऑरेकेल डेटाबेस में एक्स अक्षांश / रेखांश एक्स 1,000,000 संचय करते हैं क्योंकि युगल के साथ गोल की त्रुटियों से बचने के लिए संख्याएं खुलती हैं।

यह देखते हुए कि 6 वें दशमलव स्थान के अक्षांश / देशांतर 10 सेंटीमीटर सटीकता था जो कि हम सभी की जरूरत थी। कई अन्य डेटाबेस भी 6 वें दशमलव स्थान के लिए अक्षांश / लंबे समय तक स्टोर करते हैं।

एक पूरी तरह से अलग और सरल परिप्रेक्ष्य में:

  • यदि आप अपने नक्शे, मार्कर, बहुभुज, जो कुछ भी दिखाने के लिए Google पर भरोसा कर रहे हैं, तो Google द्वारा गणना करें!
  • आप अपने सर्वर पर संसाधनों को सहेजते हैं और आप अक्षांश और देशांतर को एक स्ट्रिंग ( VARCHAR ) के रूप में इकट्ठा करते हैं, उदा: " -0000.0000001, -0000.000000000000001 " (35 लंबाई और यदि संख्या 7 दशमलव अंकों से अधिक है तो यह गोल हो जाता है) ;
  • यदि Google प्रति संख्या में 7 दशमलव अंकों से अधिक रिटर्न देता है, तो आप वैसे भी अपनी स्ट्रिंग में संग्रहीत डेटा प्राप्त कर सकते हैं, बस आप भविष्य में कुछ फ्लाई या रोगाणुओं का पता लगाना चाहते हैं ;
  • आप अपनी दूरी मैट्रिक्स या उनके ज्यामिति लाइब्रेरी का उपयोग करके दूरी के हिसाब से या कुछ क्षेत्रों में अंक का पता लगाने के लिए इसका उपयोग सरल कर सकते हैं: google.maps.geometry.poly.containsLocation(latLng, bermudaTrianglePolygon))
  • वहाँ बहुत सारे "सर्वर-साइड" एपीआई हैं जो आप Google मैप्स एपीआई का उपयोग करते हैं ( पायथन में , रेल , पीएचपी , कोडइग्नेटर , लायरवेल , वाई , ज़ेंड फ्रेमवर्क , आदि पर)।

इस तरह आपको अनुक्रमण संख्याओं और अन्य प्रकार की समस्याओं के बारे में चिंता करने की ज़रूरत नहीं है, जो आपके निर्देशांक को बढ़ा सकते हैं

आपके आवेदन के आधार पर, मैं फ्लोैट (9 6) का उपयोग करने का सुझाव देता हूं

स्थानिक कुंजी आपको अधिक सुविधाएँ देगी, लेकिन उत्पादन के आधार पर फ़्लोट्स स्थानिक कुंजियों से बहुत तेज हैं। (0,01 वीएस 0,001 एजीजी में)

हालांकि यह सभी कार्यों के लिए इष्टतम नहीं है, यदि आप मानचित्र टाइल बना रहे हैं या केवल एक प्रोजेक्शन के साथ बड़ी संख्या में मार्कर (डॉट्स) के साथ काम कर रहे हैं (जैसे Mercator, जैसे कि Google मानचित्र और कई अन्य स्लिपी नक्शे ढांचे की उम्मीद), मैंने क्या पाया है मैं वास्तव में वास्तव में आसान होने के लिए "विशाल समन्वय प्रणाली" को कॉल करता हूं। असल में, आप एक्स और वाई पिक्सेल को किसी भी तरह से ज़ूम इन-इन पर संरेखित करते हैं- मैं जूम लेवल 23 का उपयोग करता हूं। इसके कई फायदे हैं:

  • जब आप बिन्दु को संभालते हैं, तो आप बार-बार मर्केटर पिक्सेल रूपांतरण के लिए महंगा अक्षांश / एलएनजी करते हैं
  • एक ज़ूम स्तर दिए गए रिकॉर्ड से टाइल समन्वय प्राप्त करना एक सही बदलाव लेता है
  • एक रिकॉर्ड से पिक्सेल समन्वय प्राप्त करना एक सही बदलाव और एक बिटवर्ड और एक लेता है।
  • बदलाव इतने हल्के होते हैं कि ये एसक्यूएल में करने के लिए व्यावहारिक है, जिसका मतलब है कि आप प्रति पिक्सेल स्थान पर केवल एक रिकॉर्ड वापस करने के लिए एक अलग सेट कर सकते हैं, जो बैकएंड द्वारा दिए गए नंबर रिकॉर्ड्स पर कट जाएगा, जिसका अर्थ है कम प्रोसेसिंग फ़्रंट एंड।

मैंने हाल ही में एक ब्लॉग पोस्ट में इस बारे में बात की थी: http://blog.webfoot.com/2013/03/12/optimizing-map-tile-generation/

MySQL स्थानिक कार्यों में उन लोगों की तुलना में पोस्टजीआईएस में स्थानिक फ़ंक्शंस अधिक कार्यात्मक (अर्थात् बीबीओएक्स संचालन के लिए विवश नहीं) हैं। इसे देखें: लिंक टेक्स्ट

मैं कुछ जवाब / टिप्पणियों से बहुत आश्चर्यचकित हूं।

पृथ्वी पर कोई भी स्वैच्छिक रूप से "पूर्व में कमी" को सटीक करने के लिए तैयार होगा, और फिर बाद में बदतर संख्याओं पर गणना कैसे करेगी? अंततः बेवकूफ लगता है

अगर स्रोत में 64-बिट सटीकता है, तो निश्चित रूप से यह स्कीम को स्केल को ठीक करने के लिए गूंगा होगा। 6 दशकों, और अधिकतम 9 महत्वपूर्ण डिगेट (जो आमतौर पर प्रस्तावित दशमलव 9.6 प्रारूप के साथ होता है) के लिए सटीकता को सीमित करता है।

स्वाभाविक रूप से, एक ऐसे डेटा को स्टोर करता है जो स्रोत सामग्री में है। सटीकता कम करने का एकमात्र कारण सीमित भंडारण स्थान होगा।

  • मूल सटीकता के साथ स्टोर स्रोत के आंकड़े
  • सटीक गणना में स्रोत से गणना की जाने वाली स्टोर के आंकड़े (उदाहरण के लिए यदि एपेलक्शन कोड युगल का उपयोग करता है, तो परिणाम को डबल्स के रूप में स्टोर करते हैं)

दशमलव 9.6-प्रारूप में एक तस्वीर-टू-ग्रिड phenomen का कारण बनता है। यह बहुत आखिरी चरण होना चाहिए, अगर यह सब कुछ होने वाला है

मैं संचित त्रुटियों को अपने घोंसले के लिए आमंत्रित नहीं करता।

MySQL सभी फ़्लोट्स के लिए डबल का उपयोग करता है … तो टाइप डबल का उपयोग करें फ्लोट का प्रयोग ज्यादातर स्थितियों में अप्रत्याशित गोल मानों के कारण होगा

एक FLOAT आपको सभी परिशुद्धता देना चाहिए, और प्रत्येक समनुरूप को स्ट्रिंग या पसंद के रूप में रखने से तुलनात्मक कार्यों के लिए बेहतर होगा।

यदि आपका MySQL संस्करण 5.0.3 से पहले है, तो आपको कुछ फ़्लोटिंग बिंदु तुलना त्रुटियों को ध्यान में रखना होगा।

MySQL 5.0.3 से पहले, डेसीमैल कॉलम स्टोर सटीक सटीकता के साथ मूल्यों को स्टोर करते हैं क्योंकि वे स्ट्रिंग के रूप में प्रतिनिधित्व करते हैं, लेकिन डीसीआईएमएल वैल्यू पर गणनाओं को फ्लोटिंग-पॉइंट ऑपरेशंस का उपयोग किया जाता है। 5.0.3 के अनुसार, MySQL 64 दशमलव अंकों की परिशुद्धता के साथ दशमलव कार्यों को करता है, जो डीसीआईएमएल कॉलम की बातों पर सबसे आम अशुद्धि समस्याओं को हल करना चाहिए

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