Definición
ST_Touches devuelve 1 (Oracle y SQLite) o t (PostgreSQL) si ninguno de los puntos comunes a ambas geometrías se interseca con el interior de ambas geometrías, de lo contrario, devuelve 0 (Oracle y SQLite) o f (PostgreSQL). Al menos una geometría debe ser ST_LineString, ST_Polygon, ST_MultiLineString o ST_MultiPolygon.
Sintaxis
Oracle y PostgreSQL
sde.st_touches (geometry1 sde.st_geometry, geometry2 sde.st_geometry)
SQLite
st_touches (geometry1 geometryblob, geometry2 geometryblob)
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 almacena la geometría de la línea de alcantarillado.
La consulta SELECT usa la función ST_Touches para devolver una lista de las alcantarillas que se tocan entre sí.
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))', 4326)
);
INSERT INTO SEWERLINES VALUES (
2,
sde.st_mlinefromtext ('multilinestring ((30 30, 30 50, 50 50, 50 30, 30 30))', 4326)
);
INSERT INTO SEWERLINES VALUES (
3,
sde.st_mlinefromtext ('multilinestring ((40 40, 40 60, 60 60, 60 40, 40 40))', 4326)
);
INSERT INTO SEWERLINES VALUES (
4,
sde.st_linestring ('linestring (60 60, 70 70)', 4326)
);
INSERT INTO SEWERLINES VALUES (
5,
sde.st_linestring ('linestring (30 30, 60 60)', 4326)
);
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
CREATE TABLE sewerlines (
sewer_id serial,
sewer sde.st_geometry);
INSERT INTO sewerlines (sewer) VALUES (
sde.st_multilinestring ('multilinestring ((20 30, 30 30, 30 40, 20 40, 20 30))', 4326)
);
INSERT INTO sewerlines (sewer) VALUES (
sde.st_multilinestring ('multilinestring ((30 30, 30 50, 50 50, 50 30, 30 30))', 4326)
);
INSERT INTO sewerlines (sewer) VALUES (
sde.st_multilinestring ('multilinestring ((40 40, 40 60, 60 60, 60 40, 40 40))', 4326)
);
INSERT INTO sewerlines (sewer) VALUES (
sde.st_linestring ('linestring (60 60, 70 70)', 4326)
);
INSERT INTO sewerlines (sewer) VALUES (
sde.st_linestring ('linestring (30 30, 60 60)', 4326)
);
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
SQLite
CREATE TABLE sewerlines (
sewer_id integer primary key autoincrement not null
);
SELECT AddGeometryColumn(
NULL,
'sewerlines',
'sewer',
4326,
'geometry',
'xy',
'null'
);
INSERT INTO sewerlines (sewer) VALUES (
st_multilinestring ('multilinestring ((20 30, 30 30, 30 40, 20 40, 20 30))', 4326)
);
INSERT INTO sewerlines (sewer) VALUES (
st_multilinestring ('multilinestring ((30 30, 30 50, 50 50, 50 30, 30 30))', 4326)
);
INSERT INTO sewerlines (sewer) VALUES (
st_multilinestring ('multilinestring ((40 40, 40 60, 60 60, 60 40, 40 40))', 4326)
);
INSERT INTO sewerlines (sewer) VALUES (
st_linestring ('linestring (60 60, 70 70)', 4326)
);
INSERT INTO sewerlines (sewer) VALUES (
st_linestring ('linestring (30 30, 60 60)', 4326)
);
SELECT s1.sewer_id, s2.sewer_id
FROM SEWERLINES s1, SEWERLINES s2
WHERE st_touches (s1.sewer, s2.sewer) = 1;
sewer_id sewer_id
1 5
3 4
3 5
4 3
4 5
5 1
5 3
5 4