পোস্টজিআইএস বহুভুজ জ্যামিতি - নন-ক্লোজড রিংগুলিতে সহায়তা করুন


10

আমি এরিক ওয়েস্ট্রা ( অ্যামাজন লিঙ্ক ) র সুপার-দুষ্ট বই 'পাইথন জিওপ্যাটিয়াল ডেভলপমেন্ট' এর একটি অনুলিপি তুলেছি এবং আমি এটির মাধ্যমে কাজ করছি। বর্তমানে, জিওএসএফএইচএস উপকূলীয়রেখার ডেটা একটি জিওএসএইচএইচএস উপকূলরেখার ডেটা একটি জিওএসপিএইচ ডেটাবেজে পোস্টজিআইএস ডেটাবেজে লোড করতে শিখিয়ে চলেছি osp

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

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

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

আমি ভাবছিলাম যে সেখানকার কারও কাছে কি আছে:
(ক) সম্ভবত একই বইটি ব্যবহার করেছে, একই সমস্যায় আটকে গেছে, এবং আমার কাছে উত্তর আছে?
(খ) অনুরূপ সমস্যার মুখোমুখি হয়েছি এবং এর সমাধান খুঁজে পেয়েছি?
(গ) ব্যর্থ হয়ে পোস্টজিআইএসে লোড করার আগে বৈধ জ্যামিতি নিশ্চিত করার জন্য কিছু 'সেরা অনুশীলন' পরামর্শ রয়েছে?

আপডেট: একজন সহকর্মী পরামর্শ দিয়েছেন যে 'নন-ক্লোজড রিংগুলি' সমস্যাটি অন্য কোনও সমস্যার লক্ষণ হতে পারে। এটা সম্ভব যে আমার পোস্টজিআইএস / পোস্টগ্রিএসকিউএল কনফিগারেশনটির আকার সীমা রয়েছে (সন্নিবেশ লেনদেন, প্যাকেট প্রাপ্ত, পাঠ্য স্ট্রিং ইত্যাদি)।

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

সুতরাং এটি অবৈধ জ্যামিতি থ্রেডের চেয়ে পোস্টজিআইএস ডাটাবেস অ্যাডমিন থ্রেডের বেশি হতে পারে।


আপনি কি একটি নমুনা shp ফাইল সরবরাহ করতে পারেন?
মারিও মিলার

কোনও উদ্বেগ নেই G জিএসএইচএইচএস শোরলাইন ডেটা আমি ব্যবহার করছি এটি এখান থেকে একটি 96 এমবি ডাউনলোড । আমি যে ওয়ার্ল্ড বর্ডার ডেটা ব্যবহার করছি তা হ'ল থিম্যাটিকম্যাপিং.
টাইমি

উত্তর:


6

আমি আপনার ডেটা এবং বইয়ের উদাহরণটি দেখেছি, সমস্যাটি হ'ল বইটিতে প্রক্রিয়াধীন ডেটাতে তিনটি অবৈধ বহুভুজ রয়েছে:

GSHHS_l_L1.shp

আইডি = 92-ডাব্লু

POLYGON ((-180.0 71.514793999999995,-179.69008299999999 71.577888999999999,-178.648889 71.577416999999997,-178.40644399999999 71.549916999999994,-177.406306 71.244167000000004,-177.877444 71.022889000000006,-179.500111 70.863749999999996,-179.93011100000001 70.979583000000005,-180.0 70.962072000000006))

আইডি = 486-ডাব্লু

POLYGON ((-180.0 -16.799126,-179.84419399999999 -16.691278,-179.80041700000001 -16.789193999999998,-179.850472 -16.878361000000002,-180.0 -16.959561))

GSHHS_l_L2.shp

আইডি = 7333-ডাব্লু

POLYGON ((-180.0 65.393473,-179.76583299999999 65.428332999999995,-179.95416700000001 65.385555999999994,-179.90972199999999 65.316389,-180.0 65.321635))

এটি উদাহরণস্বরূপ, ডাটাসেট থেকে সেই বহুভুজগুলি মুছে ফেলা সহজ হবে বা আপনার কোডটিতে বিবৃতি দেওয়া থাকলে একটি যুক্ত করা সহজ Because

if geometry.IsValid():
       cursor.execute("INSERT INTO gshhs (level, geom) VALUES (%s, ST_GeomFromText(%s, 4326))", (level, wkt))

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

যদি আপনি দাতব্য বোধ করছেন, তবে প্রক্রিয়াটির পরবর্তী পদক্ষেপের জন্য আপনার কাছে কি কোনও ভাল সমাধান রয়েছে, যা অবৈধ বহুভুজকে সংশোধন করছে? আমি ওজিআর এর। ক্লোসারিং () ফাংশনটি ব্যবহার করে চেষ্টা করেছি, তবে কোন ফলসই হয়নি। এটি কেবল ফাংশন কলটিকে উপেক্ষা করেছে, আমার ধারণা।
টিমি

আমি "বাফার ট্রিক" ( ওয়ার্কশপস.ওপেনজেও.আর.পোস্টজিস- সিন্ট্রো / ভারিডিটি.চ.টি.এম.এল) সুড়সুড় ও ওজিআর দিয়ে ব্যবহার করার চেষ্টা করেছি কিন্তু কোন সাফল্য পাইনি। অকার্যকর বহুভুজ পড়ুন এবং ogr বাফার অপারেশন করবেন না, বর্তমানে কেন জানি না। আমি যদি উত্তরটিতে হোঁচট খায় তবে আমি আপনাকে জানাব। এই সমস্যাটি নিয়ে অন্য কারও বেশি সাফল্য থাকতে পারে। দুঃখিত।
মারিও মিলার

আমার মনে হয় এখন আমার বহুভুজের বৈধতা কাজ করছে। আমি মনে করি যে আমি ওজিআর এর। ক্লসআরিংস () ফাংশনটি ভুল উপায়ে ব্যবহার করছি। আমাকে বহুভুজের একটি পদ্ধতি হিসাবে বলা হয়েছিল (অর্থাত্ পলি.ক্লোসারিংস ())। পরিবর্তে, আমাকে বহুভুজ থেকে লিনিয়ার রিংটি বের করতে হয়েছিল এবং তারপরে এটি চালানো হয়েছিল (অর্থাত্ lr = বহু.GetGeometryRef (0); lr.CseseRings ())। ফলাফলগুলি পোস্টজিআইএস-এ সাফল্যের সাথে inোকানো হচ্ছে, এবং আমি কিউজিসে 3 সমস্যা বহুভুজগুলি ব্যবহার করতে পারি কারণ কোনও উদ্বেগ নেই। সমস্ত বহুভুজের জন্য বৈধতা যাচাই করার জন্য একটি সামান্য গণ্য ব্যয় আছে।
টিমি
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.