[postgis-users] computing unions of intersecting polygons

Martin Davis mbdavis at refractions.net
Tue Jan 13 09:44:26 PST 2009


The way I'd look at doing this is to compute a relation which contains 
pairs (poly_id1, poly_id2) for all polygons which intersect.  Then 
compute the transitive closure of this relation to find all connected 
sets of polygons.  (Until the recursive CTE support emerges in 
PostgresQL 8.4, you'll probably need to do this procedurally in 
pgplsql).  Label each group with the smallest id in that group.  Then 
you can use an aggregate query over the transitive closure table to 
compute unions and counts.

Reid Priedhorsky wrote:
> Dear all,
>
> I have a table which contains about 10,000 fairly simple polygons (~20 
> vertices, no interior rings). Some of these polygons intersect each 
> other.
>
> I would like the union polygon of each group of intersecting polygons, 
> and ideally how many polygons were unioned together in each group.
>
> What's the best way to do this?
>
> I have a plan which seems to be promising, something along the lines of:
>
>    insert into bar select st_union(geometry) from foo;
>    select (st_dump(geometry)).geom from bar;
>
> ... but it is quite slow, it requires an intermediate table, and it 
> doesn't tell me how many polygons were unioned in each group.
>
> I'm running version 1.3.3.
>
> Any suggestions?
>
> Thanks,
>
> Reid
> _______________________________________________
> postgis-users mailing list
> postgis-users at postgis.refractions.net
> http://postgis.refractions.net/mailman/listinfo/postgis-users
>

-- 
Martin Davis
Senior Technical Architect
Refractions Research, Inc.
(250) 383-3022




More information about the postgis-users mailing list