[postgis-users] Finding if a polygons is fully covered by others
Martin Davis
mbdavis at refractions.net
Mon Jan 18 11:03:17 PST 2010
The way I'd look at doing this is:
- find all bounding boxes which intersect the query polygon
- union the boxes
- compute the difference between the box union and the query poly
- If the difference is non-empty, the boxes do not cover the polygon.
This should be a bit more accurate than simply using the areas. It could
be more performance as well, given the new fast-union functions.
Nicolas Gillet - MARKET-IP wrote:
>
> Hello,
>
> I am looking for some help in optimizing a query.
>
> I have a table with bounding boxes and sometimes I need to find if a
> new given polygon can be fully covered by existing bounding boxes of
> my table.
>
> Right now I can find it out by summing the areas of intersections
> between my polygon and those in my table and comparing this computed
> area with my polygon area.
>
> Here’s the query :
>
> SELECT ST_area(ST_GeometryFromText('POLYGON((-1 0, -1 1, 1 1, 1 0, -1
> 0))', 4326) ) -
>
> (SELECT SUM(st_area(st_intersection(the_geom,
> ST_GeometryFromText('POLYGON((-1 0, -1 1, 1 1, 1 0, -1 0))', 4326) ) ))
>
> FROM tests WHERE the_geom && ST_GeometryFromText('POLYGON((-1 0, -1 1,
> 1 1, 1 0, -1 0))', 4326) )
>
> => if query returns 0 then my polygon can be fully covered if != 0
> then it can’t.
>
> But I was wondering if there couldn’t be an easier way to do this.
>
> Thank you.
>
> Nicolas.
>
> ------------------------------------------------------------------------
>
> _______________________________________________
> 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