[postgis-users] ST_Intersects and NOT ST_Disjoint aren't equal?

Gerrit Hoven gerrit.hoven at fh-gelsenkirchen.de
Thu Mar 26 06:22:42 PDT 2009


Hello Postgis Users

I was wondering about the behavior of ST_Disjoint and ST_Intersects.

My data is a 3D citymodel which is stored in "tbl_surface". There is the 
geometry column "geom".
Normally I expect the same behavior of "WHERE ST_Intersects(...)" and 
"WHERE NOT ST_Disjoint(...)"

But look what happens if I try to get everything inside a huge boundingbox:

Query A:
select geom from tbl_surface where 
ST_Intersects(ST_GeomFromText('Polygon((0 0, 9999999 0, 9999999 9999999, 
0 9999999, 0 0))'), geom)

returns 98524 rows, which I expect because this is all my data and the 
boundingbox covers them all


Query B:
select geom from tbl_surface where not 
ST_Disjoint(ST_GeomFromText('Polygon((0 0, 9999999 0, 9999999 9999999, 0 
9999999, 0 0))'), geom)

returns: 61895 rows (should be 98524 ???)


Query C:
select geom from tbl_surface where 
ST_Disjoint(ST_GeomFromText('Polygon((0 0, 9999999 0, 9999999 9999999, 0 
9999999, 0 0))'), geom)

returns: 36629 rows (should be 0 ???)


All my geometries are polygons which have z-coordinates.
There exist polygons (like walls), which when projecting them to the x-y 
plane, are only lines. I think this is a hint for the strange behavior 
of ST_Disjoint. Just look what the query results look like:

This is all my data:
http://81.89.98.151/Picture/queryA.png

This is everything inside the big box, using NOT ST_Disjoint. All the 
polygons that are not a line in 2D
http://81.89.98.151/Picture/queryB.png

This is everything "outside" the big box, using ST_Disjoint. All the 
polygons that are lines in 2D
http://81.89.98.151/Picture/queryC.png


Can anybody explain this to me? Or is it a bug.


Regards,
Gerrit




More information about the postgis-users mailing list