যেহেতু আপনি বলেছিলেন যে প্রতিটি বহুভুজকে আপনি আগ্রহী তার জন্য ছেদ করার বহুভুজ একটি গ্রুপ পেয়েছেন, তাই আপনি "বহুভুজ ওভারলে" হিসাবে চিহ্নিত এমনটি তৈরি করতে চাইতে পারেন।
অ্যাডামের সমাধানটি ঠিক এটি করছে না। পার্থক্যটি দেখতে, একটি এবিসি ছেদ করার এই চিত্রটি একবার দেখুন:
আমি বিশ্বাস করি যে অ্যাডামের সমাধানটি একটি "এবি" বহুভুজ তৈরি করবে যা "এবি! সি" এবং "এবিসি" উভয় অঞ্চল জুড়ে, পাশাপাশি "এসি" বি "এবং" এবিসি "জুড়ে একটি" এসি "বহুভুজ এবং একটি" বিসি "বহুভুজ যা" বিসি! এ "এবং" এবিসি "। সুতরাং "এবি", "এসি" এবং "বিসি" আউটপুট বহুভুজগুলি সমস্ত "এবিসি" অঞ্চলকে ওভারল্যাপ করে।
একটি বহুভুজ ওভারলে নন-ওভারল্যাপিং বহুভুজ উত্পাদন করে, সুতরাং এবি! সি একটি বহুভুজ এবং এবিসি হবে একটি বহুভুজ।
পোস্টজিআইএসে বহুভুজ ওভারলে তৈরি করা আসলে বেশ সোজা is
মূলত তিনটি ধাপ রয়েছে।
পদক্ষেপ 1 লাইনওয়ার্ক নিষ্কাশন করা হয়েছে [নোট করুন যে আমি বহুভুজের বহিরাগত রিংটি ব্যবহার করছি , আপনি যদি সঠিকভাবে গর্তগুলি পরিচালনা করতে চান তবে এটি কিছুটা জটিল হয়ে উঠবে]:
SELECT ST_ExteriorRing(polygon_col) AS the_geom FROM my_table) AS lines
পদক্ষেপ 2 লাইনওয়ার্কটি "নোড" করা (প্রতিটি ছেদে নোড উত্পাদন করা)। মত কিছু লাইব্রেরি JTS "Noder" ক্লাস আপনি এই কাজ করতে ব্যবহার করতে পারেন, কিন্তু PostGIS মধ্যে ST_Union ফাংশন তোমার জন্য এটা আছে:
SELECT ST_Union(the_geom) AS the_geom FROM (...your lines...) AS noded_lines
পদক্ষেপ 3 হ'ল এস- পলজিওনাইজ ফাংশন দ্বারা সম্পন্ন সমস্ত লাইন থেকে আসা সমস্ত সম্ভাব্য অ-ওভারল্যাপিং বহুভুজ তৈরি করা :
SELECT ST_Polygonize(the_geom) AS the_geom FROM (...your noded lines...)
আপনি এই পদক্ষেপগুলির প্রত্যেকটির আউটপুট একটি টেম্প টেবিলের মধ্যে সংরক্ষণ করতে পারেন বা আপনি সেগুলি একক বিবৃতিতে একত্রিত করতে পারেন:
CREATE TABLE my_poly_overlay AS
SELECT geom FROM ST_Dump((
SELECT ST_Polygonize(the_geom) AS the_geom FROM (
SELECT ST_Union(the_geom) AS the_geom FROM (
SELECT ST_ExteriorRing(polygon_col) AS the_geom FROM my_table) AS lines
) AS noded_lines
)
)
আমি এস এসডাম্প ব্যবহার করছি কারণ এস এসপলিগোনাইজের আউটপুটটি জ্যামিতি সংগ্রহ এবং এটি প্রতিটি সারিটিতে বহুভুজগুলির মধ্যে একটি বহুভুজ যা একটি বহুভুজ ওভারলে তৈরি করে এমন একটি টেবিল রাখা (সাধারণত) বেশি সুবিধাজনক।