[postgis-users] problem "st_equals".

Paragon Corporation lr at pcorp.us
Thu Sep 4 01:04:27 PDT 2008


Rolf,

I took a look at this.  I think the problem is because your polygons are
invalid.  Since ST_Equals doesn't care about polygon orientation and so
forth - it has to validate that geometries are equa by other means.  I
suspect since your geometries are invalid the false really means -- it had
no clue because it couldn't run the equality tests on them.  ST_Equals in my
opinion should throw an error or give some sort of notice, so I would
consider this a bug.

If I look at the notices section in say PgAdmin when I do an ST_IsValid
check, I get this message

When I do an ST_IsValid check, I get the below
NOTICE:  Self-intersection at or near point 2.58392e+006 5.68493e+006
NOTICE:  Self-intersection at or near point 2.58392e+006 5.68493e+006
NOTICE:  Self-intersection at or near point 2.58392e+006 5.68493e+006
NOTICE:  Self-intersection at or near point 2.58392e+006 5.68493e+006

Now however ST_OrderingEquals returns true, because it is more of a check of
binary equality (well sort of).  Check this query out to see what I mean

SELECT ST_AsBinary(a.the_geom) = ST_AsBinary(b.the_geom) As binaryequal,
ST_Equals(a.the_geom, b.the_geom) As spatially_equal,
ST_OrderingEquals(a.the_geom, b.the_geom) As
orderequal,ST_IsValid(a.the_geom) As a_isvalid, ST_IsValid(b.the_geom) as
b_isvalid 
from equal_test a, equal_test b where a.name <> b.name and not
st_equals(a.the_geom,b.the_geom)

-- On my install this returns
binaryequal | spatially_equal | orderequal | a_isvalid | b_isvalid
------------+-----------------+------------+-----------+-----------
t           | f               | t          | f         | f
t           | f               | t          | f         | f


Hope that helps,
Regina 

-----Original Message-----
From: postgis-users-bounces at postgis.refractions.net
[mailto:postgis-users-bounces at postgis.refractions.net] On Behalf Of Stüwe
Rolf
Sent: Thursday, September 04, 2008 3:31 AM
To: PostGIS Users Discussion
Subject: AW: [postgis-users] problem "st_equals".

Hi Kevin,

i send an example and hope yuo can reconstuct it.

create table equal_test (name  char(6)); SELECT
AddGeometryColumn('','equal_test','the_geom','31466','MULTIPOLYGON',2);
 
