[postgis-users] Using PostGIS for partial intersection/union of many polygons

Rémi Cura remi.cura at gmail.com
Wed Jul 31 02:54:34 PDT 2013


Hey,
my 2 cents (sorry I can't access your example)

Depending on what you want, you may have interest in sampling :
you create a grid of point (there is a function) or a grid of polygon
square.
Then you compute for each point(square) the number of polygon it is in (on
simple sql query invovling count(*) OVER and st_intersects)
Then when you want space where there are between N and M polygons
overlaying, you just query the table with point/square with a WHERE count
>N and count <M.

It should run very fast, even fater if you put btree index on the count
result.
I don't know what you want, but if this is some kind of indicator, sampling
may be legitimate.
If you want crisp boundary, it may be used to fasten computing (doing the
precise computing only on polygons on border)

Cheers,

Rémi-C


2013/7/31 Sandro Santilli <strk at keybit.net>

> On Tue, Jul 30, 2013 at 07:37:47PM -0700, Martin Davis wrote:
> > This kind of question can be answered by a classic N-polygon
> > overlay.  AFAIK PostGIS doesn't have such a function directly, so
> > you will have to compute the noding of the polygon linework,
> > followed by a polygonization step.  Then take a interior point of
> > each resultant polygon and compute how many source polygons it lies
> > in.  You can then union the set of polygons for each count of
> > interest.
> >
> > Be warned - if the sample below is representative of your data, you
> > may well encounter TopologyExceptions, since it appears that there
> > is a lot of nearly coincident linework.
> >
> > No doubt others can weigh in if there is a better way of doing this
> > in PostGIS.
>
> Great idea, Martin!
> It could be implemented by building a topology and checking out the faces
> that partecipate in more than N TopoGeometry definitions. Would probably
> be pretty slow, but at least exceptions could be dealt with on a more
> localized way...
>
> --strk;
>
> >
> > On 7/30/2013 9:37 AM, Sparr wrote:
> > >It was suggested on IRC that I ask this question to this mailing list.
> > >
> > >I have a set of 1000 (or many more) polygons, most of which
> > >intersect with each other. I want to produce a polygon (or set of
> > >polygons, or an empty set) describing the area covered by
> > >N-or-more of those polygons. For N=1, the answer is the union of
> > >all of the polygons. For N=1000, the answer is their intersection.
> > >The naive way to calculate N=2 through N=999 is to make a list of
> > >combinations of polygons, intersect those, and then union the
> > >results, but this will require a prohibitively large number of
> > >union and intersection operations in some cases.
> > >
> > >To illustrate the problem, here is an example with a smaller set
> > >of data (422 polygons right now):
> > >
> > >
> http://regionaldifferences.com/results.html?region=New%20England&lat=42&lon=-73&zoom=6
> > >
> > >If you hover your mouse over the center of Massachusetts you'll
> > >see that 98% of the polygons (415/422 currently) intersect there.
> > >Syracuse NY is about 25%.
> > >
> > >What I want is the outline of specific percentiles on this map. I
> > >want a single polygon representing the 50%-or-more area, and a
> > >single polygon representing the 90%-or-more area, etc.
> > >
> > >Can PostGIS do this without my needing to assemble a string of
> > >union and intersection operations for the query? I would prefer
> > >not to rasterize the data unless it proves infeasible to do this
> > >with the full precision vector data.
> _______________________________________________
> postgis-users mailing list
> postgis-users at lists.osgeo.org
> http://lists.osgeo.org/cgi-bin/mailman/listinfo/postgis-users
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.osgeo.org/pipermail/postgis-users/attachments/20130731/5aff5dd8/attachment.html>


More information about the postgis-users mailing list