मैं कुछ दिनों के लिए एक समस्या से जूझ रहा हूं और महसूस किया है कि जब पोस्टजीआईएस (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) मिलता है।