[postgis-users] ST_contains() throws an error

Burgholzer,Robert rwburgholzer at deq.virginia.gov
Thu Jan 3 06:10:16 PST 2008


I have experienced this same difficulty when using the simplify()
function.  I can eliminate some of them by using a smaller tolerance,
although it seems that there is something in the isValid routine that
OKs records that have some problems.  I have found that if I use only
the buffer(the_geom,0) I can obtain valid shapes in all cases (at least
all that I have tried, which is around 3,000 shapes).

 

If you really need to simplify, perhaps you can alter the order in which
you are doing your operations, i.e., buffer first, then simplify().
While this is not a fix to the underlying troubles, it may get you up
and running.

 

HTH,

 

Robert W. Burgholzer

Surface Water Modeler

Office of Water Supply and Planning

Virginia Department of Environmental Quality

rwburgholzer at deq.virginia.gov

804-698-4405

Open Source Modeling Tools:

http://sourceforge.net/projects/npsource/

 

-----Original Message-----
From: postgis-users-bounces at postgis.refractions.net
[mailto:postgis-users-bounces at postgis.refractions.net] On Behalf Of
James DeMichele
Sent: Friday, December 28, 2007 2:25 PM
To: postgis-users at postgis.refractions.net
Subject: [postgis-users] ST_contains() throws an error

 

Hi,

I have a table with 27000 records and each record has 2 geometry
columns. The first column has an original MULTIPOLYGON (named
original_poly), and the second column has some tweaks (buffer and
simplification) applied to the original data, and is also stored as a
MULTIPOLYGON (named new_poly).

 

I want to get the list of these rows where the new_poly does NOT contain
the original_poly. The first time I ran it, I got this: "ERROR:  GEOS
contains() threw an error!"

 

So, then I thought that maybe some of the polygons were not valid. There
were 6 invalid polygons, so then I tried running this query:

 

select count(*) 

from temp_places_buffer 

where(st_isvalid(new_poly) = true and st_isvalid(redfin_poly) = true) 

and not st_contains(t1.new_poly, t1.redfin_poly);

 

Unfortunately, I still get this error:

 

ERROR:  GEOS contains() threw an error!

 

What are possible reasons that this would still be throwing an error,
other than invalid polygons, since the query should now only be
calculating st_contains on valid polygons?

 

I am running this version:

 

            postgis_version

---------------------------------------

 1.3 USE_GEOS=1 USE_PROJ=1 USE_STATS=1

 

Thanks.

 

-James

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.osgeo.org/pipermail/postgis-users/attachments/20080103/8d6a5ea5/attachment.html>


More information about the postgis-users mailing list