There is an elegant mathematical theory of binary relations. Homogeneous relations are an important subclass of binary relations in which both domains are the same. A homogeneous relation R is a subset of all ordered pairs (x,y) with x and y elements of the domain. This can be thought of as a boolean-valued function R(x,y), which is true if the pair has the relationship and false if not.
The restricted structure of homogeneous relations allows describing them by various properties, including:
Reflexive - R(x, x) is always true
Irreflexive - R(x, x) is never true
Symmetric - if R(x, y), then R(y, x)
Antisymmetric - if R(x, y) and R(y, x), then x = y
Transitive - if R(x, y) and R(y, z), then R(x, z)
The Dimensionally Extended 9-Intersection Model (DE-9IM) represents the topological relationship between two geometries.
Various useful subsets of spatial relationships are specified by named spatial predicates. These are the basis for spatial querying in many spatial systems including the JTS Topology Suite, GEOS and PostGIS.
The spatial predicates are homogeneous binary relations over the Geometry domain They can thus be categorized in terms of the relational properties above. The following table shows the properties of the standard predicates:
Predicate | Reflexive / Irreflexive | Symmetric / Antisymmetric | Transitive |
---|---|---|---|
Equals | R | S | T |
Intersects | R | S | - |
Disjoint | R | S | - |
Contains | R | A | - |
Within | R | A | - |
Covers | R | A | T |
CoveredBy | R | A | T |
Crosses | I | S | - |
Overlaps | I | S | - |
Touches | I | S | - |
Notes
- Contains and Within are not Transitive because of the quirk that "Polygons do not contain their Boundary" (explained in this post). A counterexample is a Polygon that contains a LineString lying in its boundary and interior, with the LineString containing a Point that lies in the Polygon boundary. The Polygon does not contain the Point. So Contains(poly, line) = true and Contains(line, pt) = true, but Contains(poly, pt) = false. The predicates Covers and CoveredBy do not have this idiosyncrasy, and thus are transitive.