Definition
ST_Touches gibt den Wert 1 (Oracle und SQLite) oder t (PostgreSQL) zurück, wenn keiner der Punkte, die beiden Geometrien gemeinsam sind, den Innenbereich beider Geometrien schneidet. Andernfalls wird 0 (Oracle und SQLite) oder f (PostgreSQL) zurückgegeben. Bei mindestens einer Geometrie muss es sich um einen "ST_LineString", einen "ST_MultiLineString" oder ein "ST_MultiPolygon" handeln.
Syntax
Oracle und PostgreSQL
sde.st_touches (geometry1 sde.st_geometry, geometry2 sde.st_geometry)
SQLite
st_touches (geometry1 geometryblob, geometry2 geometryblob)
Rückgabetyp
Boolesch
Beispiel
Ein GIS-Techniker wurde von seinem Vorgesetzten gebeten, eine Liste aller Abwasserkanäle zusammenzustellen, deren Endpunkte einen anderen Abwasserkanal schneiden.
Die Tabelle "sewerlines" wird mit drei Spalten erstellt. Durch die erste Spalte "sewer_id" werden die einzelnen Abwasserkanäle eindeutig identifiziert. Die ganzzahlige Spalte "class" gibt den Typ des Abwasserkanals an, der im Allgemeinen der Kapazität des Kanals zugeordnet ist. In der Spalte "sewer" wird die Geometrie des Abwasserkanals gespeichert.
Die SELECT-Abfrage verwendet die ST_Touches-Funktion, um eine Liste der Abwasserkanäle zurückzugeben, die einander berühren.
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