[postgis-users] How to tell if 2 geometries are spatially equal

Andy Anderson aanderson at amherst.edu
Mon Jun 2 22:58:32 PDT 2008


On Jun 2, 2008, at 4:29 PM, Martin Davis wrote:
> I use "topologically equal" because the OGC SFS specification uses  
> the term "topology" extensively in their discussion of the meaning  
> of the DE-9IM model, on which the semantics of ST_equals is based.

No doubt they do, because the spatial relationships that can be  
determined by the DE-9IM are, generally speaking, topological in nature:

	Disjoint, Touches, Crosses, Within and Overlaps

These are the ones defined here:

	http://portal.opengeospatial.org/files/?artifact_id=829

Oddly, in this document they also mention "Equals" but they never  
explicitly define it (though they claim to later in the document).  
However, I did find a very complete description of DE-9IM here:

	http://mlblog.osdir.com/gis.postgis/2004-02/pdfHaVE9FZPMj.pdf

and they say that for "equals", the "Geometries must be identical:
– Same dimension
– Same geometry type
– Same number of vertices
– All x,y coordinates must be identical"

So this definition would seem to agree with me that LINESTRING(0 0, 10  
10) and LINESTRING(0 0, 5 5, 10 10) are not topologically equal. The  
best way to think of this is that the second is a *polyline*, and the  
vertex (5, 5) is a boundary between two lines, and that changes the  
DE-9IM.

As you point out, however, ST_equals('LINESTRING(0 0, 10  
10)','LINESTRING(0 0, 5 5, 10 10)') returns true; perhaps this was by  
design to distinguish it from 'LINESTRING(0 0, 10 10)'::geometry ~=  
'LINESTRING(0 0, 5 5, 10 10)'::geometry .

If you can point to further discussion on this issue, I would be  
interested.

> I don't like the term "spatially-equal", because I think "spatially"  
> is too vague and overloaded.  How about "point-set equal"?  The idea  
> is that  A = B iff every point of A is in B and every point of B is  
> in A.

Personally, I don't have a problem with "spatially equal", it says to  
me "they fill space in the same way", which in fact they do because a  
point has no extent.

-- Andy

> Andy Anderson wrote:
>> I wouldn't call this example "topologically" equal; one has two  
>> vertices and the other has three, and that's the only  
>> characteristic that's relevant in topology (not even their  
>> positions :-)
>>
>> "Coincident" is probably a better term, though "spatially equal" is  
>> probably just as good, and contrasts well with the term  
>> "geometrically equal" that the manual uses to describe the ~=  
>> operator.
>>
>> -- Andy
>>
>> On May 30, 2008, at 7:54 PM, Martin Davis wrote:
>>
>>> Will ST_equals do what you want?  It reports whether two  
>>> geometries are topologically equal.
>>>
>>> (So for example, ST_equals('LINESTRING(0 0, 10 10)','LINESTRING(0  
>>> 0, 5 5, 10 10)') is true)
>>>
>>> Obe, Regina wrote:
>>>> I recall this having come up before.  I always thought that ~=  
>>>> would
>>>> tell me if 2 geometries are spatially equal but it doesn't seem to.
>>>>
>>>> The only way I can figure to determine spatial equality is if
>>>> ST_Within(A,B)  And  ST_Within(B,A)  (or ST_Difference(A,B) AND
>>>> ST_Difference(B,A) both return an empty geometry collection)
>>>>
>>>> --So case in point
>>>>
>>>> SELECT geom1 ~= geom2 as what, ST_Within(geom1, geom2) AND
>>>> ST_Within(geom2, geom1) As spatial_equal,
>>>>    ST_AsText(ST_Difference(geom1, geom2)) as diffgeom12,
>>>> ST_AsText(ST_Difference(geom2, geom1)) as diffgeom21 FROM (SELECT  
>>>> 'LINESTRING(1 1, 1 2, 1 3)'::geometry As geom1,     'LINESTRING(1  
>>>> 1, 1 3)'::geometry As geom2) As foo
>>>>
>>>> Results:
>>>>
>>>> what | spatial_equal |        diffgeom12        |        diffgeom21
>>>> ------+---------------+-------------------------- 
>>>> +----------------------
>>>> ----
>>>> f    | t             | GEOMETRYCOLLECTION EMPTY |  
>>>> GEOMETRYCOLLECTION
>>>> EMPTY
>>>>
>>>>
>>>> Is there a function / operator that does that (also what does  
>>>> geom1 =
>>>> geom2 compare - is it just bounding boxes or is that the  
>>>> spatially equal
>>>> operator I am looking for?)
>>>>
>>>> Thanks,
>>>> Regina
>>>>
>>>> -----------------------------------------
>>>> 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
>>>> http://postgis.refractions.net/mailman/listinfo/postgis-users
>>>>
>>>>
>>>
>>> -- 
>>> Martin Davis
>>> Senior Technical Architect
>>> Refractions Research, Inc.
>>> (250) 383-3022
>>>
>>> _______________________________________________
>>> 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
>>
>
> -- 
> Martin Davis
> Senior Technical Architect
> Refractions Research, Inc.
> (250) 383-3022
>
> _______________________________________________
> 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