<div dir="ltr">This would be easier w/ pictures, but<div>- for each island you want to </div><div>- create the set of parks that are contained w/i that island and</div><div>- remove that whole set of parks from the one island they refer to</div><div>Because: ST_Difference() is a two parameter function: one parameter for the island, and one parameter for all the things you want removed.</div><div>So.</div><div><br></div><div>WITH parks_to_remove AS (</div><div>  SELECT <a href="http://islands.id">islands.id</a>, </div><div>    ST_Collect(parks.geom) AS geom</div><div>  FROM islands </div><div>  JOIN parks </div><div>  ON ST_Intersects(parks.geom, islands.geom)</div><div>)</div><div>SELECT <a href="http://islands.id">islands.id</a>, </div><div>  ST_Difference(islands.geom, parks_to_remove.geom) AS geom</div><div>FROM islands </div><div>JOIN parks_to_remove </div><div>ON <a href="http://islands.id">islands.id</a> = <a href="http://parks_to_remove.id">parks_to_remove.id</a>;</div><div><br></div><div><br></div><div>ATB,</div><div>P</div><div><br></div></div><div class="gmail_extra"><br><div class="gmail_quote">On Wed, Jul 20, 2016 at 7:34 PM, Michael Treglia <span dir="ltr"><<a href="mailto:mtreglia@gmail.com" target="_blank">mtreglia@gmail.com</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="ltr">Hi All,<div><br></div><div>Please pardon this fairly general question - I'm struggling with using ST_Difference, and think I might be missing something just about the intended way ST_Difference functions, as I'm still learning PostGIS... I think the answer to this will help me troubleshoot or at least lead me to ask better questions down the line.</div><div><br></div><div>So, I have a set of large and many multipolygons (islands) within one layer, and many smaller sets of multipolygons that are contained within the islands  (parks) in another layer. I'm trying to effectively clip out the parks from the islands, so basically the end result will be the Islands with many holes throughout. The code I was expecting to use was along the lines of this:</div><div><br></div><div>SELECT ST_Difference(islands.geom, parks.geom) AS newgeom INTO test.islands_noparks FROM staging.parks, staging.islands <br></div><div><br></div><div>However, this is producing the entire islands, but with many rows (just about as many rows as there are parks). Thus, I think I might be a bit confused about how ST_Difference is intended to function. Would anybody be able to clarify?</div><div><br></div><div>Thanks so much for your time! Best,</div><div>Mike</div></div>
<br>_______________________________________________<br>
postgis-users mailing list<br>
<a href="mailto:postgis-users@lists.osgeo.org">postgis-users@lists.osgeo.org</a><br>
<a href="http://lists.osgeo.org/mailman/listinfo/postgis-users" rel="noreferrer" target="_blank">http://lists.osgeo.org/mailman/listinfo/postgis-users</a><br></blockquote></div><br></div>