শেফিল প্রযুক্তিগত নির্দিষ্টকরণে "অদ্ভুততা"


32

আমি একটি শেফফাইল পার্সিং লাইব্রেরি লিখছি, এবং আমি অবিলম্বে বুঝতে পারি না এমন স্পেসিফিকেশনে বেশ কয়েকটি ডিজাইনের সিদ্ধান্তের মুখোমুখি হয়েছি । আমি আশা করছি যে এখানে প্রায় এক জ্যেষ্ঠ ইএসআরআই বিকাশকারী আছেন যারা আমাকে বলতে পারেন যে এই জিনিসগুলি কেন সেভাবে।

  1. মূল রেকর্ড ফাইল (.shp) মিশ্র অন্তর্নিহিত । বিশেষত, শিরোলেখগুলির অংশগুলিতে বড় এন্ডিয়ান বাইট ক্রম সরবরাহ করা থাকে তবে রেকর্ডগুলি সমস্ত সামান্য এন্ডিয়ান। আমি সাধারণত বাইটস এবং বিটের চেয়ে উচ্চতর স্তরে কাজ করি তবে শেষ পর্যন্ত আমি যত কিছু পড়েছি তা এটিকে অস্বাভাবিক হিসাবে চিহ্নিত করে। ফাইলটি অভিন্ন শেষ হতে নির্দিষ্ট করা হয়নি কেন?

  2. "ফাইলের দৈর্ঘ্য" ক্ষেত্রের পাশাপাশি অন্যান্য দৈর্ঘ্য এবং অবস্থান ক্ষেত্রগুলি আরও 8 স্ট্যান্ডার্ড (আমার সীমাবদ্ধ দৃষ্টিকোণ থেকে) 8 বিটের অবস্থানের পরিবর্তে 16-বিট শব্দে রেকর্ড করা হয়। এই সিদ্ধান্তটি কীভাবে পৌঁছেছে?

আমি স্ট্যাক ওভারফ্লোতে অনুরূপ প্রশ্ন পোস্ট করেছি , কিন্তু কোনও প্রতিক্রিয়া পাইনি। এটি যদি অন্য ব্যক্তির পক্ষে খুব অল্প বিষয় মনে হয় তবে আমি এটি বন্ধ করে দিতে সমর্থন করতে পারি।


4
এ জোএল Lawhead GeospatialPython.com কিছুদিনের জন্য shapefile রহস্য সমাধানে কাজ করা হয়েছে।
চাদ কুপার

একেবারে সম্পর্কিত নয়, তবে ঝরঝরে! আমি আশা করি এটি বেরিয়ে আসবে।
canisrufus

উত্তর:


28

আর্টভিউজের বিকাশের সাথে শেফফাইলগুলির বিকাশ একত্রে ছিল যা বিশেষত প্ল্যাটফর্মটি স্বাধীন হওয়ার জন্য ডিজাইন করা হয়েছিল। (আসলে, এটি এর অবক্ষয় হিসাবে পরিণত হয়েছিল: "নিউরোন ডেটা" নামে একটি প্ল্যাটফর্মের স্বাধীন জিইউআইতে বিকাশিত একটি ইন্টারফেসের উপর নির্ভর করে এটি অনেকগুলি উইন্ডোজ সক্ষমতার সুবিধা নিতে পারে না It এটি সমস্ত সিস্টেমের মধ্যে সবচেয়ে খারাপের প্রতিফলন ঘটায় up এর জন্য বিপণন করা হয়েছিল)) যদিও শেফফাইলের স্পেসিফিকেশন প্রথম থেকেই অদ্ভুত ছিল, তবে এটি এই নকশার কাঠামোর মধ্যে একটি লুপ ধারণা তৈরি করেছে: কারণ শেফফিলগুলি অনেকগুলি প্ল্যাটফর্মের জন্য তৈরি করা হয়েছিল, তাদের স্পেসিফিকেশনটি তাদের কোনওটির পক্ষে উচিত নয় এবং তাই সমানভাবে বেহাল হওয়া উচিত should সকল প্ররোচনার প্রোগ্রামারদের কাছে।

