आकृति तकनीकी विनिर्देश में "विषमताएँ"


32

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

  1. मुख्य रिकॉर्ड फ़ाइल (.shp) मिश्रित धीरज की है । विशेष रूप से, हेडर के कुछ हिस्सों में बड़े एंडियन बाइट ऑर्डर करने की सुविधा है, लेकिन रिकॉर्ड सभी छोटे एंडियन हैं। मैं आमतौर पर बाइट्स और बिट्स की तुलना में उच्च स्तर पर काम करता हूं, लेकिन मैंने अब तक एंडियननेस के बारे में जो कुछ पढ़ा है वह असामान्य है। फ़ाइल समान एंडियनस के लिए निर्दिष्ट क्यों नहीं है?

  2. "फ़ाइल लंबाई" फ़ील्ड, साथ ही साथ अन्य लंबाई और स्थिति फ़ील्ड, अधिक मानक (मेरे सीमित दृष्टिकोण से) 8 बिट स्थिति के बजाय 16-बिट शब्दों में दर्ज किए जाते हैं। यह निर्णय कैसे पहुंचा?

मैंने स्टैक ओवरफ्लो पर एक समान प्रश्न पोस्ट किया, लेकिन कोई प्रतिक्रिया नहीं मिली। यदि यह अन्य लोगों के विषय से बहुत अधिक लगता है, तो मैं इसे बंद करने का समर्थन कर सकता हूं।


4
GeospatialPython.com पर जोएल लॉहेड थोड़ी देर के लिए आकार के रहस्यों को सुलझाने पर काम कर रहा है।
चाड कूपर

बिल्कुल संबंधित नहीं है, लेकिन साफ! मुझे उम्मीद है कि यह आंकड़ा बाहर होगा।
canisrufus

जवाबों:


28

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

दूसरा प्रश्न एक धारणा पर आधारित प्रतीत होता है जो सत्य नहीं है। उदाहरण के लिए, "फ़ाइल की लंबाई" फ़ील्ड बाइट ऑफसेट 24 में मुख्य हेडर में दिखाई देती है और एक (हस्ताक्षरित) चार-बाइट (32 बिट) पूर्णांक है, क्योंकि यह 2 ^ 31- की लंबाई का प्रतिनिधित्व करने के लिए होना चाहिए 1। यह एक चार-बाइट "फ़ाइल कोड" और भविष्य में उपयोग के लिए आरक्षित पांच और चार-बाइट फ़ील्ड से पहले है: जब आप ऐसी जगह जमा कर रहे हों, तो निश्चित रूप से आप यथासंभव बड़े क्षेत्रों को बनाना चाहते हैं, जो उस समय 32 बिट था, ताकि सबसे बड़ा संभव लचीलापन बनाए रखा जा सके। यह भी शब्द सीमाओं पर एक फ़ाइल में संख्यात्मक क्षेत्रों को संरेखित करने में मदद करता है:


2
:) ठीक वही जो मेरे द्वारा खोजा जा रहा था। जब मैं कहता हूं कि "फ़ाइल की लंबाई" फ़ील्ड "16-बिट शब्दों में दर्ज" है, तो मैं जो कहना चाहता हूं वह यह है कि 32-बिट पूर्णांक का मान फ़ाइल की लंबाई को 16-बिट शब्दों में रिकॉर्ड करता है। (युक्ति से: "फ़ाइल की लंबाई का मान फ़ाइल की कुल लंबाई 16-बिट शब्दों में है")। ऐसा लगता है कि यह 2 * 2 ^ 31-1 की बाइट लंबाई का प्रतिनिधित्व कर सकता है, जो लगभग 4 जीबी का लगता है। .Shx फ़ाइल में मानों के लिए भी यही सत्य है। ऐसा लगता है कि इसे 2 * 2 ^ 31-1 बाइट तक फ़ाइल की लंबाई का समर्थन करने में सक्षम होना चाहिए। मुझे किसकी याद आ रही है?

