ST_Validate() în MySQL

Returnează geometria dacă este validă și NULL dacă este invalidă; util pentru a filtra datele greșite.

Sintaxă
ST_Validate(geometrie)

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 lui ST_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.