2015-01-21 8 views
47

में अक्षांश/देशांतर मानों के लिए डबल या दशमलव सी # में भूगर्भीय डेटा संग्रहीत करते समय उपयोग करने के लिए सबसे अच्छा डेटा प्रकार क्या है? मैं इसकी सटीकता के लिए दशमलव का उपयोग करता हूं, लेकिन दशमलव फ़्लोटिंग पॉइंट नंबरों पर ऑपरेशन धीमे होते हैं तो बाइनरी फ़्लोटिंग पॉइंट नंबर (डबल)।सी #

मैंने पढ़ा है कि अधिकांश समय आपको अक्षांश या देशांतर के लिए परिशुद्धता के 6 या 7 अंकों की आवश्यकता नहीं होगी। क्या युगल की अचूकता तब भी मायने रखती है या इसे अनदेखा किया जा सकता है?

+3

मैं विपरीत प्रश्न पूछूंगा: क्या प्रदर्शन अंतर भी मायने रखता है या इसे अनदेखा किया जा सकता है? पूर्ण परिशुद्धता के लिए – Heinzi

+0

दशमलव। यदि आप उन पर लाखों लोगों को संग्रहित कर रहे हैं, तो आप आकार पर थोड़ा सा बचा सकते हैं और डबल, लेकिन नगण्य का उपयोग करके प्रदर्शन पर थोड़ा सुधार कर सकते हैं। –

+1

डेटाबेस में आपको अक्षांश और अक्षांश –

उत्तर

3

मुझे कुछ समय पहले इस सवाल का सामना करना पड़ा जब मैंने विशाल प्रोग्रामिंग के साथ शुरुआत की। मैंने कुछ समय पहले एक पुस्तक पढ़ी जिसने मुझे इसका नेतृत्व किया।

//sql server has a really cool dll that deals with spacial data such like 
//geography points and so on. 
//add this namespace 
Using Microsoft.SqlServer.Types; 

//SqlGeography.Point(dblLat, dblLon, SRID)

var lat_lon_point = Microsoft.SqlServer.Types.SqlGeography.Point(lat, lon, 4326); 

यह सबसे अच्छा तरीका है जब spacial डेटा के साथ अपने आवेदन में काम कर रहा है। तो बचाने के लिए डेटा एसक्यूएल

CREATE TABLE myGeoTable 
{ 
LatLonPoint GEOMETRY 
} 
बाकी

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

24

एक डबल में सटीकता के 15 दशमलव अंक हैं। इसलिए, मान लीजिए कि उनमें से तीन अंक अक्षांश/लंबे मूल्यों (अधिकतम 180 डिग्री) के लिए दशमलव बिंदु के बाईं ओर होने जा रहे हैं। यह दाईं ओर परिशुद्धता के 12 अंक छोड़ देता है। चूंकि लेट/लम्बाई की डिग्री ~ 111 किमी है, इसलिए 12 अंकों में से 5 हमें मीटर के लिए सटीकता प्रदान करेगी। 3 और अंक हमें मिलीमीटर के लिए सटीक देंगे। शेष 4 अंक हमें लगभग 100 नैनोमीटर के लिए सटीकता प्राप्त करेंगे। चूंकि प्रदर्शन और स्मृति के परिप्रेक्ष्य से डबल जीत जाएगा, मुझे दशमलव का उपयोग करने पर भी विचार करने का कोई कारण नहीं दिखता है।

+0

मुझे विश्वास है (अवधि) –

64

डबल के लिए जाएं, कई कारण हैं।

  • त्रिकोणमितीय कार्यों केवल डबल
  • डबल की प्रेसिजन के लिए उपलब्ध हैं अब तक कुछ भी आप कभी भी अक्षांश/देशांतर के लिए आवश्यकता होती है जाएगा से परे है
  • तृतीय-पक्ष मॉड्यूल (जैसे DotSpatial) भी निर्देशांक
  • के लिए डबल का उपयोग को महत्व देता है