[postgis-users] Problem with Contains/Within using shapes created by GeomUnion

Mike Leahy mgleahy at alumni.uwaterloo.ca
Mon Mar 20 12:08:33 PST 2006


strk:

I'm not fully sure what should put in a self-contained test case - but
if you use load sample shapes table I sent in my previous message
(gutest.sql.zip - attached again to this message), then you can run all
of the queries I mentioned earlier.  I also tried the dropbbox function
(see below), which produces the same result.  Let me know if there's
anything more I can do here.

Mike

On my winxp machine:
createdb -U postgres test
psql -U postgres -f ../share/contrib/lwpostgis.sql test
psql -U postgres -f ../share/contrib/spatial_ref_sys.sql test
psql -U postgres -f <path_to>/gutest.sql test
psql -U postgres test

test=# select gid, contains(dropbbox(gu),dropbbox(the_geom)) from gutest
cross join (select geomunion(dropbbox(the_geom)) as
gu from gutest) as u;
 gid | contains
-----+----------
 508 | t
  17 | t
 741 | t
 195 | t
 725 | f
  18 | t
(6 rows)

test=# select version();
                                         version
------------------------------------------------------------------------------------------
 PostgreSQL 8.1.1 on i686-pc-mingw32, compiled by GCC gcc.exe (GCC)
3.4.2 (mingw-special)
(1 row)

test=# select postgis_full_version();
                               postgis_full_version
----------------------------------------------------------------------------------
 POSTGIS="1.1.1" GEOS="2.2.1-CAPI-1.0.1" PROJ="Rel. 4.4.9, 29 Oct 2004"
USE_STATS
(1 row)

strk at refractions.net wrote:
> There might be a bug in the computed bounding box of your geometries,
> Try to run the within and contains against a dropbbox() version
> of the input. If the problem persist, please provide a small
> self-contained testacase so we can check against different
> versions and architectures.
> 
> TIA
> 
> --strk;
> 
> On Fri, Mar 17, 2006 at 01:47:58PM -0500, Mike Leahy wrote:
>> Hello list,
>>
>> I'm wondering if I've run into a bug with PostGIS (or maybe the GEOS 
>> module).  I've been building a set of management areas that are created 
>> from a series of smaller districts merged together.  I would normally 
>> expect the resulting merged polygon to topologically contain all of its 
>> constituent polygons.  This has proved to be true in all cases for my 
>> data except one (so far).  You can see the results of a test query below 
>> that compares a handful of shapes to their geomunion'd shape.  In all 
>> cases except the shape with ID# 725, it looks fine.  For some reason, a 
>> geomunion of that shape with the other contiguous shapes will no longer 
>> contain the original shape itself according to the contains() or 
>> within() functions.  I've looked at this shape using Qgis and compared 
>> it to the corresponding geomunion shape, and it looks fine as far as I 
>> can tell visually.
>>
>> I've included a dump of a test table containing the six shapes in this 
>> management area used in the queries shown below.  Let me know if there's 
>> anything I can do to work around this problem, or if there's any 
>> additional information I should provide.
>>
>> Mike
>>
>> ===========================================================
>>
>> testdb=# select gid, contains(u,the_geom), within(the_geom,u), 
>> isvalid(the_geom) as the_geom_isvalid, isvalid(u) as u_isvalid, 
>> contains(the_geom,the_geom) as the_geom_contains_itself from gutest 
>> cross join (select geomunion(the_geom) as u from gutest) as foo;
>>  gid | contains | within | the_geom_isvalid | u_isvalid | 
>> the_geom_contains_itself
>> -----+----------+--------+------------------+-----------+--------------------------
>>  508 | t        | t      | t                | t         | t
>>   17 | t        | t      | t                | t         | t
>>  741 | t        | t      | t                | t         | t
>>  195 | t        | t      | t                | t         | t
>>  725 | f        | f      | t                | t         | t
>>   18 | t        | t      | t                | t         | t
>> (6 rows)
>>
>>
>> testdb=# select version();
>>                                                           version
>> ----------------------------------------------------------------------------------------------------------------------------
>>  PostgreSQL 8.1.3 on i386-redhat-linux-gnu, compiled by GCC 
>> i386-redhat-linux-gcc (GCC) 4.1.0 20060210 (Red Hat 4.1.0-0.24)
>> (1 row)
>>
>> testdb=# select postgis_full_version();
>>                                postgis_full_version
>> ----------------------------------------------------------------------------------
>>  POSTGIS="1.1.1" GEOS="2.2.1-CAPI-1.0.1" PROJ="Rel. 4.4.9, 29 Oct 2004" 
>> USE_STATS
>> (1 row)
> 
> 
>> _______________________________________________
>> postgis-users mailing list
>> postgis-users at postgis.refractions.net
>> http://postgis.refractions.net/mailman/listinfo/postgis-users
> 
> 
-------------- next part --------------
A non-text attachment was scrubbed...
Name: gutest.sql.zip
Type: application/octet-stream
Size: 19002 bytes
Desc: not available
URL: <http://lists.osgeo.org/pipermail/postgis-users/attachments/20060320/f05d4628/attachment.obj>


More information about the postgis-users mailing list