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

Martin Davis mbdavis at refractions.net
Thu Dec 11 08:56:43 PST 2008


The centroid code and the area code both compute areas, but in different 
ways.  Thus one of them might compute a 0 area while the other computes 
a very small area value, or vice-versa.  When I test the text version, 
centroid actually computes a non-zero area, and thus returns 
successfully with a centroid value.  For the WKB version the numbers are 
just different enough that the area computation computes 0, and the code 
fails.


Obe, Regina wrote:
>
> Weird.  What is strange is the ST_AsGeometryFromText version gave me 
> an area of 0 but did return a centroid that looked about right.  While 
> the binary one that did return an empty geometry collection -  gave an 
> area of  0.00005 e-8  or something like that.  I would have thought 
> the  ST_AsGeometryFromText version would have had more issues in that 
> case or at least the same issues.
>
>
>
>
> -----Original Message-----
> From: postgis-devel-bounces at postgis.refractions.net on behalf of 
> Martin Davis
> Sent: Wed 12/10/2008 1:06 PM
> To: PostGIS Development Discussion
> Subject: Re: [postgis-devel] FW: [postgis-users] how to identify 
> the_geomthatcause:RelateOperation called withLWGEOMCOLLECTION type
>
> 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
>
> _______________________________________________
> postgis-devel mailing list
> postgis-devel at postgis.refractions.net
> http://postgis.refractions.net/mailman/listinfo/postgis-devel
>
> ------------------------------------------------------------------------
>
> _______________________________________________
> 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