Ce face ST_Validate()
ST_Validate() combină verificarea cu returnarea valorii: geometria validă se întoarce neschimbată, iar cea invalidă devine NULL. Așa poți filtra datele greșite direct într-o expresie.
Manualul precizează că, la poligoane, inelele desenate în sensul acelor de ceasornic sunt inversate înainte de verificare. În testele pe serverul MySQL actual, textul poligoanelor valide a rămas neschimbat, indiferent de sens.
Parametri
| Parametru | Descriere |
|---|---|
geometrie |
Valoarea spațială. |
Ce returnează
Geometria (posibil cu inele inversate) sau NULL.
Exemple
Exemplul 1: Linie validă, linie dintr-un singur punct și poligon „fundiță”
SELECT ST_AsText(ST_Validate(ST_GeomFromText('LINESTRING(0 0,1 1)'))) AS valida,
ST_AsText(ST_Validate(ST_GeomFromText('LINESTRING(0 0,0 0)'))) AS invalida,
ST_AsText(ST_Validate(ST_GeomFromText('POLYGON((0 0,4 4,4 0,0 4,0 0))'))) AS fundita;
Rezultat
+---------------------+----------+---------+
| valida | invalida | fundita |
+---------------------+----------+---------+
| LINESTRING(0 0,1 1) | NULL | NULL |
+---------------------+----------+---------+
Exemplul 2: Aria doar pentru poligoanele valide
CREATE TABLE parcele (nr INT, forma POLYGON);
INSERT INTO parcele VALUES
(1, ST_GeomFromText('POLYGON((0 0,4 0,4 4,0 4,0 0))')),
(2, ST_GeomFromText('POLYGON((0 0,4 4,4 0,0 4,0 0))'));
SELECT nr, ST_Area(ST_Validate(forma)) AS arie FROM parcele;
Rezultat
+------+------+
| nr | arie |
+------+------+
| 1 | 16 |
| 2 | NULL |
+------+------+
Greșeli frecvente
- Folosești
ST_Validate()pe tabele foarte mari la fiecare interogare. Verificarea costă; salvează datele deja validate sau adaugă o coloană cu rezultatul luiST_IsValid().
Comenzi înrudite
ST_IsValid(): Verifică dacă o geometrie este validă după regulile OGC (de exemplu un poligon care nu se autointersectează).ST_Area(): Returnează aria unui poligon sau a unui MULTIPOLYGON; pentru SRID 4326, în metri pătrați.