MySQL में lng / lat को संग्रहीत करने के लिए डेटा प्रकार


14

मैं एक MySQL डेटाबेस में lnt / lat अंक की एक बड़ी सूची संग्रहीत कर रहा हूं। फिलहाल ये एम में यूके के लिए अनुमानित अंक हैं, लेकिन दीर्घावधि में मैं यह सुनिश्चित करना चाहूंगा कि मैं दुनिया भर के अंकों के निर्देशांक को संग्रहीत कर सकूं। मुझे किस डेटाटाइप का उपयोग करना चाहिए?

मैंने उपयोग करना शुरू कर दिया decimal(18,12), लेकिन अनिश्चित था कि क्या इस परिशुद्धता की आवश्यकता है या क्या मैं सिर्फ एक का उपयोग कर सकता हूं float। मैंने अपना कोड शामिल किया है, अगर मुझे कुछ और भी करना चाहिए, तो मुझे इस पर विचार करना चाहिए:

CREATE TABLE UKTest
(
lat FLOAT,
lng FLOAT
)

मैं SQL के लिए काफी नया हूं इसलिए मैं अनिश्चित हूं कि क्वेरी चलाते समय डेटा प्रकार महत्वपूर्ण है या नहीं। मैंने मान लिया कि समग्र स्मृति चर प्रकार के आधार पर अलग-अलग होगी। क्या इस प्रकार के काम के लिए एक मूल MySQL डेटाबेस पर एक स्थानिक डेटाबेस का उपयोग करने का कोई लाभ है?

जवाबों:


16

यह सवाल स्टैकऑवरलो पर भी पूछा गया था

शीर्ष उत्तर MySQL स्थानिक एक्सटेंशन का सुझाव देता है । यहां इन एक्सटेंशन के साथ काम करने पर लिंक का भार है

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

एक मानचित्र पर Google प्रदर्शन बिंदुओं से एक कोड उदाहरण में , वे बताते हैं:

जब आप MySQL टेबल बनाते हैं, तो आप lat और lng विशेषताओं पर विशेष ध्यान देना चाहते हैं। Google मानचित्र की वर्तमान ज़ूम क्षमताओं के साथ, आपको दशमलव के बाद केवल 6 अंकों की सटीकता चाहिए।

हमारे टेबल के लिए आवश्यक स्टोरेज स्पेस को कम से कम रखने के लिए, आप यह निर्दिष्ट कर सकते हैं कि लैट और लैंग विशेषताएँ फ्लोट आकार (10,6) की हैं। यह फ़ील्ड दशमलव के बाद 6 अंकों को संग्रहीत करने देगा, साथ ही दशमलव से पहले 4 अंकों तक, उदाहरण के लिए -123.456789 डिग्री

मैं संख्यात्मक प्रकारों के बीच प्रदर्शन अंतर के बारे में चिंता नहीं करूंगा। निर्णय सूचकांकों का कहीं अधिक प्रभाव होगा।


एक अच्छे उत्तर के लिए +1! यही मैंने कहा और किया होगा।
OptimizePrime

उत्तर के लिए धन्यवाद - मैंने MySQL स्थानिक एक्सटेंशन प्रलेखन के माध्यम से पढ़ा है, लेकिन आप उनका उपयोग कैसे करना शुरू करते हैं? मैं सिर्फ GoDaddy पर एक डिफ़ॉल्ट MySQL DB है; मुझे नहीं पता कि मुझे कहां से शुरू करना चाहिए।
djq


1
और इस सवाल का जवाब और अधिक लिंक के लिंक के साथ अद्यतन
geographika

4 पूर्णांक अंक क्यों?
एलिक्स एक्सल

6

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

2019 : मेरे जैसे लोगों के लिए भी जो टिप्पणियाँ नहीं पढ़ते हैं - MySQL बिना किसी सबूत के, स्थानिक डेटा प्रकारों को, निश्चित रूप से धीमा, का समर्थन करता है।


नोट: जो लोग नए हैं और ऊपर पढ़ रहे हैं, उनके लिए MySql 5.7+ अब स्पेसियल इंडेक्स के साथ काम करता है।
आशा है कि

लेकिन यह अभी भी धीमी है
इयान Turton

क्या आप ऐसे संसाधनों की मदद कर सकते हैं जो यह दर्शाते हैं कि कितना धीमा है? मैं एक लाख से कम रिकॉर्ड वाली परियोजना पर इसका उपयोग करने पर विचार कर रहा हूं। धन्यवाद।
आशा है कि

व्यक्तिगत अनुभव कोई सार्वजनिक डेटा नहीं। अवैध ज्यामिति आदि तोड़ने चीजों के साथ बहुत सारे मुद्दों
इयान Turton

धन्यवाद। डेटाबेस रिकॉर्ड्स (और बहुभुज जैसी कोई जटिल आवश्यकताओं के आधार पर) के बीच मेरी ज़रूरत सिर्फ दूरी की है-यह शायद अब के लिए mysql का उपयोग करने के लिए सुरक्षित होगा।
आशा है कि
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.