COPY equal_test (name, the_geom) FROM stdin;
geom01
0106000020EA7A0000010000000103000000010000002B000000F18C9EFFB9B64341E314A022
B1AF55
41AF0335FAB9B64341700D0F26B1AF5541C9C9D4F4B9B643418AAC8129B1AF5541B8B07CEFB9
B64341F072F72C
B1AF5541E2BF2CEAB9B64341D75B7030B1AF5541A3FEE4E4B9B643417162EC33B1AF55414974
A5DFB9B64341EB
816B37B1AF55411A286EDAB9B643416DB5ED3AB1AF55414D213FD5B9B643411BF8723EB1AF55
41106718D0B9B6
43411645FB41B1AF55418500FACAB9B643417A978645B1AF5541C3F4E3C5B9B643415EEA1449
B1AF5541D34AD6
C0B9B64341D738A64CB1AF5541B609D1BBB9B64341F27D3A50B1AF55415F38D4B6B9B64341BD
B4D153B1AF5541
B5DDDFB1B9B643413ED86B57B1AF55419500F4ACB9B6434178E3085BB1AF5541CFA710A8B9B6
43416BD1A85EB1
AF554127DA35A3B9B64341119D4B62B1AF5541579E639EB9B643416341F165B1AF55419A9999
99B9B643419A99
9969B1AF554166666686BAB6434152B81EB5B0AF554159EFACC7BAB64341CED465B6B0AF5541
C245E5BCBAB643
41E1CD6EBBB0AF5541F73B31B2BAB64341973F82C0B0AF55419A6391A7BAB643415E41A0C5B0
AF55415DE6059D
BAB6434120BFC8CAB0AF5541A2ED8E92BAB643419FA4FBCFB0AF55417BA22C88BAB6434174DD
38D5B0AF5541A8
2DDF7DBAB643410F5580DAB0AF554197B7A673BAB64341B8F6D1DFB0AF554166688369BAB643
4191AD2DE5B0AF
5541DC67755FBAB64341916493EAB0AF554170DD7C55BAB643418A0603F0B0AF554143F0994B
BAB64341277E7C
F5B0AF554122C7CC41BAB64341ECB5FFFAB0AF554183881538BAB6434136988C00B1AF554188
5A742EBAB64341
3D0F2306B1AF5541FB62E924BAB643411405C30BB1AF55414FC7741BBAB64341A7636C11B1AF
5541A1AC1612BA
B64341BE141F17B1AF5541B437CF08BAB64341FD01DB1CB1AF5541F18C9EFFB9B64341E314A0
22B1AF5541
geom02
0106000020EA7A0000010000000103000000010000002B000000F18C9EFFB9B64341E314A022
B1AF55
41AF0335FAB9B64341700D0F26B1AF5541C9C9D4F4B9B643418AAC8129B1AF5541B8B07CEFB9
B64341F072F72C
B1AF5541E2BF2CEAB9B64341D75B7030B1AF5541A3FEE4E4B9B643417162EC33B1AF55414974
A5DFB9B64341EB
816B37B1AF55411A286EDAB9B643416DB5ED3AB1AF55414D213FD5B9B643411BF8723EB1AF55
41106718D0B9B6
43411645FB41B1AF55418500FACAB9B643417A978645B1AF5541C3F4E3C5B9B643415EEA1449
B1AF5541D34AD6
C0B9B64341D738A64CB1AF5541B609D1BBB9B64341F27D3A50B1AF55415F38D4B6B9B64341BD
B4D153B1AF5541
B5DDDFB1B9B643413ED86B57B1AF55419500F4ACB9B6434178E3085BB1AF5541CFA710A8B9B6
43416BD1A85EB1
AF554127DA35A3B9B64341119D4B62B1AF5541579E639EB9B643416341F165B1AF55419A9999
99B9B643419A99
9969B1AF554166666686BAB6434152B81EB5B0AF554159EFACC7BAB64341CED465B6B0AF5541
C245E5BCBAB643
41E1CD6EBBB0AF5541F73B31B2BAB64341973F82C0B0AF55419A6391A7BAB643415E41A0C5B0
AF55415DE6059D
BAB6434120BFC8CAB0AF5541A2ED8E92BAB643419FA4FBCFB0AF55417BA22C88BAB6434174DD
38D5B0AF5541A8
2DDF7DBAB643410F5580DAB0AF554197B7A673BAB64341B8F6D1DFB0AF554166688369BAB643
4191AD2DE5B0AF
5541DC67755FBAB64341916493EAB0AF554170DD7C55BAB643418A0603F0B0AF554143F0994B
BAB64341277E7C
F5B0AF554122C7CC41BAB64341ECB5FFFAB0AF554183881538BAB6434136988C00B1AF554188
5A742EBAB64341
3D0F2306B1AF5541FB62E924BAB643411405C30BB1AF55414FC7741BBAB64341A7636C11B1AF
5541A1AC1612BA
B64341BE141F17B1AF5541B437CF08BAB64341FD01DB1CB1AF5541F18C9EFFB9B64341E314A0
22B1AF5541
\.
 
select a.name,b.name from equal_test a, equal_test b where a.name <> b.name
and not st_equ als(a.the_geom,b.the_geom);
 
output (though the geometries are the same):
 
  name  |  name
--------+--------
 geom01 | geom02
 geom02 | geom01
(2 rows)





Bye Rolf 

-----Ursprüngliche Nachricht-----
Von: postgis-users-bounces at postgis.refractions.net
[mailto:postgis-users-bounces at postgis.refractions.net] Im Auftrag von Kevin
Neufeld
Gesendet: Dienstag, 2. September 2008 18:01
An: PostGIS Users Discussion
Betreff: Re: [postgis-users] problem "st_equals".

My understanding is that ST_Equals shouldn't care if the geometries are not
simple.  If the two geometries are spatially equivalent, this function
should return true.

If the geometry is not too large, can you post it here?

Cheers,
Kevin

Stüwe Rolf wrote:
> Hallo all,
>  
> we have a problem concerning the function "st_equals" under PostgreSQL
> 8.2.3 , PostGIS1.2.1.
>  
> We duplicated a geometry having a Self-intersection. The two 
> geometries are not st_equals(the original geometry, the duplicated
geometry). Why?????
> Many thanks for help us!
> 
> 
> ----------------------------------------------------------------------
> --
> 
> _______________________________________________
> postgis-users mailing list
> postgis-users at postgis.refractions.net
> http://postgis.refractions.net/mailman/listinfo/postgis-users
_______________________________________________
postgis-users mailing list
postgis-users at postgis.refractions.net
http://postgis.refractions.net/mailman/listinfo/postgis-users
_______________________________________________
postgis-users mailing list
postgis-users at postgis.refractions.net
http://postgis.refractions.net/mailman/listinfo/postgis-users





More information about the postgis-users mailing list