দ্বিতীয় প্রশ্নটি সত্য নয় এমন একটি অনুমানের ভিত্তিতে প্রদর্শিত হবে। উদাহরণস্বরূপ, "ফাইলের দৈর্ঘ্য" ক্ষেত্রটি প্রধান শিরোনামে বাইসেট 24 এ প্রদর্শিত হবে এবং এটি একটি (স্বাক্ষরিত) ফোর-বাইট (32 বিট) পূর্ণসংখ্যা, কারণ এটি 2 ^ 31- অবধি দৈর্ঘ্যের প্রতিনিধিত্ব করতে হবে 1। এটির আগে একটি চার-বাইট "ফাইল কোড" এবং পাঁচটি ফোর-বাইট ক্ষেত্র ভবিষ্যতের ব্যবহারের জন্য সংরক্ষিত রয়েছে: যখন আপনি এই জাতীয় স্থান সংরক্ষণ করেন অবশ্যই আপনি ক্ষেত্রগুলি যথাসম্ভব বড় করে তুলতে চান, যা সেই সময় সর্বাধিক সম্ভব নমনীয়তা বজায় রাখতে 32 বিট ছিল। এটি শব্দের সীমানায় কোনও ফাইলগুলিতে সংখ্যাসূচক ক্ষেত্রগুলি সারিবদ্ধ করতে সহায়তা করে:


2
:) ঠিক আমি খুঁজছেন ছিল কি. যখন আমি বলি যে "ফাইলের দৈর্ঘ্য" ক্ষেত্রটি "16-বিট শব্দের মধ্যে রেকর্ড করা হয়েছে", আমি যা বলার চেষ্টা করছি তা হচ্ছে 32-বিট পূর্ণসংখ্যার মান 16-বিট শব্দের মধ্যে ফাইলের দৈর্ঘ্য রেকর্ড করে। (বৈশিষ্টটি থেকে: "ফাইলের দৈর্ঘ্যের মান হ'ল 16-বিট শব্দের মধ্যে ফাইলের মোট দৈর্ঘ্য")। দেখে মনে হচ্ছে এটি 2 * 2 ^ 31-1 এর বাইট দৈর্ঘ্যের প্রতিনিধিত্ব করতে পারে যা প্রায় 4 জিবি বলে মনে হচ্ছে। .Xx ফাইলের মানগুলির ক্ষেত্রেও এটি একই। দেখে মনে হচ্ছে এটি 2 * 2 ^ 31-1 বাইট পর্যন্ত ফাইলের দৈর্ঘ্য সমর্থন করতে সক্ষম হওয়া উচিত। আমি কী মিস করছি?
canisrufus

ভাল কথা - আমি এটি মিস করেছি। প্রকৃতপক্ষে, নকশাটি সহজেই চার- বাইট শব্দের ক্ষেত্রে ফাইলের দৈর্ঘ্য এবং অফসেট (.shx ফাইলের পয়েন্টার) তৈরি করতে পারে , যার ফলে .shp ফাইলটির সম্ভাব্য আকার 4 * (2 ^ 31-1) বাড়িয়েছে (প্রায় 8 বিলিয়ন বাইট) তারা কেন দ্বি-বাইট শব্দ বেছে নিয়েছিল, এমনকি স্বাক্ষরযুক্ত পূর্ণসংখ্যাগুলি যেখানে কেন স্বাক্ষরযুক্ত পূর্ণসংখ্যা উভয়ই বেশি উপযুক্ত এবং দ্বিগুণ স্টোরেজ সরবরাহ করে তা কেন তারা ধারাবাহিকভাবে কেন ব্যবহার করে তা আমার কোনও ধারণা নেই ।
whuber

1
আমি বিস্মিত হই যদি সেই সময় ব্যবহৃত 16-বিট কম্পিউটারগুলির সাথে 16-বিট বিজোড়নটি করতে হয়, যেখানে নেটিভ int16-বিট ছিল।
মাইক টি

এটি সর্বদা একটি সম্ভাবনা, @ মাইক। তবে, এমনকি ৮০২28 PC পিসি (সি। 1984) স্থানীয়ভাবে 32-বিট ইনটকে সমর্থন করে - তারা তাদের সাথে পাটিগণিত করতে রেজিস্টার জোড় ব্যবহার করত।
whuber

5
একজন এসরির সহকর্মী বলেছেন যে তিনি মনে করেন ইন্ডিয়ান-নেসের মিশ্রণটি ইচ্ছাকৃতভাবে করা হয়েছিল। ক্রস-প্ল্যাটফর্ম সমস্যার কারণে আমরা বিকাশকারীরা একেবারে এটি পরিচালনা করতে পারি of তবে, অবশ্যই এটি সমস্ত অ্যাপোক্রিফাল।
মেকনেডি

10

এই উত্তরগুলি আরও কিছু জানেন কিন্তু তারা কথা বলছেন না।

আমি অনিবন্ধিত এসবিএন এবং এসবিএক্স ফাইলগুলি ডিকোড করার জন্য যে দলটির সাথে কাজ করছি সেগুলি আরও অনেক অদ্ভুততা আবিষ্কার করেছে যা একই সাথে একই সাথে আরও উদ্ভট।

