অবৈধ জ্যামিতির প্রভাবগুলি কী কী


15

আমি একটি পোস্টগিস ডাটাবেসে কিছু ডেটা আমদানি করেছি এবং কিছু জ্যামিতিগুলি অবৈধ হিসাবে প্রতিবেদন করা হয়েছে (এসT_IsValidReason স্ব-ছেদ বা রিং স্ব-ছেদটি প্রতিবেদন করে)।

আমি যে ক্যোয়ারীগুলি করছি তা এই জ্যামিতির অবৈধ দিক দ্বারা প্রভাবিত বলে মনে হচ্ছে না (আমি কেবলমাত্র ST_Distance কোয়েরি ব্যবহার করছি)।

জ্যামিতিগুলি অবৈধ থাকাকালীন কী কী জিনিসগুলি ভেঙে যায়?

এই জ্যামিতিগুলি কি "স্বয়ংক্রিয়ভাবে" (বাফার (জিওম, 0) বা ST_SimplifyPreserveTopology (জিম, 0.0001)) ঠিক করা কোনও বিকল্প?

উত্তর:


19

ত্রুটিযুক্ত ডেটা রাখা একটি খারাপ ধারণা, কারণ ব্যর্থতা কখন এবং কোথায় ঘটবে তা আপনি কখনই অনুমান করতে পারবেন না। তদ্ব্যতীত , ত্রুটিযুক্ত ডেটা হেইসেনব্যাগগুলি সৃষ্টি করতে পারে , এটি সবচেয়ে কুখ্যাত এবং মায়াময়ী বাগ।

আমি মনে করি যে অবৈধ জ্যামিতিগুলি সংরক্ষণের সম্ভাব্য ফলাফল নিয়ে আলোচনা করা কিছুটা অর্থহীন। এই বলে থাকার পরে, পরিণতিগুলি অন্তর্ভুক্ত করতে পারে:

  • ভুল ফলাফল (যে, আসল ST_Distanceভুল বা সাধারণ ভুল চিত্র ফিরিয়ে দেবে)
  • ডেটাবেস কর্মক্ষমতা সম্পর্কিত সমস্যা: ত্রুটিযুক্ত ডেটা রাখা ডেটাবেস কর্মক্ষমতা গুরুতরভাবে ক্ষতিগ্রস্থ করতে পারে এবং বিশাল লগ ফাইল তৈরি করতে পারে, কারণ প্রতিটি ফাংশন কল লগটিতে ত্রুটি লিখবে এবং সাধারণ ডাটাবেসের কাজ ব্যাহত করবে।
  • ডাটাবেস ক্র্যাশ।
  • অ্যাপ্লিকেশন ক্রাশ - হয় ডেটাবেস থেকে ত্রুটিযুক্ত ডেটা প্রাপ্তির কারণে বা অযৌক্তিক ফলাফল (নেতিবাচক দূরত্ব, উদাহরণস্বরূপ) প্রাপ্তির ফলে।
  • ভৌতিক আচরণ (উপরের লিঙ্কটি দেখুন)। এটি সবার নিকৃষ্ট পরিণতি। আপনার অদ্ভুত ঘটনা ঘটবে। মন্দা, তথ্য হ্রাস, ক্র্যাশ, অযৌক্তিক ফলাফল, দীর্ঘ বিরতি, কোন প্রতিক্রিয়াশীলতা এবং অন্যান্য অনেক অভিশাপ। আপনি এগুলিকে সন্ধান করতে বা তাদের পুনরুত্পাদন করতে সক্ষম নাও হতে পারেন, কারণ তারা প্রত্যেকে নথিভুক্তিতে "অপরিজ্ঞাত" বিভাগের আওতায় পড়ে।

আমার পরামর্শ - যদি ছোট বাফারগুলি আপনার ডেটা ধারাবাহিকতায় উল্লেখযোগ্যভাবে ক্ষতি না করে তবে উপরের যে কোনওটি ঘটতে রোধ করতে এগুলি ব্যবহার করুন। আপনার তথ্য বৈধ রাখুন।


আপনি কি ছোট বাফার ব্যবহারের বিষয়ে কিছুটা ব্যাখ্যা করতে পারেন? আমি কেমন করে ঐটি করি?
diciu

1
ST_Buffer(the_geom, 0.0000001)নিজের ছেদ করার কৌশলটি পারে। কিছুটা বড় জ্যামিতির পরিণতি গুরুতর না হলে কেবল এটি ব্যবহার করুন।
আদম মতান

1
আমার অভিজ্ঞতা হ'ল দূষিত ডেটা সংশোধন করা বেশ তদন্ত। যদিও এটি সময় সাশ্রয়ী, সাধারণত এটি চেষ্টা করার পক্ষে মূল্যবান worth ST_Buffer(the_geom, 0.0000001)কৌতুক স্পষ্টভাবে অনেক সাহায্য করে।
চৌ

জিনিসটি হচ্ছে ST_Buffer জ্যামিতিটি স্থির করে তবে ফলাফলটি আমি প্রত্যাশা করে না এমনটিই ঘটেনি - এই অবৈধ বহুভুজের জন্য এখানে ( ওপেনস্ট্রিটম্যাপ.আর / ব্রাউজ / ওয়ে / 51954364) এসT_Buffer কেবল উপরের বাম আয়তক্ষেত্রটি প্রদান করে। ST_SimplifyPreservTopology আমার যা প্রয়োজন তার কাছাকাছি মনে হচ্ছে (বৈধ জ্যামিতি তবে অবৈধ মূলের সাথে যতটা সম্ভব কাছাকাছি)। ST_SimplifyPreserveTopology ব্যবহার করে কোন ডাউনসাইড?
diciu

সেই জ্যামিতিটি MULTIPOLYGONএকক হিসাবে নয়, দুটি বহুভুজের একটি হিসাবে প্রক্রিয়া করা উচিত POLYGON। সম্ভব হলে মূল ডাব্লুটিটি পাওয়ার চেষ্টা করুন।
আদম মাতান

13

আপনি প্রথমে আপনার ডাটাবেসে প্রবেশ করে অবৈধ জ্যামিতিগুলিকে আটকাতে পারবেন। PostgreSQL / PostGIS ব্যবহারকারীদের জন্য, চেক সীমাবদ্ধতাগুলির সাথে এটি করা সহজ । উদাহরণস্বরূপ, public.my_valid_tableবহুভুত জ্যামিতির একটি কলাম সহ একটি সারণী বিবেচনা করুন geom, নিম্নলিখিত এসকিউএল / ডিডিএল ব্যবহার করুন:

ALTER TABLE public.my_valid_table
  ADD CONSTRAINT enforce_valid_geom CHECK (st_isvalid(geom));

দ্রষ্টব্য: এই সারণিতে সীমাবদ্ধতা প্রয়োগের আগে বৈধ বহুভুজ থাকতে হবে।

তারপরে যদি আপনি একটি অবৈধ জ্যামিতি সন্নিবেশ করানোর / যুক্ত করার চেষ্টা করেন তবে আপনি একটি ত্রুটি দেখতে পাবেন:

ERROR:  new row for relation "my_valid_table" violates check constraint "enforce_valid_geom"
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.