Name

ST_Crosses — Teste si deux géométries ont en commun certains points intérieurs, mais pas tous

Synopsis

boolean ST_Crosses(geometry g1, geometry g2);

Description

Compares two geometry objects and returns true if their intersection "spatially crosses"; that is, the geometries have some, but not all interior points in common. The intersection of the interiors of the geometries must be non-empty and must have dimension less than the maximum dimension of the two input geometries, and the intersection of the two geometries must not equal either geometry. Otherwise, it returns false. The crosses relation is symmetric and irreflexive.

In mathematical terms: ST_Crosses(A, B) ⇔ (dim( Int(A) ⋂ Int(B) ) < max( dim( Int(A) ), dim( Int(B) ) )) ∧ (A ⋂ B ≠ A) ∧ (A ⋂ B ≠ B)

Les géométries se croisent si leur matrice d'intersection DE-9IM correspond :

  • T*T****** pour les situations point/ligne, point/zone et ligne/zone

  • T*****T** pour les situations Ligne/Point, Zone/Point et Zone/Ligne

  • 0******** pour les situations ligne/ligne

  • the result is false for Point/Point and Area/Area situations

[Note]

La spécification OpenGIS Simple Features définit ce prédicat uniquement pour les situations Point/Ligne, Point/Zone, Ligne/Ligne et Ligne/Zone. Le STC / GEOS étend la définition pour qu'elle s'applique également aux situations Ligne/Point, Zone/Point et Zone/Ligne. Cela rend la relation symétrique.

[Note]

Cette fonction inclut une comparaison de la boîte englobante qui utilise tous les index disponibles sur les géométries.

[Important]

Amélioration : 3.0.0 a permis la prise en charge de GEOMETRYCOLLECTION

Cette méthode implémente la spécification OGC Simple Features Implementation Specification for SQL 1.1.

s2.1.13.3

Cette méthode implémente la spécification SQL/MM.

SQL-MM 3: 5.1.29

Exemples

Les situations suivantes renvoient toutes true.

MULTIPOINT / LINESTRING

MULTIPOINT / POLYGON

LINESTRING / POLYGON

LINESTRING / LINESTRING

Prenons le cas d'un utilisateur qui dispose de deux tables : une table de routes et une table d'autoroutes.

CREATE TABLE roads (
  id serial NOT NULL,
  geom geometry,
  CONSTRAINT roads_pkey PRIMARY KEY (road_id)
);

CREATE TABLE highways (
  id serial NOT NULL,
  the_gem geometry,
  CONSTRAINT roads_pkey PRIMARY KEY (road_id)
);

Pour obtenir une liste des routes qui traversent une autoroute, utilisez une requête similaire à :

SELECT roads.id
FROM roads, highways
WHERE ST_Crosses(roads.geom, highways.geom);

Voir aussi

ST_Contains, ST_Overlaps