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