ST_Touches
Définition
ST_Touches retourne 1 (Oracle) ou t (PostgreSQL) si aucun des points communs aux deux géométries n'intersecte les intérieurs des deux géométries ; dans le cas contraire, la fonction retourne 0 (Oracle) ou f (PostgreSQL). Au moins une géométrie doit être un ST_LineString, ST_Polygon, ST_MultiLineString ou ST_MultiPolygon.
Syntaxe
sde.st_touches (g1 sde.st_geometry, g2 sde.st_geometry)
Type de retour
Booléen
Exemple
Le technicien SIG a été chargé par son responsable de fournir une liste de toutes les canalisations d'égout dont les extrémités coupent une autre canalisation d'égout.
La table sewerlines est créée avec trois colonnes. La première colonne, sewer_id, identifie de façon unique chaque canalisation d'égout. La colonne de classe de nombre entier identifie le type de canalisation d'égout qui est en général associé à sa capacité. La colonne ST_Linestring des canalisations d'égout stocke la géométrie de la canalisation.
Oracle
CREATE TABLE sewerlines (sewer_id integer, sewer sde.st_geometry); INSERT INTO SEWERLINES VALUES ( 1, sde.st_mlinefromtext ('multilinestring ((20 30, 30 30, 30 40, 20 40, 20 30))', 0) ); INSERT INTO SEWERLINES VALUES ( 2, sde.st_mlinefromtext ('multilinestring ((30 30, 30 50, 50 50, 50 30, 30 30))', 0) ); INSERT INTO SEWERLINES VALUES ( 3, sde.st_mlinefromtext ('multilinestring ((40 40, 40 60, 60 60, 60 40, 40 40))', 0) ); INSERT INTO SEWERLINES VALUES ( 4, sde.st_linestring ('linestring (60 60, 70 70)', 0) ); INSERT INTO SEWERLINES VALUES ( 5, sde.st_linestring ('linestring (30 30, 60 60)', 0) );
PostgreSQL
CREATE TABLE sewerlines (sewer_id integer, sewer sde.st_geometry); INSERT INTO sewerlines VALUES ( 1, sde.st_multilinestring ('multilinestring ((20 30, 30 30, 30 40, 20 40, 20 30))', 0) ); INSERT INTO sewerlines VALUES ( 2, sde.st_multilinestring ('multilinestring ((30 30, 30 50, 50 50, 50 30, 30 30))', 0) ); INSERT INTO sewerlines VALUES ( 3, sde.st_multilinestring ('multilinestring ((40 40, 40 60, 60 60, 60 40, 40 40))', 0) ); INSERT INTO sewerlines VALUES ( 4, sde.st_linestring ('linestring (60 60, 70 70)', 0) ); INSERT INTO sewerlines VALUES ( 5, sde.st_linestring ('linestring (30 30, 60 60)', 0) );
La requête retourne une liste ordonnée d'ID de canalisations qui se touchent.
Oracle
SELECT s1.sewer_id, s2.sewer_id FROM SEWERLINES s1, SEWERLINES s2 WHERE sde.st_touches (s1.sewer, s2.sewer) = 1; SEWER_ID SEWER_ID 1 5 3 4 4 3 4 5 5 1 5 3 5 4
PostgreSQL
SELECT s1.sewer_id, s2.sewer_id FROM sewerlines s1, sewerlines s2 WHERE sde.st_touches (s1.sewer, s2.sewer) = 't'; SEWER_ID SEWER_ID 1 5 3 4 4 3 4 5 5 1 5 3 5 4