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

3/6/2012