चूंकि आपने कहा था कि आप जिस बहुभुज में रूचि रखते हैं, उसके लिए बहुभुजों को प्रतिच्छेद करने का एक समूह मिलता है, आप चाहते हैं कि जिसे "बहुभुज उपरिशायी" कहा जाए।
यह ठीक नहीं है कि आदम का समाधान क्या कर रहा है। अंतर देखने के लिए, एबीसी चौराहे की इस तस्वीर पर एक नज़र डालें:
मेरा मानना है कि एडम का समाधान एक "एबी" बहुभुज बनाएगा जो "एबी! सी" और "एबीसी" दोनों के क्षेत्र को कवर करता है, साथ ही साथ "एसी" बहुभुज जो "एसी! बी" और "एबीसी" को कवर करता है, और एक "ए" बीसी "बहुभुज जो कि" बीसी! ए "और" एबीसी "है। तो "एबी", "एसी", और "बीसी" आउटपुट बहुभुज सभी "एबीसी" क्षेत्र को ओवरलैप करेंगे।
एक बहुभुज उपरिशायी गैर-अतिव्यापी बहुभुज का उत्पादन करती है, इसलिए AB! C एक बहुभुज होगा और ABC एक बहुभुज होगा।
PostGIS में बहुभुज ओवरले बनाना वास्तव में बहुत सीधा है।
मूल रूप से तीन चरण हैं।
चरण 1 लाइनवर्क निकाल रहा है [ध्यान दें कि मैं बहुभुज की बाहरी रिंग का उपयोग कर रहा हूं , यदि आप छेदों को सही ढंग से संभालना चाहते हैं तो यह थोड़ा अधिक जटिल हो जाता है]:
SELECT ST_ExteriorRing(polygon_col) AS the_geom FROM my_table) AS lines
चरण 2 लाइनवर्क "नोड" करने के लिए है (प्रत्येक चौराहे पर एक नोड का उत्पादन करें)। जेटीएस जैसे कुछ पुस्तकालयों में "नोडर" कक्षाएं हैं जिनका उपयोग आप ऐसा करने के लिए कर सकते हैं, लेकिन पोस्टजीआईएस में ST_Union फ़ंक्शन आपके लिए यह करता है:
SELECT ST_Union(the_geom) AS the_geom FROM (...your lines...) AS noded_lines
चरण 3 सभी संभव गैर-अतिव्यापी बहुभुज बनाने के लिए है जो उन सभी लाइनों से आ सकते हैं, जो ST_Polygon फ़ंक्शन द्वारा किए गए हैं :
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
)
)
मैं ST_Dump का उपयोग कर रहा हूं क्योंकि ST_Polygonize का आउटपुट एक ज्यामिति संग्रह है, और यह (आमतौर पर) एक तालिका है जहां प्रत्येक पंक्ति बहुभुज ओवरले बनाने वाले बहुभुज में से एक है, के लिए अधिक सुविधाजनक है।