ST_Touches

Definición

ST_Touches devuelve 1 (Oracle) o t (PostgreSQL) si ninguno de los puntos comunes a ambas geometrías se intersecan con el interior de ambas geometrías, de lo contrario, devuelve 0 (Oracle) o f (PostgreSQL). Al menos una geometría debe ser ST_LineString, ST_Polygon, ST_MultiLineString o ST_MultiPolygon.

Sintaxis

sde.st_touches (g1 sde.st_geometry, g2 sde.st_geometry)

Tipo de devolución

Booleano

Ejemplo

El jefe del técnico de SIG le solicito proporcionar una lista de todas las líneas de alcantarillado que poseen los extremos que se intersecan con otra línea de alcantarillado.

La tabla de líneas de alcantarillado se crea con tres columnas. La primera columna, sewer_id, identifica exclusivamente cada línea de alcantarillado. La columna de clase de enteros identifica el tipo de línea de alcantarillado generalmente asociada con la capacidad de la línea. La columna de alcantarillado ST_Linestring almacena la geometría de la línea de alcantarillado.

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 consulta devuelve una lista ordenada de Id. de alcantarillado que hacen contacto una con la otra.

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