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
[email protected]
http://postgis.refractions.net/mailman/listinfo/postgis-users
--
Martin Davis
Senior Technical Architect
Refractions Research, Inc.
(250) 383-3022
_______________________________________________
postgis-users mailing list
[email protected]
http://postgis.refractions.net/mailman/listinfo/postgis-users