[postgis-devel] FW: [postgis-users] how to identify the_geom thatcause:RelateOperation called withLWGEOMCOLLECTION type

Martin Davis mbdavis at refractions.net
Wed Dec 10 10:06:10 PST 2008


Yup, it's a bug.  See my post to the Users list.  This is caused by an 
inability to handle zero-area polygons in the current code.  It should 
be fixed in GEOS.  I'm working on a JTS fix now.

Obe, Regina wrote:
> Do you guys consider this to be a bug?  It is sort of, but not sure if 
> anything can be done about it.  I presume it would go under GEOS not 
> PostGIS.  Anyrate it seems to me that if a geometry is valid -  
> ST_Centroid should not be returning an empty geometry collection 
> except when given an Empty Geometry Collection.  Am I wrong in that 
> assumption?
>  
>  
>
> ------------------------------------------------------------------------
> *From:* Obe, Regina
> *Sent:* Wednesday, December 10, 2008 7:42 AM
> *To:* 'PostGIS Users Discussion'
> *Subject:* RE: [postgis-users] how to identify the_geom 
> thatcause:RelateOperation called withLWGEOMCOLLECTION type
>
> Fred and Ghislain,
>  
> Thanks - yes that's because of the rounding that happens in 
> ST_GeomFromText -- the ST_GeomFromText is rounding the last couple of 
> digits so the text rep isn't actually what the geometry is so its 
> probably something like
>  
> 796579.5624334065668  or some such thing.  Looking at this in 
> OpenJump, the polygon is practically a line so borders on being almost 
> invalid.
>  
> So I guess its some sort of rounding issue that before it gets to 
> ST_Centroid its not invalid because the 2 mid points are technically 
> not the same, but once it gets into ST_Centroid some rounding happens 
> that makes it equivalent to an invalid geometry (basically a polygon 
> with 3 points).
>  
> Well I'm able to recreate this result in "POSTGIS="1.3.5SVN" 
> GEOS="3.1.0-CAPI-1.5.0" PROJ="Rel. 4.6.0, 21 Dec 2007"
>  
> I suppose the workaround for now would be to ignore anything where the 
> area is close to 0 or centroid is empty or use ST_SnapToGrid to get 
> rid of those extra digits in your geometry.
>  
> http://postgis.refractions.net/documentation/manual-svn/ST_SnapToGrid.html
>  
> None of which is terribly appealing.
>  
>  
> Thanks,
> Regina
>  
>
> ------------------------------------------------------------------------
> *From:* postgis-users-bounces at postgis.refractions.net 
> [mailto:postgis-users-bounces at postgis.refractions.net] *On Behalf Of 
> *Fred Lehodey
> *Sent:* Wednesday, December 10, 2008 5:28 AM
> *To:* PostGIS Users Discussion
> *Subject:* Re: [postgis-users] how to identify the_geom 
> thatcause:RelateOperation called withLWGEOMCOLLECTION type
>
> Hi,
> just a note:
>
> inserting the same geometry :
>
> INSERT INTO bug (gid, the_geom) VALUES (
> 1  , 
> '0103000020BE6B0000010000000400000081F178483F4F2841D730212506D33C418045F71F474F2841D706623902D33C417E45F71F474F2841D806623902D33C4181F178483F4F2841D730212506D33C41'
> );
>
> and
>
> INSERT INTO bug (gid, the_geom) VALUES (2,st_geomfromtext('POLYGON((
> 796575.641547725 1889030.1450377,
> 796579.562433407 1889026.22415202,
> 796579.562433406 1889026.22415202,
> 796575.641547725 1889030.1450377))',-1))
>
> then :
> SELECT gid, st_area(the_geom), astext(centroid(the_geom)), 
> isvalid(the_geom)
> FROM bug
>
> returns:
>
> 1; 0.0001220703125;"GEOMETRYCOLLECTION EMPTY";t
> 2; 0.0001220703125;"POINT(796578.255471513 1889027.53111391)";t
>
> !!
>
> Fred.
>
>
>
>
> On Wed, Dec 10, 2008 at 9:06 AM, Ghislain Geniaux 
> <geniaux at avignon.inra.fr <mailto:geniaux at avignon.inra.fr>> wrote:
>
>     Exact,
>      that's the problem :
>
>     scot3=# SELECT gid, the_geom
>     scot3-# FROM bd_dispo_final
>     scot3-# WHERE isempty(centroid(the_geom));
>      gid  |                                                          
>                       the_geom
>     -------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------
>      16435 |
>     0103000020BE6B0000010000000400000081F178483F4F2841D730212506D33C418045F71F474F2841D706623902D33C417E45F71F474F2841D806623902D33C4181F178483F4F2841D730212506D33C41
>     (1 row)
>
>
>     Here, you will find  the ouput of  pg_dump to study this
>     geometrry. Thanks again.
>
>
>
>     --
>     -- PostgreSQL database dump
>     --
>
>     SET client_encoding = 'SQL_ASCII';
>     SET standard_conforming_strings = off;
>     SET check_function_bodies = false;
>     SET client_min_messages = warning;
>     SET escape_string_warning = off;
>
>     SET search_path = public, pg_catalog;
>
>     SET default_tablespace = '';
>
>     SET default_with_oids = false;
>
>     --
>     -- Name: bug; Type: TABLE; Schema: public; Owner: postgres;
>     Tablespace:--
>
>     CREATE TABLE bug (
>        gid integer,
>        the_geom geometry
>     );
>
>
>     ALTER TABLE public.bug OWNER TO postgres;
>
>     --
>     -- Data for Name: bug; Type: TABLE DATA; Schema: public; Owner:
>     postgres
>     --
>
>     COPY bug (gid, the_geom) FROM stdin;
>     16435  
>     0103000020BE6B0000010000000400000081F178483F4F2841D730212506D33C418045F71F474F2841D706623902D33C417E45F71F474F2841D806623902D33C4181F178483F4F2841D730212506D33C41
>     \.
>
>
>     --
>     -- PostgreSQL database dump complete
>     --
>
>
>     Le 9 déc. 08 à 13:04, Obe, Regina a écrit :
>
>
>
>         Ghislain,
>
>         The only time I have seen this kind of behavior is when
>         centroid returns an empty geometry collection.  In those cases
>         its because the geometry is invalid.
>
>         Although none of your geometries are invalid, it could be a
>         bug in either the centroid code or isvalid check that may or
>         may not be fixed in 3.0.3+ of GEOS.
>
>
>         Can you do the following
>
>         SELECT gid, the_geom
>         FROM ZS2C
>         WHERE isempty(centroid(the_geom))
>
>
>         and send us as an attatched file with one of those geometries.
>          We can cross check with GEOS 3.0.3 or 3.1 to see if the issue
>         still remains.
>
>         Thanks,
>         Regina
>         -----Original Message-----
>         From: postgis-users-bounces at postgis.refractions.net
>         <mailto:postgis-users-bounces at postgis.refractions.net>
>         [mailto:postgis-
>         <mailto:postgis->users-bounces at postgis.refractions.net
>         <mailto:users-bounces at postgis.refractions.net>] On Behalf Of
>         Ghislain Geniaux
>         Sent: Monday, December 08, 2008 1:29 PM
>         To: PostGIS Users Discussion
>         Subject: Re: [postgis-users] how to identify the_geom that
>         cause:RelateOperation called withLWGEOMCOLLECTION type
>
>         On Linux  :
>
>         POSTGIS="1.3.1" GEOS="3.0.0-CAPI-1.4.1" PROJ="Rel. 4.6.0, 21 Dec
>         2007" USE_STATS
>         (1 row)
>
>         On Macos
>
>          POSTGIS="1.2.1" GEOS="3.0.0-CAPI-1.4.1" PROJ="Rel. 4.6.0, 21 Dec
>         2007" USE_STATS
>         (1 row)
>
>         same result with the two platform and postgis version.
>
>         Thanks.
>
>         Le 8 déc. 08 à 17:53, Paragon Corporation a écrit :
>
>             What does
>
>             SELECT postgis_full_version();
>
>             Return
>
>             Thanks,
>             Regina
>             -----Original Message-----
>             From: postgis-users-bounces at postgis.refractions.net
>             <mailto:postgis-users-bounces at postgis.refractions.net>
>             [mailto:postgis-users-bounces at postgis.refractions.net
>             <mailto:postgis-users-bounces at postgis.refractions.net>] On
>             Behalf Of
>             Ghislain
>             Geniaux
>             Sent: Monday, December 08, 2008 11:03 AM
>             To: PostGIS Users Discussion
>             Subject: Re: [postgis-users] how to identify the_geom that
>             cause
>             :RelateOperation called withLWGEOMCOLLECTION type
>
>             I've no collection. It's looks like a bug.
>
>             Moreover my table is very large wiht more than 500 000
>             geometry and i
>             found no solution to identy the wrong geom.
>
>             Here you can see the query, with the same result on different
>             plateform (LINUX DEBIAN, MACOS, with GEOS 3)
>
>             otm=# select distinct geometrytype(the_geom) from ZS2c;
>              geometrytype
>             --------------
>              MULTIPOLYGON
>             (1 row)
>
>             otm=# select distinct geometrytype(the_geom) from
>             bd_dispo_finalc ;
>              geometrytype
>             --------------
>              MULTIPOLYGON
>              POLYGON
>             (2 rows)
>
>             otm=# create table info_nonvoue1 as
>             otm-# select b.id_parc, z.niv from bd_dispo_finalc as b,
>             ZS2c as z
>             otm-# where z.niv=1 and
>             intersects(centroid(b.the_geom),z.the_geom)
>             and b.the_geom && z.the_geom and isvalid(b.the_geom) and
>             isvalid
>             (z.the_geom);
>             ERROR:  Relate Operation called with a LWGEOMCOLLECTION
>             type.  This
>             is unsupported
>             otm=#
>
>
>
>             Le 8 déc. 08 à 13:32, Obe, Regina a écrit :
>
>                 Many of the GEOS relation functions do not work with
>                 collections.
>
>                 You must have a geometry collection in there somewhere
>                 or its a bug.
>                 Also which relation function were you trying?
>
>                 To figure out the type of your geometries, run
>
>                 SELECT *
>                 FROM sometable
>                 WHERE GeometryType(the_geom) = 'GEOMETRYCOLLECTION'
>
>
>
>
>                 -----Original Message-----
>                 From: postgis-users-bounces at postgis.refractions.net
>                 <mailto:postgis-users-bounces at postgis.refractions.net>
>                 [mailto:postgis-users-bounces at postgis.refractions.net
>                 <mailto:postgis-users-bounces at postgis.refractions.net>]
>                 On Behalf Of
>                 Nicolas Ribot
>                 Sent: Monday, December 08, 2008 6:22 AM
>                 To: PostGIS Users Discussion
>                 Subject: Re: [postgis-users] how to identify the_geom
>                 that cause :
>                 RelateOperation called withLWGEOMCOLLECTION type
>
>                     I have an error with some geometry that cause :
>                     "ERROR Relate
>
>                 Operation
>
>                     called withLWGEOMCOLLECTION type".
>                     All the geometries seem clean (valid, non empty,
>                     closed, only
>                     POLYGON,
>
>                 ..)
>
>                     My question : how to get information of which
>                     geometry cause the
>
>                 problem ?
>
>                     Is there a way  to have information about the
>                     geometry during
>                     postgis
>
>                 is
>
>                     working on a  SQL query ?
>                     Thanks.
>
>
>                 Hi Ghislain,
>
>                 What the query that failed looks like ?
>                 The message is telling that one geometry has an
>                 invalid type.
>                 In your query, you could try to ask for
>                 ST_GeometryType(geometry) and
>                 a geometry identifier to see which geometry has the
>                 wrong type.
>                 If you perform a spatial operation, it is possible that
>                 geometryCollection is produced.
>                 You could maybe split your query into smaller block to
>                 see where such
>                 collections are generated.
>
>                 Nicolas
>                 _______________________________________________
>                 postgis-users mailing list
>                 postgis-users at postgis.refractions.net
>                 <mailto:postgis-users at postgis.refractions.net>
>                 http://postgis.refractions.net/mailman/listinfo/postgis-users
>                 -----------------------------------------
>                 The substance of this message, including any
>                 attachments, may be
>                 confidential, legally privileged and/or exempt from
>                 disclosure
>                 pursuant to Massachusetts law. It is intended
>                 solely for the addressee. If you received this in
>                 error, please
>                 contact the sender and delete the material from any
>                 computer.
>                 _______________________________________________
>                 postgis-users mailing list
>                 postgis-users at postgis.refractions.net
>                 <mailto:postgis-users at postgis.refractions.net>
>                 http://postgis.refractions.net/mailman/listinfo/postgis-users
>
>
>
>
>             ------------------------------------------
>             Geniaux Ghislain
>             INRA SAD Ecodéveloppement
>             Site Agroparc
>             Domaine St Paul
>             84914 Avignon Cedex 9
>
>             Tél : 04 32 72 25 64
>             Fax : 04 32 72 25 62
>
>
>             _______________________________________________
>             postgis-users mailing list
>             postgis-users at postgis.refractions.net
>             <mailto:postgis-users at postgis.refractions.net>
>             http://postgis.refractions.net/mailman/listinfo/postgis-users
>
>
>
>             _______________________________________________
>             postgis-users mailing list
>             postgis-users at postgis.refractions.net
>             <mailto:postgis-users at postgis.refractions.net>
>             http://postgis.refractions.net/mailman/listinfo/postgis-users
>
>
>
>
>         ------------------------------------------
>         Geniaux Ghislain
>         INRA SAD Ecodéveloppement
>         Site Agroparc
>         Domaine St Paul
>         84914 Avignon Cedex 9
>
>         Tél : 04 32 72 25 64
>         Fax : 04 32 72 25 62
>
>
>         _______________________________________________
>         postgis-users mailing list
>         postgis-users at postgis.refractions.net
>         <mailto:postgis-users at postgis.refractions.net>
>         http://postgis.refractions.net/mailman/listinfo/postgis-users
>         -----------------------------------------
>         The substance of this message, including any attachments, may be
>         confidential, legally privileged and/or exempt from disclosure
>         pursuant to Massachusetts law. It is intended
>         solely for the addressee. If you received this in error, please
>         contact the sender and delete the material from any computer.
>         _______________________________________________
>         postgis-users mailing list
>         postgis-users at postgis.refractions.net
>         <mailto:postgis-users at postgis.refractions.net>
>         http://postgis.refractions.net/mailman/listinfo/postgis-users
>
>
>
>
>     ------------------------------------------
>     Geniaux Ghislain
>     INRA SAD Ecodéveloppement
>     Site Agroparc
>     Domaine St Paul
>     84914 Avignon Cedex 9
>
>     Tél : 04 32 72 25 64
>     Fax : 04 32 72 25 62
>
>
>     _______________________________________________
>     postgis-users mailing list
>     postgis-users at postgis.refractions.net
>     <mailto:postgis-users at postgis.refractions.net>
>     http://postgis.refractions.net/mailman/listinfo/postgis-users
>
>
> ------------------------------------------------------------------------
>
> *The substance of this message, including any attachments, may be 
> confidential, legally privileged and/or exempt from disclosure 
> pursuant to Massachusetts law. It is intended solely for the 
> addressee. If you received this in error, please contact the sender 
> and delete the material from any computer. *
>
> ------------------------------------------------------------------------
>
> * Help make the earth a greener place. If at all possible resist 
> printing this email and join us in saving paper. *
>
> * *
>
> * *
>
> ------------------------------------------------------------------------
>
> _______________________________________________
> postgis-devel mailing list
> postgis-devel at postgis.refractions.net
> http://postgis.refractions.net/mailman/listinfo/postgis-devel
>   

-- 
Martin Davis
Senior Technical Architect
Refractions Research, Inc.
(250) 383-3022




More information about the postgis-devel mailing list