ST_Crosses — Teste si deux géométries ont en commun certains points intérieurs, mais pas tous
boolean ST_Crosses(
geometry g1, geometry g2)
;
Compare deux objets géométriques et renvoie true
si leur intersection "se croise spatialement", c'est-à-dire que les géométries ont certains points intérieurs en commun, mais pas tous. L'intersection des intérieurs des géométries doit être non vide et doit avoir une dimension inférieure à la dimension maximale des deux géométries d'entrée, et l'intersection des deux géométries ne doit pas être égale à l'une ou l'autre géométrie. Sinon, il renvoie false
. La relation entre les croix est symétrique et irréflexive.
En termes mathématiques : 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
le résultat est false
pour les situations Point/Point et Area/Area
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. |
Cette fonction inclut une comparaison de la boîte englobante qui utilise tous les index disponibles sur les géométries. |
Amélioration : 3.0.0 a permis la prise en charge de |
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
Les situations suivantes renvoient toutes true
.
|
|
|
|
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);