[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