Ce face ST_Touches()
Două geometrii „se ating” dacă au puncte comune doar pe contur: două cartiere vecine cu o stradă comună, sau un traseu care începe exact pe marginea unei zone. Dacă interioarele se suprapun, rezultatul este 0.
Pentru două puncte (sau MULTIPOINT-uri) rezultatul este NULL, pentru că punctele nu au margine.
Parametri
| Parametru | Descriere |
|---|---|
g1, g2 |
Geometriile comparate. |
Ce returnează
1, 0 sau NULL.
Exemple
Exemplele de pe această pagină pornesc de la datele de mai jos. Rulează mai întâi acest cod, apoi exemplul.
CREATE TABLE cartiere (
id INT PRIMARY KEY,
nume VARCHAR(20),
forma POLYGON NOT NULL
);
INSERT INTO cartiere VALUES
(1, 'Centru', ST_GeomFromText('POLYGON((0 0,4 0,4 4,0 4,0 0))')),
(2, 'Copou', ST_GeomFromText('POLYGON((0 4,4 4,4 8,0 8,0 4))')),
(3, 'Tătărași', ST_GeomFromText('POLYGON((3 1,7 1,7 5,3 5,3 1))')),
(4, 'Galata', ST_GeomFromText('POLYGON((10 0,13 0,13 3,10 3,10 0))'));
Exemplul 1: Relațiile dintre cartiere
SELECT a.nume, b.nume AS cu,
ST_Touches(a.forma, b.forma) AS vecine,
ST_Overlaps(a.forma, b.forma) AS suprapuse,
ST_Disjoint(a.forma, b.forma) AS separate
FROM cartiere a JOIN cartiere b ON a.id < b.id
ORDER BY a.id, b.id;
Rezultat
+-------------+-------------+--------+-----------+----------+
| nume | cu | vecine | suprapuse | separate |
+-------------+-------------+--------+-----------+----------+
| Centru | Copou | 1 | 0 | 0 |
| Centru | Tătărași | 0 | 1 | 0 |
| Centru | Galata | 0 | 0 | 1 |
| Copou | Tătărași | 0 | 1 | 0 |
| Copou | Galata | 0 | 0 | 1 |
| Tătărași | Galata | 0 | 0 | 1 |
+-------------+-------------+--------+-----------+----------+
Greșeli frecvente
- Folosești
ST_Touches()pentru „la mai puțin de X km”. Funcția cere contact exact; pentru apropiere foloseșteST_Distance().
Comenzi înrudite
ST_Overlaps(): Verifică dacă două geometrii de aceeași dimensiune se suprapun parțial (zona comună nu este niciuna dintre ele).ST_Intersects(): Verifică dacă două geometrii au măcar un punct comun (inclusiv pe margine).MBRTouches() și MBROverlaps(): Verifică dacă dreptunghiurile de încadrare se ating doar pe margine, respectiv dacă se suprapun parțial.