<div dir="ltr">There are, for instance, non-OGC-to-OGC data conversions that have to reinvent which rings are outer and which rings are inner.<div>OpenStreetMap data schema allows them not marked (so - multipolygon is just a collection of rings). ST_MakeValid is very useful on processing these, as users usually don't draw useless lines, and you should guess the inner/outer the same way usual editor's graphical library guesses them to get the best result in your database - which ST_MakeValid is good at.</div><div><br></div><div>On a globe, all the rings of a polygon are technically outer - consider a ST_Buffer(equator line, 10) - this polygon technically has two rings on a globe, both outer, both denote just a single piece of area.. :)</div></div><br><div class="gmail_quote"><div dir="ltr">ср, 12 окт. 2016 г. в 1:54, Craig de Stigter <<a href="mailto:craig.destigter@koordinates.com">craig.destigter@koordinates.com</a>>:<br></div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="ltr" class="gmail_msg">Aha, cheers. In fact I see that's mentioned in the docs too, but I hadn't really understood what it meant until you pointed it out.<div class="gmail_msg"><br class="gmail_msg"></div><div class="gmail_msg">I'm curious if there's a situation in which that's a useful behaviour? It strikes me as a very strange quirk...</div></div><div class="gmail_extra gmail_msg"><br class="gmail_msg"><div class="gmail_quote gmail_msg">On 12 October 2016 at 09:35, Komяpa <span dir="ltr" class="gmail_msg"><<a href="mailto:me@komzpa.net" class="gmail_msg" target="_blank">me@komzpa.net</a>></span> wrote:<br class="gmail_msg"><blockquote class="gmail_quote gmail_msg" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="ltr" class="gmail_msg">ST_MakeValid tries to reconstruct geometry without losing vertices.<br class="gmail_msg"><br class="gmail_msg">The only sane way I can think of to do it without losing vertices is to stop treating the inner ring as inner ring and mark it as outer.<div class="gmail_msg"><br class="gmail_msg"></div><div class="gmail_msg">If you need a geometry fixup function that does processing with losing vertices, ST_MakeValid isn't semantically what you need.</div></div><br class="gmail_msg"><div class="gmail_quote gmail_msg"><div dir="ltr" class="gmail_msg">вт, 11 окт. 2016 г. в 23:24, Craig de Stigter <<a href="mailto:craig.destigter@koordinates.com" class="gmail_msg" target="_blank">craig.destigter@koordinates.com</a>>:<br class="gmail_msg"></div><blockquote class="gmail_quote gmail_msg" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div class="gmail_msg"><div class="m_-1782887543623602053h5 gmail_msg"><div dir="ltr" class="m_-1782887543623602053m_7140635769007187356gmail_msg gmail_msg">Hi folks<div class="m_-1782887543623602053m_7140635769007187356gmail_msg gmail_msg"><br class="m_-1782887543623602053m_7140635769007187356gmail_msg gmail_msg"></div><div class="m_-1782887543623602053m_7140635769007187356gmail_msg gmail_msg">We've been using an internal geometry-fixing function for a long time, and I'm looking into replacing it with ST_MakeValid().</div><div class="m_-1782887543623602053m_7140635769007187356gmail_msg gmail_msg"><br class="m_-1782887543623602053m_7140635769007187356gmail_msg gmail_msg"></div><div class="m_-1782887543623602053m_7140635769007187356gmail_msg gmail_msg">I've come across a strange edge-case where ST_MakeValid() appears to incorrectly treat polygons as a set of linework, rather than a shell and a set of holes.</div><div class="m_-1782887543623602053m_7140635769007187356gmail_msg gmail_msg"><br class="m_-1782887543623602053m_7140635769007187356gmail_msg gmail_msg"></div><div class="m_-1782887543623602053m_7140635769007187356gmail_msg gmail_msg">This means that when you give it a shape with a hole that partially escapes the exterior ring, instead of that part getting discarded it forms the outer ring of a new polygon, thus creating a multipolygon.</div><div class="m_-1782887543623602053m_7140635769007187356gmail_msg gmail_msg"><br class="m_-1782887543623602053m_7140635769007187356gmail_msg gmail_msg"></div><div class="m_-1782887543623602053m_7140635769007187356gmail_msg gmail_msg">I expected it to take the outer ring and ST_Difference() all the inner rings from the outer ring.</div><div class="m_-1782887543623602053m_7140635769007187356gmail_msg gmail_msg"><br class="m_-1782887543623602053m_7140635769007187356gmail_msg gmail_msg"></div><div class="m_-1782887543623602053m_7140635769007187356gmail_msg gmail_msg">Here's some screenshots to demonstrate:</div><div class="m_-1782887543623602053m_7140635769007187356gmail_msg gmail_msg"><br class="m_-1782887543623602053m_7140635769007187356gmail_msg gmail_msg"></div><div class="m_-1782887543623602053m_7140635769007187356gmail_msg gmail_msg">Actual: <a href="https://drive.google.com/file/d/0By4X8bGnhCGET3h1UU1GOW1NTDA/view?usp=sharing" class="m_-1782887543623602053m_7140635769007187356gmail_msg gmail_msg" target="_blank">https://drive.google.com/file/d/0By4X8bGnhCGET3h1UU1GOW1NTDA/view?usp=sharing</a><br class="m_-1782887543623602053m_7140635769007187356gmail_msg gmail_msg"></div><div class="m_-1782887543623602053m_7140635769007187356gmail_msg gmail_msg">Expected: <a href="https://drive.google.com/file/d/0By4X8bGnhCGEQjdzQlpsY0xlelk/view?usp=sharing" class="m_-1782887543623602053m_7140635769007187356gmail_msg gmail_msg" target="_blank">https://drive.google.com/file/d/0By4X8bGnhCGEQjdzQlpsY0xlelk/view?usp=sharing</a><br clear="all" class="m_-1782887543623602053m_7140635769007187356gmail_msg gmail_msg"><div class="m_-1782887543623602053m_7140635769007187356gmail_msg gmail_msg"><br class="m_-1782887543623602053m_7140635769007187356gmail_msg gmail_msg"></div><div class="m_-1782887543623602053m_7140635769007187356gmail_msg gmail_msg">Would anyone who knows a bit more about ST_MakeValid() be able to comment on this? (If I dug into the source and was able to submit a patch to fix this, would it be likely to be accepted?)</div><div class="m_-1782887543623602053m_7140635769007187356gmail_msg gmail_msg"><br class="m_-1782887543623602053m_7140635769007187356gmail_msg gmail_msg"></div>-- <br class="m_-1782887543623602053m_7140635769007187356gmail_msg gmail_msg"><div class="m_-1782887543623602053m_7140635769007187356m_1752773630719486597gmail_signature m_-1782887543623602053m_7140635769007187356gmail_msg gmail_msg"><div dir="ltr" class="m_-1782887543623602053m_7140635769007187356gmail_msg gmail_msg"><div style="color:rgb(0,0,0);font-family:helvetica;font-size:12px" class="m_-1782887543623602053m_7140635769007187356gmail_msg gmail_msg">Regards,</div><div style="color:rgb(0,0,0);font-family:helvetica;font-size:12px" class="m_-1782887543623602053m_7140635769007187356gmail_msg gmail_msg">Craig</div><div style="color:rgb(0,0,0);font-family:helvetica;font-size:12px" class="m_-1782887543623602053m_7140635769007187356gmail_msg gmail_msg"><br class="m_-1782887543623602053m_7140635769007187356gmail_msg gmail_msg"></div><div style="color:rgb(0,0,0);font-family:helvetica;font-size:12px" class="m_-1782887543623602053m_7140635769007187356gmail_msg gmail_msg">Developer</div><div style="color:rgb(0,0,0);font-family:helvetica;font-size:12px" class="m_-1782887543623602053m_7140635769007187356gmail_msg gmail_msg">Koordinates</div><div style="color:rgb(0,0,0);font-family:helvetica;font-size:12px" class="m_-1782887543623602053m_7140635769007187356gmail_msg gmail_msg"><br class="m_-1782887543623602053m_7140635769007187356gmail_msg gmail_msg"></div><div style="color:rgb(0,0,0);font-family:helvetica;font-size:12px" class="m_-1782887543623602053m_7140635769007187356gmail_msg gmail_msg"><a href="tel:+64%2021%20256%209488" style="color:rgb(17,85,204)" class="m_-1782887543623602053m_7140635769007187356gmail_msg gmail_msg" target="_blank">+64 21 256 9488</a> / <a href="http://koordinates.com/" style="color:rgb(17,85,204)" class="m_-1782887543623602053m_7140635769007187356gmail_msg gmail_msg" target="_blank">koordinates.com</a> / <a href="https://twitter.com/koordinates" style="color:rgb(17,85,204)" class="m_-1782887543623602053m_7140635769007187356gmail_msg gmail_msg" target="_blank">@koordinates</a></div></div></div>
</div></div></div></div>
_______________________________________________<br class="m_-1782887543623602053m_7140635769007187356gmail_msg gmail_msg">
postgis-users mailing list<br class="m_-1782887543623602053m_7140635769007187356gmail_msg gmail_msg">
<a href="mailto:postgis-users@lists.osgeo.org" class="m_-1782887543623602053m_7140635769007187356gmail_msg gmail_msg" target="_blank">postgis-users@lists.osgeo.org</a><br class="m_-1782887543623602053m_7140635769007187356gmail_msg gmail_msg">
<a href="http://lists.osgeo.org/mailman/listinfo/postgis-users" rel="noreferrer" class="m_-1782887543623602053m_7140635769007187356gmail_msg gmail_msg" target="_blank">http://lists.osgeo.org/mailman/listinfo/postgis-users</a></blockquote></div>
<br class="gmail_msg">_______________________________________________<br class="gmail_msg">
postgis-users mailing list<br class="gmail_msg">
<a href="mailto:postgis-users@lists.osgeo.org" class="gmail_msg" target="_blank">postgis-users@lists.osgeo.org</a><br class="gmail_msg">
<a href="http://lists.osgeo.org/mailman/listinfo/postgis-users" rel="noreferrer" class="gmail_msg" target="_blank">http://lists.osgeo.org/mailman/listinfo/postgis-users</a><br class="gmail_msg"></blockquote></div><br class="gmail_msg"><br clear="all" class="gmail_msg"><div class="gmail_msg"><br class="gmail_msg"></div>-- <br class="gmail_msg"><div class="m_-1782887543623602053gmail_signature gmail_msg" data-smartmail="gmail_signature"><div dir="ltr" class="gmail_msg"><div style="color:rgb(0,0,0);font-family:Helvetica;font-size:12px" class="gmail_msg">Regards,</div><div style="color:rgb(0,0,0);font-family:Helvetica;font-size:12px" class="gmail_msg">Craig</div><div style="color:rgb(0,0,0);font-family:Helvetica;font-size:12px" class="gmail_msg"><br class="gmail_msg"></div><div style="color:rgb(0,0,0);font-family:Helvetica;font-size:12px" class="gmail_msg">Developer</div><div style="color:rgb(0,0,0);font-family:Helvetica;font-size:12px" class="gmail_msg">Koordinates</div><div style="color:rgb(0,0,0);font-family:Helvetica;font-size:12px" class="gmail_msg"><br class="gmail_msg"></div><div style="color:rgb(0,0,0);font-family:Helvetica;font-size:12px" class="gmail_msg"><a href="tel:+64%2021%20256%209488" style="color:rgb(17,85,204)" class="gmail_msg" target="_blank">+64 21 256 9488</a> / <a href="http://koordinates.com/" style="color:rgb(17,85,204)" class="gmail_msg" target="_blank">koordinates.com</a> / <a href="https://twitter.com/koordinates" style="color:rgb(17,85,204)" class="gmail_msg" target="_blank">@koordinates</a></div></div></div>
</div>
_______________________________________________<br class="gmail_msg">
postgis-users mailing list<br class="gmail_msg">
<a href="mailto:postgis-users@lists.osgeo.org" class="gmail_msg" target="_blank">postgis-users@lists.osgeo.org</a><br class="gmail_msg">
<a href="http://lists.osgeo.org/mailman/listinfo/postgis-users" rel="noreferrer" class="gmail_msg" target="_blank">http://lists.osgeo.org/mailman/listinfo/postgis-users</a></blockquote></div>