अच्छी बात है - मैं चूक गया। वास्तव में, डिज़ाइन केवल आसानी से चार- लंबाई वाले शब्दों के संदर्भ में फ़ाइल की लंबाई और ऑफसेट (.shx फ़ाइल में संकेत) कर सकता है , जिससे .shp फ़ाइल का संभावित आकार 4 * (2 ^ 31-1) बढ़ जाता है। (लगभग 8 बिलियन बाइट्स)। मुझे नहीं पता कि उन्होंने दो-बाइट शब्द क्यों चुने, और न ही क्यों वे लगातार हस्ताक्षर किए गए पूर्णांक का उपयोग करते हैं जहां अहस्ताक्षरित पूर्णांक दोनों अधिक उपयुक्त हैं और दो बार अधिक भंडारण के लिए प्रदान करते हैं।
whuber

1
मुझे आश्चर्य है कि अगर उस समय उपयोग किए जाने वाले 16-बिट कंप्यूटरों के साथ 16-बिट विषमता होती है, तो एक देशी int16-बिट्स था।
माइक टी

यह हमेशा एक संभावना है, @ माइक। हालांकि, यहां तक ​​कि 80286 पीसी (सी। 1984) ने मूल रूप से 32-बिट इनट्स का समर्थन किया - उन्होंने उनके साथ अंकगणित करने के लिए रजिस्टर जोड़े का उपयोग किया।
फुबेर

5
एसरी के एक सहयोगी का कहना है कि उन्हें याद है कि एंडियन-नेस का मिश्रण जानबूझकर किया गया था। क्रॉस-प्लेटफ़ॉर्म मुद्दों के कारण हम 'हम डेवलपर्स को इसे सटीक रूप से हैंडल करेंगे' की तर्ज पर कुछ करते हैं। लेकिन, निश्चित रूप से, यह सब एपोक्रिफल है।
mkennedy

10

कोई व्यक्ति इन उत्तरों को जानता है और अधिक लेकिन वे बात नहीं कर रहे हैं।

मैं जिस टीम के साथ काम कर रहा था, वह अनजाने एसबीएन और एसबीएक्स फाइलों को डिकोड करने के लिए काम कर रही है, उन्होंने कई और विषमताओं की खोज की है जो एक ही समय में और भी अधिक विचित्र हैं।

अधिकांश शेपफाइल संरचनाएं तार्किक और बहुत कुशल हैं जो ईएसआरआई डेवलपर्स के माध्यम से सोची गई चीजों का सुझाव देती हैं। यह ऐसा है जैसे उनके पास स्मार्ट डेवलपर्स का एक झुंड था जिसमें एक पागल फेंक दिया गया था।

जैसा कि अन्य पदों से पता चलता है कि विषमताएँ शायद मशीन या भाषा की आवश्यकताओं का परिणाम हैं जो अब हमारे लिए विदेशी हैं।

मुझे हमेशा संदेह था कि 16-बिट शब्द अंतरिक्ष को बचाने का एक आसान तरीका था। आप पाएंगे कि आपको फ़ाइलों को संभालते समय मेमोरी में 16-बिट शब्द मान रखने होंगे। अंतरिक्ष को बचाने के लिए मूल्यों की गणना की रणनीति आज भी द्विआधारी प्रारूपों में आम है। लेकिन माइक के मूल अंतर सुझाव भी केवल संभावना के रूप में है।

एंडियन-फ्लिपिंग सिर्फ अजीब है। किसी के पास कोई अच्छा जवाब नहीं है जो मैंने देखा है।

Dbf फॉर्मेट को dbase III फॉर्मेट से रिप्लेस किया गया था जिसकी उत्पत्ति 1960 में हुई थी। इसका व्यापक रूप से अब तक उपयोग किया गया है और इसे फॉक्सप्रो और एक्सबेस सहित अन्य नामों के तहत पाया जा सकता है।

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

मैंने बहुत लेखन pyshp सीखा। पार्सर लिखना एक प्रारूप सीखने का एक शानदार तरीका है।