শেফফাইল স্ট্রাকচারগুলির বেশিরভাগই যৌক্তিক এবং খুব দক্ষ যা ইএসআরআই বিকাশকারীদের মাধ্যমে চিন্তাভাবনা করে suggest এটি তাদের মতো একগুচ্ছ স্মার্ট বিকাশকারীকে এক পাগল thrownুকেছিল।

অন্যান্য পোস্টগুলির পরামর্শ অনুসারে বিজোড়গুলি সম্ভবত আমাদের কাছে বিদেশী মেশিন বা ভাষার প্রয়োজনীয়তার ফলাফল।

আমি সর্বদা সন্দেহ করি যে 16-বিট শব্দগুলি স্থান বাঁচানোর এক সহজ উপায়। আপনি দেখতে পাবেন যে ফাইলগুলি পরিচালনা করার সময় আপনাকে 16-বিট শব্দের মান ধরে রাখতে হবে। স্থান বাঁচাতে মান গণনা করার কৌশলটি আজও বাইনারি ফর্ম্যাটে সাধারণ। তবে মাইকের নেটিভ ইনটেকশন পরামর্শটিও ঠিক তেমন সম্ভাবনা।

এন্ডিয়ান-উল্টানো কেবল অদ্ভুত। কারওরই ভালো উত্তর নেই যা আমি দেখেছি।

ডিবিএফ ফর্ম্যাটটি ডিবেস III ফর্ম্যাট থেকে ছিন্ন হয়ে 1960 এর দশকে উত্পন্ন হয়েছিল। এটি তখন থেকেই ব্যাপকভাবে ব্যবহৃত হয়ে আসছে এবং ফক্সপ্রো এবং এক্সবেস সহ অন্যান্য নামে পাওয়া যায়।

শেফফাইল ফর্ম্যাটটির ত্রুটি, বিজোড়তা এবং সীমাবদ্ধতা সত্ত্বেও এটি জিআইএসের ক্ষেত্র এবং তার চারপাশে একগুঁয়েভাবে জিদ ধরে। এটিকে প্রতিস্থাপনের অন্যান্য প্রতিটি প্রচেষ্টা সাধারণ ভেক্টর স্টোরেজ বা খুব বেশি মালিকানার জন্য খুব বেশি ফুলে উঠেছে। এমনকি ইএসআরআই ভেবেছিল শেফফিলগুলি এমন একটি খেলনা হবে যা আর্কিআনএফও, কভ্রেজ এবং জিওডাটাবেসগুলির দিকে নতুনদের দিকে অগ্রসর করবে। ফর্ম্যাটটি বন্ধ হওয়ার সাথে সাথে ইন্টারনেটের অনেক কিছুই ছিল।

আমি pyshp লেখা অনেক শিখেছি। একটি পার্সার লেখা একটি ফর্ম্যাট শেখার দুর্দান্ত উপায়।


হুম। ভাল উত্তর. আমি বুঝতে পারি না যে 16-বিট শব্দের ব্যবহার কীভাবে স্থান বাঁচায়। আমার উদ্দেশ্যগুলির জন্য (জাভাস্ক্রিপ্টে অ্যারেবফারভিউগুলি তৈরি করা), এগুলি যা করে তা আমাকে সঠিকভাবে অফসেট পেতে দুটি দিয়ে গুণতে বাধ্য করে: আমি কোনও লাভের জন্য অতিরিক্ত চক্র জ্বালিয়ে দিচ্ছি। আপনি বিস্তারিত বলতে হবে?
canisrufus

1
হ্যাঁ - যেহেতু তারা স্বাক্ষরিত ইনটগুলি ব্যবহার করেছে সেগুলি মানগুলির উপরের প্রান্তটি 32,767 হবে তাই তারা 4 এর পরিবর্তে 2-বাইটে আরও বড় সংখ্যা সঞ্চয় করতে পারে আমি বলেছি 16 বিট শব্দের জন্য নির্ধারিত মানগুলি হ'ল মানগুলি যা আপনি ধরে রেখেছেন পড়া এবং লেখার ক্রিয়াকলাপের জন্য শেফফিলের সাথে কাজ করার সময় র‌্যাম। দ্বৈত স্থানগুলিতে স্থান সংরক্ষণের জন্য একটি প্রকল্প নিয়ে আসা (যা আমি অন্যান্য বাইনারি ফর্ম্যাটে দেখেছি) সর্বদা কুৎসিত এবং জটিল। সুতরাং তারা কেবলমাত্র ডাটা আকারের মানগুলির জন্য একটি সাধারণ স্কিমের সাথে আটকে আছে।
জিওস্প্যাটিয়াল পাইথন ডটকম

