- Catégories :
ST_ISVALID¶
Renvoie TRUE si l’objet GEOGRAPHY ou GEOMETRY représente une forme valide. Parmi les formes non valides figurent les formes avec des auto-intersections et des pointes.
Syntaxe¶
ST_ISVALID( <geography_or_geometry_expression> )
Arguments¶
geography_or_geometry_expression
L’argument doit être une expression de type GEOGRAPHY ou GEOMETRY.
Renvoie¶
Cela renvoie une valeur BOOLEAN.
Notes sur l’utilisation¶
ST_ISVALID vérifie uniquement la validité d’une forme. Aucune modification des données n’a lieu. Lors de la création d’objets à partir de formats spatiaux (tels que WKT, WKB, EWKT, EWKB ou GeoJSON), des fonctions de conversion (par exemple, TO_GEOGRAPHY, TO_GEOMETRY, ST_GEOGRAPHYFROMWKT ou ST_GEOMETRYFROMWKT) analysent l’entrée et tentent par défaut de valider ou de réparer les formes. Si une fonction de conversion ne peut pas réparer une forme, elle renvoie une erreur, sauf si vous acceptez des formes non valides.
Pour ingérer des données susceptibles d’être non valides (par exemple, des données que vous prévoyez de corriger ultérieurement), spécifiez TRUE pour l’argument
allow_invalid
supplémentaire lorsque vous appelez la fonction de conversion pour autoriser une forme non valide. Vous pouvez alors utiliser la fonction ST_ISVALID pour signaler les lignes non valides dans une table.Certaines fonctions géospatiales peuvent renvoyer une erreur ou des résultats inutilisables lorsque des formes non valides sont données. Utiliser la fonction ST_ISVALID pour vérifier la validité. Vous pouvez corriger des formes non valides avant d’effectuer des analyses spatiales.
Lorsque les formes ne sont pas valides, les corrections simples comprennent la mise en mémoire tampon avec une petite distance positive ou négative (par exemple, pour supprimer les minuscules pointes ou résoudre les auto-intersections), puis la vérification de la validité à l’aide de la fonction ST_ISVALID.
Exemples¶
Les exemples suivants utilisent la fonction ST_ISVALID.
Déterminer si un polygone est une forme valide :
SELECT ST_ISVALID(
TO_GEOGRAPHY('POLYGON((-93.086 37.557,-86.699 37.497,-93.198 35.123,-93.086 37.557))')
) AS is_valid;
+----------+
| IS_VALID |
|----------|
| True |
+----------+
SELECT ST_ISVALID(
TO_GEOGRAPHY( 'POLYGON((-92.799 37.601,-88.240 37.617,-92.733 36.198,-88.305 36.171,-92.799 37.601))', TRUE)
) AS is_valid;
+----------+
| IS_VALID |
|----------|
| False |
+----------+
Corriger une forme non valide à l’aide de la fonction ST_BUFFER pour ajouter un petit tampon :
WITH g AS (
SELECT TO_GEOMETRY('POLYGON((0 0, 2 2, 2 0, 0 2, 0 0))', TRUE) AS geom
)
SELECT ST_ISVALID(geom) AS is_valid_before_buffer,
ST_ISVALID(ST_BUFFER(geom, -0.001)) AS is_valid_after_buffer
FROM g;
+------------------------+-----------------------+
| IS_VALID_BEFORE_BUFFER | IS_VALID_AFTER_BUFFER |
|------------------------+-----------------------|
| False | True |
+------------------------+-----------------------+