हम्म। अच्छा उत्तर। मुझे समझ में नहीं आता कि 16-बिट शब्दों का उपयोग कैसे स्थान बचाता है। मेरे उद्देश्यों के लिए (जावास्क्रिप्ट में ArrayBufferViews का निर्माण), यह सब मुझे सही ऑफसेट प्राप्त करने के लिए दो से गुणा करने के लिए मजबूर करता है: मैं बिना किसी लाभ के अतिरिक्त चक्र जला रहा हूं। क्या आप विस्तृत करेंगे?
canisrufus

1
हां - चूंकि वे साइन इन्ट्स का उपयोग करते थे, इसलिए वे उन मूल्यों पर ऊपरी छोर पर 32,767 होंगे ताकि वे 4 के बजाय 2-बाइट्स में बड़ी संख्याओं को स्टोर कर सकें। जैसा कि मैंने कहा मानों को 16-बिट शब्दों को सौंपा गया है जो आपके द्वारा पकड़े गए मूल्य हैं। रैम जब पढ़ने और लिखने के संचालन के लिए शेपफाइल्स के साथ काम कर रहा हो। युगल (जो मैंने अन्य बाइनरी प्रारूपों में देखा है) पर अंतरिक्ष को बचाने की योजना के साथ आ रहा है हमेशा बदसूरत और जटिल। इसलिए वे सिर्फ डेटा साइज वैल्यू के लिए एक साधारण योजना के साथ फंस गए हैं।
जियोस्पेशियलपीथॉन.कॉम

इसके अलावा - मैंने shx फ़ाइलों में खोज की जो मुझे पहली बार में स्टम्प किया था। SHX फ़ाइलों में 256x256 पूर्णांक ग्रिड पर मैप की गई सुविधाओं के लिए बाउंडिंग बॉक्स होते हैं। यह तकनीक अनुक्रमण में सामान्य है लेकिन एक ग्रिड पर नहीं जो कि छोटी है। वे कोट्स के बजाय 1-बाइट चार्ट के रूप में निर्देशांक को बचाते हैं। इसलिए ग्रिड केवल 256x256 है। अब यह 1990 के दशक के लिए स्मृति के साथ नीच है! एक सूचकांक का उपयोग करते हुए भागों की निहित समूहन जैसी कई अन्य दक्षताएं हैं। आप सही हैं - इन तकनीकों ने प्रोग्रामर पर अधिक बोझ डाला। इसलिए मेमोरी का उपयोग प्राथमिकता होना चाहिए।
जियोस्पेशियलपीथॉन.कॉम

1
याह, मैंने आपका लिखा पढ़ा। आप उस एक पर प्रभु का अच्छा काम कर रहे हैं;) मुझे आपके अंतिम विश्लेषण का बेसब्री से इंतजार है। 16-बिट मुद्दे के बारे में, मुझे यकीन नहीं है कि आपकी बात सही है। 1. SHP और SHX फ़ाइलों में, कोई 16 बिट फ़ील्ड नहीं हैं, जब तक कि मैं गलत तरीके से गलत नहीं हूँ। 2. 8-बिट मानों के बजाय 16-बिट मानों का प्रतिनिधित्व करना केवल वर्णनीय लंबाई (2 * 2 ^ 15) को दोगुना करता है, जो कि वे एक अहस्ताक्षरित int (2 ^ 16) का उपयोग करके प्राप्त कर सकते थे। यह अंततः किसी भी स्थान को नहीं बचा रहा है।
कैनिसफ्रुस

जब आप "मेमोरी उपयोग" का संदर्भ लेते हैं, तो यह बताना मुश्किल है कि क्या आप रैम या डिस्क का मतलब है। 90 के दशक की शुरुआत में, 2 जीबी ड्राइव और 16-32 एमबी रैम बहुत उच्च अंत थे: कुछ फ़ाइल स्थान (या नेटवर्क बैंडविड्थ) को सहेजना अभी भी महत्व का होगा। एक जिम्मेदार सॉफ्टवेयर इंजीनियर अपने भविष्य के ग्राहकों के लिए उनके विकल्पों में टाइम-स्पेस ट्रेडऑफ़ के निहितार्थ के माध्यम से ध्यान से सोचना चाहेगा; जब तक चुनाव स्पष्ट रूप से अक्षम नहीं हो जाता, तब तक मैं उन्हें संदेह का लाभ देता।
whuber