এছাড়াও - আমি shx ফাইলগুলিতে আবিষ্কার করেছি যা আমাকে প্রথমে স্ট্যাম্প করেছিল। SHX ফাইলগুলিতে 256x256 পূর্ণসংখ্যার গ্রিডে ম্যাপযুক্ত বৈশিষ্ট্যগুলির জন্য সীমাবদ্ধ বাক্স রয়েছে। এই কৌশলটি সূচকে সাধারণ তবে ছোট গ্রিডে নয়। তারা স্থানাঙ্কগুলির পরিবর্তে স্থানাঙ্কগুলিকে 1-বাইট চর হিসাবে সংরক্ষণ করে। এজন্য গ্রিডটি কেবল 256x256 is 1990 এর দশকের জন্য এমনকি এখন মেমরির সাথে সরল কৃপণ হয়ে উঠছে! আরও অনেক কার্যকারিতা অবশ্যই রয়েছে একটি সূচক ব্যবহার করে অংশগুলির অন্তর্নিহিত গোষ্ঠীকরণের মতো। আপনি ঠিক বলেছেন - এই কৌশলগুলি প্রোগ্রামারকে আরও বোঝা চাপিয়ে দেয়। সুতরাং মেমরির ব্যবহার অবশ্যই একটি অগ্রাধিকার ছিল।
জিওস্প্যাটিয়াল পাইথন ডটকম

1
ইয়াহ, আমি তোমার লেখা পড়েছি আপনি সেইটির উপর প্রভুর ভাল কাজ করছেন;) আমি অধীর আগ্রহে আপনার চূড়ান্ত বিশ্লেষণের অপেক্ষায় রয়েছি। 16-বিট ইস্যু সম্পর্কিত, আমি নিশ্চিত নই যে আপনার পয়েন্টটি ধরেছে। ১. এসএইচপি এবং এসএইচএক্স ফাইলগুলিতে কোনও 16 বিট ক্ষেত্র নেই, যদি না আমি ভুলভাবে ভুল হয়ে থাকি। ২. বিট মানগুলির পরিবর্তে ১--বিট মানগুলির প্রতিনিধিত্ব করলে বর্ণনামূলক দৈর্ঘ্য দ্বিগুণ হয় (২ * ২ ^ 15), যা তারা স্বাক্ষরবিহীন ইন্ট (2 ^ 16) ব্যবহার করে কেবল অর্জন করতে পারত। এটি শেষ পর্যন্ত কোনও স্থান সাশ্রয় করছে না।
canisrufus

আপনি যখন "মেমরির ব্যবহার" উল্লেখ করেন তখন আপনি র্যাম বা ডিস্ক বোঝাচ্ছেন কিনা তা বলা শক্ত। নব্বইয়ের দশকের গোড়ার দিকে, একটি 2 জিবি ড্রাইভ এবং 16-32 এমবি র‌্যাম ছিল বেশ উচ্চ-শেষ: কিছু ফাইল স্থান (বা নেটওয়ার্ক ব্যান্ডউইথ) সংরক্ষণ করা এখনও গুরুত্বপূর্ণ হবে। একজন দায়িত্বশীল সফটওয়্যার ইঞ্জিনিয়ার তাদের ভবিষ্যতের সময়-স্থানের ট্রেড অফের গ্রাহকদের তাদের পছন্দের বিষয়গুলির মধ্যে নিহিততার মধ্যে দিয়ে সাবধানতার সাথে চিন্তা করতে চান; অনড় দৃষ্টিতে আমি তাদের সন্দেহের সুবিধা দেব যদি না পছন্দটি স্পষ্টতই, ধ্বংসাত্মকভাবে অদক্ষ হয়।
whuber

5

এটি আমার নিন।

শেফিল ফর্ম্যাটটি সম্ভবত আরসি / আইএনএফও থেকে বিকশিত হয়েছিল যার ফোরট্রান / PR1ME উত্স থেকে ইতিহাস রয়েছে। সমস্ত এআরসি / আইএনএফও ফর্ম্যাটগুলিতে এই 100 বাইট শিরোনাম এবং ফাইল কোড এবং ফাইলের দৈর্ঘ্যের বিগ শেষত্ব (যেমন কভারেজ, টিআইএন) রয়েছে।

যখন আর্টভিউ ১-এর জন্য শেফিলগুলি তৈরি করা হয়েছিল, তখন ইএসআরআই মাইক্রোসফ্ট উইন্ডোজ বাজারে প্রবেশের দিকে মনোনিবেশ করেছিল এবং শেফিল ফর্ম্যাটটির বাকী অংশগুলি পিসিগুলির সামান্য এন্ডিয়ান হওয়ার দিকে খুব বেশি মনোযোগ দেয়।

