<div dir="auto"><div dir="auto"></div>Regina I have already followed what you have suggested after reading  this post <div dir="auto"><a href="https://blog.cleverelephant.ca/2019/07/postgis-overlays.html" target="_blank" rel="noreferrer">https://blog.cleverelephant.ca/2019/07/postgis-overlays.html</a> (the attached jpeg new_polygons was realized using such multistep procedure).</div><div dir="auto"><br></div><div dir="auto"><br></div><div dir="auto"><br></div><div dir="auto">My question is  about the different behaviour of ST_Union with lines and polygons and I am wondering if exists a more direct way of obtaining the final result.</div><div dir="auto"><br></div><div dir="auto">Probably there is an historical reason for this behaviour that I don't know.</div><div dir="auto"><br></div><div dir="auto">The multistep procedure requires to use St_Polygonize and, based on your experience,  is it able to correctly manage tables with millions of features?</div><div dir="auto"><br></div><div dir="auto">Would it be possible to use some functions provided by the topology extensions?</div><div dir="auto"><br></div><div dir="auto">The topological model does not allow overlaps between features within the same layer.</div><div dir="auto"><br></div><div dir="auto">Thanks for your patience.</div><div dir="auto"><br></div><div dir="auto">Antonio</div><div dir="auto"><br></div><div dir="auto"><br></div><div dir="auto"><br></div><div dir="auto"><br></div><div dir="auto"><div dir="auto"><br><div class="gmail_quote" dir="auto"><div dir="ltr" class="gmail_attr">Il Lun 23 Dic 2024, 23:52 Regina Obe <<a href="mailto:lr@pcorp.us" rel="noreferrer noreferrer" target="_blank">lr@pcorp.us</a>> ha scritto:<br></div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div lang="EN-US" link="blue" vlink="purple" style="word-wrap:break-word"><div><p class="MsoNormal"><span style="font-size:11.0pt">Best to keep conversation on the list.  Added back postgis-users.<u></u><u></u></span></p><p class="MsoNormal"><span style="font-size:11.0pt"><u></u> <u></u></span></p><p class="MsoNormal"><span style="font-size:11.0pt">I think what might do what you want here is combination of ST_Boundary, ST_Union, and ST_Polygonize<u></u><u></u></span></p><p class="MsoNormal"><span style="font-size:11.0pt"><u></u> <u></u></span></p><ol style="margin-top:0in" start="1" type="1"><li style="margin-left:0in"><span style="font-size:11.0pt">Get the linework of the polygons using ST_Boundary –  <a href="https://postgis.net/docs/ST_Boundary.html" rel="noreferrer noreferrer noreferrer" target="_blank">https://postgis.net/docs/ST_Boundary.html</a><u></u><u></u></span></li><li style="margin-left:0in"><span style="font-size:11.0pt">Union the linework – as you noted ST_Union when fed linestrings will create a multilinestring with splits at the junctions <a href="https://postgis.net/docs/ST_Union.html" rel="noreferrer noreferrer noreferrer" target="_blank">https://postgis.net/docs/ST_Union.html</a><u></u><u></u></span></li><li style="margin-left:0in"><span style="font-size:11.0pt">Then polygonise the linework -  <a href="https://postgis.net/docs/ST_Polygonize.html" rel="noreferrer noreferrer noreferrer" target="_blank">https://postgis.net/docs/ST_Polygonize.html</a>  (this is an aggregate that returns a geometry collection of all the polygons formed from the linework<u></u><u></u></span></li><li style="margin-left:0in"><span style="font-size:11.0pt">Use ST_Dump to dump out the individual polygons from the polygonize operation  <a href="https://postgis.net/docs/ST_Dump.html" rel="noreferrer noreferrer noreferrer" target="_blank">https://postgis.net/docs/ST_Dump.html</a><u></u><u></u></span></li></ol><p class="MsoNormal"><span style="font-size:11.0pt"><u></u> <u></u></span></p><p class="MsoNormal"><span style="font-size:11.0pt"><u></u> <u></u></span></p><p class="MsoNormal"><span style="font-size:11.0pt">WITH a(name, geom) AS ( VALUES ( 'A', ST_GeomFromText('POLYGON((0 0, 0 4, 4 4, 4 0, 0 0))') )<u></u><u></u></span></p><p class="MsoNormal"><span style="font-size:11.0pt">      , ( 'B', ST_GeomFromText('POLYGON((3 1, 3 3, 6 3, 6 1, 3 1))') )<u></u><u></u></span></p><p class="MsoNormal"><span style="font-size:11.0pt">      , ( 'C', ST_GeomFromText('POLYGON((3 -1, 3 2, 8 2, 8 -1, 3 -1))') )<u></u><u></u></span></p><p class="MsoNormal"><span style="font-size:11.0pt">    )<u></u><u></u></span></p><p class="MsoNormal"><span style="font-size:11.0pt">, b(geom) AS (SELECT ST_Union(ST_Boundary(a.geom)) AS geom FROM a)<u></u><u></u></span></p><p class="MsoNormal"><span style="font-size:11.0pt">SELECT (ST_Dump(ST_Polygonize( b.geom) )).geom<u></u><u></u></span></p><p class="MsoNormal"><span style="font-size:11.0pt">FROM b;<u></u><u></u></span></p><p class="MsoNormal"><span style="font-size:11.0pt"><u></u> <u></u></span></p><p class="MsoNormal"><span style="font-size:11.0pt"><u></u> <u></u></span></p><p class="MsoNormal"><span style="font-size:11.0pt"><u></u> <u></u></span></p><div style="border:none;border-left:solid blue 1.5pt;padding:0in 0in 0in 4.0pt"><div><div style="border:none;border-top:solid #e1e1e1 1.0pt;padding:3.0pt 0in 0in 0in"><p class="MsoNormal"><b><span style="font-size:11.0pt;font-family:"Calibri",sans-serif">From:</span></b><span style="font-size:11.0pt;font-family:"Calibri",sans-serif"> Antonio Valanzano <<a href="mailto:anvalanz@gmail.com" rel="noreferrer noreferrer noreferrer" target="_blank">anvalanz@gmail.com</a>> <br><b>Sent:</b> Monday, December 23, 2024 6:37 AM<br><b>To:</b> Regina Obe <<a href="mailto:lr@pcorp.us" rel="noreferrer noreferrer noreferrer" target="_blank">lr@pcorp.us</a>><br><b>Subject:</b> Re: ST_Union behaviour<u></u><u></u></span></p></div></div><p class="MsoNormal"><u></u> <u></u></p><div><div><p class="MsoNormal">Regina, thanks for the fast reply.<u></u><u></u></p></div><div><p class="MsoNormal"><u></u> <u></u></p></div><div><p class="MsoNormal">I am unioning 4 distinct polygons(see attached polygon_overlapping.jpeg) which present some overlapping (some areas with 2 overlapping polygons, 1 area with 3 overlapping polygons) and I would like to create a new table comprising all these polygons but splitted where they overlap. (see attached new_polygons.jpeg)<u></u><u></u></p></div><div><p class="MsoNormal"><u></u> <u></u></p></div><div><p class="MsoNormal">The four initial polygons are all valid as you can see from the results of the following query<u></u><u></u></p></div><div><p class="MsoNormal">SELECT <br>  id, <br>  ST_isValid(geom)<br>FROM chp02.prova_overlap;<br>-- 4 rows<br>"id" "st_isvalid"<br>1 true<br>2 true<br>3 true<br>4 true<u></u><u></u></p></div><div><p class="MsoNormal"><u></u> <u></u></p></div><div><p class="MsoNormal">I have also tried, as you suggested, the ST_UnaryUnion but the result is the same as ST_Union.<u></u><u></u></p></div><div><p class="MsoNormal"><u></u> <u></u></p></div><div><p class="MsoNormal">Antonio<u></u><u></u></p></div><div><p class="MsoNormal"> <u></u><u></u></p></div></div><p class="MsoNormal"><u></u> <u></u></p><div><div><p class="MsoNormal">Il giorno lun 23 dic 2024 alle ore 10:46 Regina Obe <<a href="mailto:lr@pcorp.us" rel="noreferrer noreferrer noreferrer" target="_blank">lr@pcorp.us</a>> ha scritto:<u></u><u></u></p></div><blockquote style="border:none;border-left:solid #cccccc 1.0pt;padding:0in 0in 0in 6.0pt;margin-left:4.8pt;margin-right:0in"><div><div><div><p class="MsoNormal"><span style="font-size:11.0pt">Are you unioning one geometry or many?</span><u></u><u></u></p><p class="MsoNormal"><span style="font-size:11.0pt"> </span><u></u><u></u></p><p class="MsoNormal"><span style="font-size:11.0pt">The only reason I can think of why ST_Union would return unchanged overlapping polygons is if you fed it a geometry collection or invalid multipolygon with overlapping polygons.</span><u></u><u></u></p><p class="MsoNormal"><span style="font-size:11.0pt"> </span><u></u><u></u></p><p class="MsoNormal"><span style="font-size:11.0pt">In these cases you should be using ST_UnaryUnion  <a href="https://postgis.net/docs/ST_UnaryUnion.html" rel="noreferrer noreferrer noreferrer" target="_blank">https://postgis.net/docs/ST_UnaryUnion.html</a></span><u></u><u></u></p><p class="MsoNormal"><span style="font-size:11.0pt"> </span><u></u><u></u></p><p class="MsoNormal"><span style="font-size:11.0pt"> </span><u></u><u></u></p><p class="MsoNormal"><span style="font-size:11.0pt"> </span><u></u><u></u></p><div style="border:none;border-left:solid windowtext 1.5pt;padding:0in 0in 0in 4.0pt;border-color:currentcolor currentcolor currentcolor blue"><div><div style="border:none;border-top:solid windowtext 1.0pt;padding:3.0pt 0in 0in 0in;border-color:currentcolor currentcolor"><p class="MsoNormal"><b><span style="font-size:11.0pt;font-family:"Calibri",sans-serif">From:</span></b><span style="font-size:11.0pt;font-family:"Calibri",sans-serif"> Antonio Valanzano <<a href="mailto:anvalanz@gmail.com" rel="noreferrer noreferrer noreferrer" target="_blank">anvalanz@gmail.com</a>> <br><b>Sent:</b> Monday, December 23, 2024 3:47 AM<br><b>To:</b> <a href="mailto:postgis-users@lists.osgeo.org" rel="noreferrer noreferrer noreferrer" target="_blank">postgis-users@lists.osgeo.org</a><br><b>Subject:</b> ST_Union behaviour</span><u></u><u></u></p></div></div><p class="MsoNormal"> <u></u><u></u></p><div><div><p class="MsoNormal">Does someone know why ST_Union behaves differently with linestrings and polygons?<u></u><u></u></p></div><div><p class="MsoNormal"> <u></u><u></u></p></div><div><p class="MsoNormal">If a table contains linestrings that overlap at some points then ST_Union creates a collection of linestrings  that are splitted at intersections.<u></u><u></u></p></div><div><p class="MsoNormal"> <u></u><u></u></p></div><div><p class="MsoNormal">If a table contains polygons with overlaps then ST_Union creates a collection of polygons that are still overlapped and are not splitted (the result contains only the original polygons).<u></u><u></u></p></div><div><p class="MsoNormal"> <u></u><u></u></p></div><div><p class="MsoNormal">Thanks in advance.<u></u><u></u></p></div><div><p class="MsoNormal"> <u></u><u></u></p></div><div><p class="MsoNormal">Antonio<u></u><u></u></p></div><div><p class="MsoNormal"> <u></u><u></u></p></div><div><p class="MsoNormal"> <u></u><u></u></p></div></div></div></div></div></div></blockquote></div></div></div></div></blockquote></div></div></div></div>