5

इस पर मेरा टेक है।

आकार का प्रारूप सबसे अधिक संभावना ARC / INFO से विकसित हुआ, जिसका इतिहास अपने FORTRAN / PR1ME मूल से वापस डेटिंग था। सभी ARC / INFO प्रारूपों में यह 100 बाइट हैडर और फ़ाइल कोड और फ़ाइल लंबाई (जैसे कवरेज, TINs) का बड़ा धीरज था।

जब आकार दृश्य 1 के लिए बनाया गया था, ESRI Microsoft विंडोज बाजार में तोड़ने पर ध्यान केंद्रित किया गया था और शेपफाइल प्रारूप के शेष भाग भारी रूप से पीसी के छोटे एंडियन होने पर केंद्रित है।

धीरज के बीच निरंतर स्विचिंग, मंच में टूटने पर लाभ की आशंका जताते हुए विरासत की उत्पत्ति का समर्थन करने की आवश्यकता थी।


यह प्रशंसनीय लगता है। परिज्ञान के लिए धन्यवाद!
whuber

यह मेरे पसंदीदा अनुमान के बारे में है। अब हम सभी की जरूरत है कि क्या आप सही हैं, यह देखने के लिए "द ESRI टेल ऑल, टेक्निकल एडिशन" प्रकाशित करें।
कैनिफ्रुस

2
यदि आकृति प्रारूप ARC / INFO स्वरूपों से विकसित हुआ, तो यह v7 की तुलना में काफी पहले था। 1994 में जब मैंने ESRI में शुरू किया था, AV2 पहले से ही बाहर था, और ARC / INFO 7 के लिए विकास कार्य चल रहा था।
mkennedy 15

अच्छी बात है, मेलिटा। इस उत्तर का क्रूस - कि कुछ प्रारूप विकल्पों में अंततः फोरट्रान मूल हो सकता है - अभी भी मूल आर्क और इंफो अनुप्रयोगों के लिए सभी तरह से सही होगा।
whuber

धन्यवाद @mkennedy, मैंने v7 का संदर्भ हटा दिया। मुझे अभी भी उन दिनों की याद है जो मूल ARC / INFO उपयोगकर्ता पुस्तिकाओं (v3 .. v6 युग) के हेडर थे, जिनका मानना ​​है कि मुझे FORTRAN कोड से लिया गया था।
स्टीफन क्वान

4

मैंने हमेशा यह माना कि एंडियन का विभाजन सन वर्कस्टेशंस पर दो टीमों में से एक और पीसी के दूसरे पर होने के कारण हुआ था और वे विकास प्रक्रिया के अंत तक नहीं मिलते थे।

मैं जानना चाहूंगा कि वास्तव में क्या हुआ था।


3
मुझे लगता है कि ईएसआरआई उससे थोड़ा अधिक समन्वित था। दरअसल, अगर कुछ भी हो, तो उनके सॉफ्टवेयर में यह देखने की प्रवृत्ति होती है कि इसके डिजाइन में बहुत अधिक समिति की भागीदारी है।
whuber

0

मुझे लगता है कि कहीं न कहीं मैंने dbf / foxpro उत्पत्ति के बारे में कुछ सुना है।
मैं हालांकि एक अजीब सपना देख सकता था।


5
.Shp और .shx भागों, जो यहाँ प्रश्न हैं, को पूरी तरह से .dbf प्रारूप से स्वतंत्र रूप से डिज़ाइन किया गया था, जो लगभग 20 साल पहले था।
फुबेर

0

आपको यह समझना होगा कि कुछ 20 साल पहले शेपफाइल्स को पेश किया गया था, उस समय असंगत और खराब रूप से डिज़ाइन किए गए फ़ाइल स्वरूपों का असंख्य था, इसलिए शेपफाइल्स कोई अपवाद नहीं हैं। मैंने खुद एक शेपफाइल पार्सर लिखा है और मुझे यह कहना है कि मुझे स्वयं शेफाइल (.SHP) की तुलना में DBF प्रारूप को पार्स करने के साथ कई और समस्याएं हैं।

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