<div dir="ltr">The way I see it, for any kind of polygon:<div> - Convert a polygon to a set of points proportional to the area by ST_GeneratePoints (the more points, the more beautiful it will be, guess 1000 is ok);</div><div> - Decide how many parts you'd like to split into, (ST_Area(geom)/max_area), let it be K;<br> - Take KMeans of the point cloud with K clusters;</div><div> - For each cluster, take a ST_Centroid(ST_Collect(point));</div><div> - Feed these centroids into ST_VoronoiPolygons, that will get you a mask for each part of polygon;<br> - ST_Intersection of original polygon and each cell of Voronoi polygons will get you a good split of your polygon into K parts.<br><br>Will it work for you?</div></div><br><div class="gmail_quote"><div dir="ltr">вс, 17 июн. 2018 г. в 13:11, Jibran Khan <<a href="mailto:jibran@envs.au.dk">jibran@envs.au.dk</a>>:<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">
<div class="m_-7525801946671791139WordSection1">
<p class="MsoNormal"><span lang="EN-GB">Hello everyone,<u></u><u></u></span></p>
<p class="MsoNormal"><span lang="EN-GB"><u></u> <u></u></span></p>
<p class="MsoNormal"><span lang="EN-GB">I need some help in terms of splitting polygons based on the polygon area. I am using PostgreSQL 9.5.12/PostGIS 2.3 on Windows 10 (x64). I have two tables i.e. polygon (poly) and points (pts) in my Postgres db. Some of
 the polygons contain points inside them while, some do not (sample scenario below):<u></u><u></u></span></p>
<p class="MsoNormal"><span lang="EN-GB"><u></u> <u></u></span></p>
<p class="MsoNormal"><img width="262" height="308" style="width:2.7291in;height:3.2083in" id="m_-7525801946671791139Picture_x0020_1" src="cid:image001.png@01D40632.134FDF00"><span lang="EN-GB"><u></u><u></u></span></p>
<p class="MsoNormal"><span lang="EN-GB"><u></u> <u></u></span></p>
<p class="MsoNormal"><span lang="EN-GB">The following query:<u></u><u></u></span></p>
<p class="MsoNormal"><span lang="EN-GB"><u></u> <u></u></span></p>
<p class="MsoNormal"><span lang="EN-GB">/*Start of query*/<u></u><u></u></span></p>
<p class="MsoNormal"><span lang="EN-GB">Select <u></u><u></u></span></p>
<p class="MsoNormal"><span lang="EN-GB">    a.gid poly_id, count(b.geom) pt_cnt,<u></u><u></u></span></p>
<p class="MsoNormal"><span lang="EN-GB">    st_area(a.geom)::int poly_area<u></u><u></u></span></p>
<p class="MsoNormal"><span lang="EN-GB">FROM<u></u><u></u></span></p>
<p class="MsoNormal"><span lang="EN-GB">    poly a<u></u><u></u></span></p>
<p class="MsoNormal"><span lang="EN-GB">LEFT JOIN<u></u><u></u></span></p>
<p class="MsoNormal"><span lang="EN-GB">    pts b <u></u><u></u></span></p>
<p class="MsoNormal"><span lang="EN-GB">ON st_contains(a.geom, b.geom) <u></u><u></u></span></p>
<p class="MsoNormal"><span lang="EN-GB">GROUP BY a.gid<u></u><u></u></span></p>
<p class="MsoNormal"><span lang="EN-GB">Order by a.gid;<u></u><u></u></span></p>
<p class="MsoNormal"><span lang="EN-GB">/*End of query*/<u></u><u></u></span></p>
<p class="MsoNormal"><span lang="EN-GB"><u></u> <u></u></span></p>
<p class="MsoNormal"><span lang="EN-GB">Returns the area of polygons (from left to right) as 1079, 744, 340 square-meter, respectively. I need to split these polygons' geometry based on the area i.e. if area is above 100 meter-square, then each polygon needs
 to be divided/split into “approximate equal” parts (assuming that majority of the polygons are
<i>straightforward</i> like above). The division does not have to be “strictly” equal. Does anyone know or have any idea how this can be achieved?<u></u><u></u></span></p>
<p class="MsoNormal"><span lang="EN-GB"><u></u> <u></u></span></p>
<p class="MsoNormal"><b><span lang="EN-GB">Side Notes:<u></u><u></u></span></b></p>
<p class="MsoNormal"><span lang="EN-GB"><u></u> <u></u></span></p>
<p class="m_-7525801946671791139MsoListParagraph"><u></u><span lang="EN-GB" style="font-family:Symbol"><span>·<span style="font:7.0pt "Times New Roman"">        
</span></span></span><u></u><span lang="EN-GB">I earlier posted this question here at
<a href="https://gis.stackexchange.com/questions/286184/postgis-how-do-i-split-polygon-in-equal-parts-based-on-polygon-area" target="_blank">
GIS SE</a><u></u><u></u></span></p>
<p class="m_-7525801946671791139MsoListParagraph"><u></u><span lang="EN-GB" style="font-family:Symbol"><span>·<span style="font:7.0pt "Times New Roman"">        
</span></span></span><u></u><span lang="EN-GB">Also, came across <a href="https://gis.stackexchange.com/questions/239801/how-can-i-split-a-polygon-into-two-equal-parts-along-a-n-s-axis" target="_blank">
this</a> relevant question but I guess my problem is different<u></u><u></u></span></p>
<p class="MsoNormal"><span lang="EN-GB"><u></u> <u></u></span></p>
<p class="MsoNormal"><span lang="EN-GB">Any help or idea(s) would be highly appreciated.<u></u><u></u></span></p>
<p class="MsoNormal"><span lang="EN-GB"><u></u> <u></u></span></p>
<p class="MsoNormal"><span lang="EN-GB">Best,<u></u><u></u></span></p>
<p class="MsoNormal"><span lang="EN-GB">/Jibran<u></u><u></u></span></p>
</div>
</div>

_______________________________________________<br>
postgis-users mailing list<br>
<a href="mailto:postgis-users@lists.osgeo.org" target="_blank">postgis-users@lists.osgeo.org</a><br>
<a href="https://lists.osgeo.org/mailman/listinfo/postgis-users" rel="noreferrer" target="_blank">https://lists.osgeo.org/mailman/listinfo/postgis-users</a></blockquote></div>