Name

ST_Touches — Prüft, ob zwei Geometrien mindestens einen Punkt gemeinsam haben, aber ihre Innenräume sich nicht schneiden

Übersicht

boolean ST_Touches(geometry A, geometry B);

Beschreibung

Rückgabe TRUE wenn A und B sich schneiden, aber ihre Innenräume sich nicht schneiden. Äquivalent dazu haben A und B mindestens einen Punkt gemeinsam, und die gemeinsamen Punkte liegen in mindestens einer Begrenzung. Bei Punkt/Punkt-Eingaben ist die Beziehung immer FALSE, da Punkte keine Begrenzung haben.

In mathematical terms: ST_Touches(A, B) ⇔ (Int(A) ⋂ Int(B) = ∅) ∧ (A ⋂ B ≠ ∅)

Diese Beziehung ist gegeben, wenn die DE-9IM-Schnittpunktmatrix für die beiden Geometrien einem der folgenden Werte entspricht:

  • FT*******

  • F**T*****

  • F***T****

[Anmerkung]

Diese Funktion beinhaltet automatisch einen Bounding-Box-Vergleich, der alle räumlichen Indizes verwendet, die für die Geometrien verfügbar sind. Um die Verwendung eines Indexes zu vermeiden, verwenden Sie stattdessen _ST_Touches.

Verbessert: 3.0.0 ermöglicht die Unterstützung von GEOMETRYCOLLECTION

Diese Methode implementiert die OGC Simple Features Implementation Specification for SQL 1.1. s2.1.1.2 // s2.1.13.3

Diese Methode setzt die SQL/MM-Spezifikation um. SQL-MM 3: 5.1.28

Beispiele

Das Prädikat ST_Touches liefert TRUE in den folgenden Beispielen.

Two Polygons touching along a boundary segment.

Code
SELECT ST_Touches(a, b)
FROM (SELECT
  'POLYGON ((10 190,10 70,80 70,80 130,50 160,120 160,120 190,10 190))'::geometry AS a,
  'POLYGON ((80 110,140 140,190 110,180 40,140 10,80 50,80 70,80 110))'::geometry AS b
) AS example;
Ausgabe von Rastern
t
Figure
Geometry figure for visual-st-touches-01

Two Polygons touching at a boundary point.

Code
SELECT ST_Touches(a, b)
FROM (SELECT
  'POLYGON ((10 190,10 70,80 70,80 130,50 160,120 160,120 190,10 190))'::geometry AS a,
  'POLYGON ((140 140,190 110,180 40,140 10,80 70,140 140))'::geometry AS b
) AS example;
Ausgabe von Rastern
t
Figure
Geometry figure for visual-st-touches-02

A Polygon and a LineString touching at the line endpoint.

Code
SELECT ST_Touches(a, b)
FROM (SELECT
  'POLYGON ((80 10,50 40,50 90,80 130,140 120,160 70,140 30,80 10))'::geometry AS a,
  'LINESTRING (30 190,180 150,160 70)'::geometry AS b
) AS example;
Ausgabe von Rastern
t
Figure
Geometry figure for visual-st-touches-03

Two LineStrings touching at their endpoints.

Code
SELECT ST_Touches(a, b)
FROM (SELECT
  'LINESTRING (10 10,60 140,140 190)'::geometry AS a,
  'LINESTRING (140 190,190 10)'::geometry AS b
) AS example;
Ausgabe von Rastern
t
Figure
Geometry figure for visual-st-touches-04

Two LineStrings touching where an endpoint meets the other line.

Code
SELECT ST_Touches(a, b)
FROM (SELECT
  'LINESTRING (10 10,60 140,140 190)'::geometry AS a,
  'LINESTRING (60 140,190 10)'::geometry AS b
) AS example;
Ausgabe von Rastern
t
Figure
Geometry figure for visual-st-touches-05

A Point touching a Polygon boundary.

Code
SELECT ST_Touches(a, b)
FROM (SELECT
  'POLYGON ((30 30,10 110,40 190,120 170,180 180,170 100,130 10,30 30))'::geometry AS a,
  'POINT (170 100)'::geometry AS b
) AS example;
Ausgabe von Rastern
t
Figure
Geometry figure for visual-st-touches-06
Code
SELECT ST_Touches('LINESTRING(0 0,1 1,0 2)'::geometry, 'POINT(1 1)'::geometry);
Ausgabe von Rastern
f
Figure
Geometry figure for visual-st-touches-07
Code
SELECT ST_Touches('LINESTRING(0 0,1 1,0 2)'::geometry, 'POINT(0 2)'::geometry);
Ausgabe von Rastern
t
Figure
Geometry figure for visual-st-touches-08