Ce face ST_IsValid()
O geometrie poate fi scrisă corect (MySQL o acceptă), dar să nu aibă sens geometric: un poligon în formă de „fundiță”, cu laturile încrucișate, sau o linie cu toate punctele identice. ST_IsValid() returnează 1 pentru geometriile valide și 0 pentru cele invalide.
Funcțiile de calcul (arie, intersecție, relații) dau rezultate nedefinite pe geometrii invalide, deci merită verificat înainte. Colecția goală este considerată validă. Pentru SRID geografic, coordonatele trebuie să fie în interval.
Parametri
| Parametru | Descriere |
|---|---|
geometrie |
Valoarea spațială. |
Ce returnează
1 sau 0.
Exemple
Exemplul 1: Poligon corect și poligon „fundiță”
SELECT ST_IsValid(ST_GeomFromText('POLYGON((0 0,4 0,4 4,0 4,0 0))')) AS patrat,
ST_IsValid(ST_GeomFromText('POLYGON((0 0,4 4,4 0,0 4,0 0))')) AS fundita,
ST_IsValid(ST_GeomFromText('LINESTRING(0 0,0 0)')) AS linie_punct;
Rezultat
+--------+---------+-------------+
| patrat | fundita | linie_punct |
+--------+---------+-------------+
| 1 | 0 | 0 |
+--------+---------+-------------+
Exemplul 2: Găsirea zonelor invalide dintr-un tabel
CREATE TABLE zone_livrare (nume VARCHAR(20), forma POLYGON);
INSERT INTO zone_livrare VALUES
('Nord', ST_GeomFromText('POLYGON((0 0,4 0,4 4,0 4,0 0))')),
('Sud', ST_GeomFromText('POLYGON((0 0,4 4,4 0,0 4,0 0))'));
SELECT nume FROM zone_livrare WHERE NOT ST_IsValid(forma);
Rezultat
+------+
| nume |
+------+
| Sud |
+------+
Greșeli frecvente
- Calculezi aria unui poligon invalid fără verificare. Rezultatul poate fi orice număr; filtrează mai întâi cu
ST_IsValid().
Comenzi înrudite
ST_Validate(): Returnează geometria dacă este validă și NULL dacă este invalidă; util pentru a filtra datele greșite.ST_IsSimple(): Verifică dacă o geometrie este „simplă”: de exemplu o linie care nu se intersectează cu ea însăși.ST_Area(): Returnează aria unui poligon sau a unui MULTIPOLYGON; pentru SRID 4326, în metri pătrați.