আমি কয়েক দিন ধরে একটি সমস্যার সাথে লড়াই করছি এবং বুঝতে পেরেছি যে বিষয় পোস্টজিআইএসে ছেদ করার সময় অনেকেই আটকে যায় (v2.5)। সে কারণেই আমি আরও বিস্তারিত এবং জেনেরিক, সাধারণ প্রশ্ন জিজ্ঞাসা করার সিদ্ধান্ত নিয়েছি।
আমার নিম্নলিখিত টেবিল রয়েছে:
DROP TABLE IF EXISTS tbl_foo;
CREATE TABLE tbl_foo (
id bigint NOT NULL,
geom public.geometry(MultiPolygon, 4326),
att_category character varying(15),
att_value integer
);
INSERT INTO tbl_foo (id, geom, att_category, att_value) VALUES
(1, ST_SetSRID('MULTIPOLYGON (((0 6, 0 12, 8 9, 0 6)))'::geometry,4326) , 'cat1', 2 );
INSERT INTO tbl_foo (id, geom, att_category, att_value) VALUES
(2, ST_SetSRID('MULTIPOLYGON (((5 0, 5 12, 9 12, 9 0, 5 0)))'::geometry,4326), 'cat1', 1 );
INSERT INTO tbl_foo (id, geom, att_category, att_value) VALUES
(3, ST_SetSRID('MULTIPOLYGON (((4 4, 3 8, 4 12, 7 14,10 12, 11 8, 10 4, 4 4)))'::geometry,4326) , 'cat2', 5 );
দেখে মনে হচ্ছে:
আমি পিতামাতার বহুভুজগুলির ছেদগুলির ভিত্তিতে সমস্ত শিশু বহুভুজ পেতে চাই। ফলাফলের জন্য, এটি প্রত্যাশিত হবে:
- তাদের মধ্যে কোনও ওভারল্যাপ ছাড়াই শিশু বহুভুজ।
- তাদের পিতামাতার বহুভুজের মান যোগ করে একটি কলাম,
- একটি কলামে একটি বিভাগের পিতৃ বহুভুজগুলির গণনা রয়েছে
- অন্য একটি বিভাগের গণনা সহ একটি কলাম
- নীচের নিয়মের উপর ভিত্তি করে শিশু বহুভুজের বিভাগযুক্ত একটি কলাম: - যদি সমস্ত পিতামাতার বহুভুজ এক শ্রেণির হয় তবে শিশু বহুভুজেরও এই শ্রেণি থাকে। অন্যথায়, শিশু বহুভুজের বিভাগটি একটি তৃতীয় বিভাগ।
সুতরাং এটি দেখতে এটির মতো লাগবে:
সুতরাং, শেষ পর্যন্ত, আউটপুট উত্পন্ন টেবিল (এই উদাহরণস্বরূপ) 7 সারি (7, অ-ওভারল্যাপিং, সন্তানের বহুভুজ), এর কলাম ধারণকারী থাকবে category
, sum_value
, ct_overlap_cat1
,ct_overlap_cat2
নিম্নলিখিত কোডটি আমি শুরু করেছি, আমাকে পৃথক ছেদগুলি দেয়, একজন পিতা বা মাতার সাথে অন্যের তুলনা করে।
SELECT
(ST_Dump(
ST_SymDifference(a.geom, b.geom)
)).geom
FROM tbl_foo a, tbl_foo b
WHERE a.ID < b.ID AND ST_INTERSECTS(a.geom, b.geom)
UNION ALL
SELECT
ST_Intersection(a.geom, b.geom) as geom
FROM tbl_foo a, tbl_foo b
WHERE a.ID < b.ID AND ST_INTERSECTS(a.geom, b.geom);
আমি এই উল্লিখিত কোডটির ফলাফলের মধ্য দিয়ে কীভাবে পুনরাবৃত্তভাবে লুপ করব, যে, ওভারল্যাপ বহুভুজ সংখ্যাগুলির চেয়ে পৃথক আমি সর্বদা তার 'ক্ষুদ্রতম' (শিশু) বহুভুজ (চিত্র 2) পাই?