অন্তর্নিহিততার মধ্যে অবিচ্ছিন্ন পরিবর্তন হ'ল সম্ভবতঃ প্লাটফর্মটি ভেঙে ফেলার আশা করার আগেই উত্তরাধিকার সূত্রকে সমর্থন করার প্রয়োজন ছিল।


এটি প্রশংসনীয় শোনাচ্ছে। অন্তর্দৃষ্টি জন্য আপনাকে ধন্যবাদ!
whuber

এন্ডিয়নেস সম্পর্কে এটি আমার প্রিয় অনুমান। এখন ঠিক আমাদের দরকার ড্যাঞ্জারমন্ড "দ্য ইএসআরআই টেল অল, টেকনিক্যাল এডিশন" প্রকাশ করার জন্য আপনি ঠিক আছেন কিনা তা দেখার জন্য!
canisrufus

2
যদি এআরসি / আইএনএফও ফর্ম্যাট থেকে শেফফাইল ফর্ম্যাটটি বিকশিত হয় তবে এটি v7 এর তুলনায় যথেষ্ট আগে ছিল। 1994 সালে যখন আমি ইএসআরআইতে শুরু করেছি, এভি 2 ইতিমধ্যে ছিল, এবং এটিসি / আইএনএফও 7-র জন্য উন্নয়ন কাজ চলছে।
মেকনেডি

ভাল কথা, মেলিতা। এই জবাবটির ত্রুটি - কিছু ফর্ম্যাট নির্বাচনের পরিণামে ফোর্টরান উত্স থাকতে পারে - এটি এখনও মূল আর্ক এবং তথ্য অ্যাপ্লিকেশনগুলিতে ফিরে আসার পথে সত্য হবে।
হোবার

ধন্যবাদ @ মেকনেডি, আমি v7 এর রেফারেন্স সরিয়ে দিয়েছি। আমার এখনও সেই দিনগুলি মনে আছে যে আসল এআরসি / আইএনএফও ব্যবহারকারী ম্যানুয়ালগুলি (v3 .. v6 যুগ) এর শিরোনাম ছিল যা আমি বিশ্বাস করি যে ফরটান কোড থেকে নেওয়া হয়েছিল।
স্টিফান কোয়ান

4

আমি সবসময় ধরেই নিয়েছিলাম যে এন্ডিয়ান বিভাজনটি দুটি দল সান ওয়ার্কস্টেশনগুলিতে এবং অপরটি পিসিতে রয়েছে এবং তাদের উন্নয়ন প্রক্রিয়া শেষ হওয়ার আগ পর্যন্ত মিলিত না হওয়ার কারণে হয়েছিল।

আমি আসলে কি ঘটেছে তা জানতে আগ্রহী।


3
আমি মনে করি ইএসআরআই এর চেয়ে কিছুটা সমন্বিত ছিল। আসলে, যদি কিছু হয় তবে তাদের সফ্টওয়্যারটির চেহারা দেখার প্রবণতা রয়েছে যেহেতু এর নকশায় অনেক বেশি কমিটি জড়িত রয়েছে।
হোয়বার

0

আমি মনে করি কোথাও ফিরে আমি dbf / ফক্সপ্রো উত্স সম্পর্কে কিছু শুনেছি।
এটা আমি এখনও ছিল একটি অদ্ভুত স্বপ্ন হতে পারে।


5
এখানে প্রশ্নে থাকা .shp এবং .shx অংশগুলি সম্পূর্ণরূপে .dbf ফর্ম্যাটের জন্য ডিজাইন করা হয়েছিল, যা প্রায় 20 বছর আগে ছিল।
শুশুক

0

আপনার বুঝতে হবে শেফ ফাইলগুলি প্রায় 20 বছর আগে প্রবর্তিত হয়েছিল, সেই সময়টিতে একটি অসামঞ্জস্যপূর্ণ এবং খারাপভাবে ডিজাইন করা ফাইল ফর্ম্যাটগুলির একটি অগণিত ছিল, সুতরাং শেফফিলগুলি কোনও ব্যতিক্রম নয়। আমি নিজে একটি শেফফাইল পার্সার লিখেছি এবং আমাকে বলতে হবে যে নিজেরাই শেফফিলের (। এসএইচপি) তুলনায় ডিবিএফ ফর্ম্যাটটি পার্স করার ক্ষেত্রে আমার আরও অনেক সমস্যা হয়েছিল।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.