Kategorien:

Geodatenfunktionen

ST_ISVALID

Gibt TRUE zurück, wenn das angegebene GEOGRAPHY- oder GEOMETRY-Objekt für eine gültige Form steht. Beispiele für ungültige Formen sind Formen mit Selbstüberschneidungen und Spitzen.

Syntax

ST_ISVALID( <geography_or_geometry_expression> )
Copy

Argumente

geography_or_geometry_expression

Das Argument muss ein Ausdruck vom Typ GEOGRAPHY oder GEOMETRY sein.

Rückgabewerte

Gibt einen BOOLEAN-Wert zurück.

Nutzungshinweise

  • ST_ISVALID prüft nur die Gültigkeit einer Form. Sie ändert keine Daten. Beim Erstellen von Objekten aus räumlichen Formaten (wie WKT, WKB, EWKT, EWKBoder GeoJSON) parsen Konvertierungsfunktionen (z. B. TO_GEOGRAPHY, TO_GEOMETRY, st_geographyfromwkt`oder :doc:`st_geometryfromwkt) die Eingabe und versuchen standardmäßig, Formen zu validieren oder zu reparieren. Wenn eine Konvertierungsfunktion eine Form nicht reparieren kann, gibt sie einen Fehler zurück, es sei denn, Sie akzeptieren ungültige Formen.

  • Um Daten aufzunehmen, die möglicherweise ungültig sind (z. B. Daten, die Sie später korrigieren möchten), geben Sie TRUE für das zusätzliche allow_invalid Argument an, wenn Sie die Konvertierungsfunktion aufrufen, um eine ungültige Form zuzulassen. Sie können dann die ST_ISVALID-Funktion zum Markieren von ungültigen Zeilen in einer Tabelle verwenden.

  • Einige Geodatenfunktionen können einen Fehler oder nicht verwendbare Ergebnisse zurückgeben, wenn sie ungültige Formen erhalten. Verwenden Sie die ST_ISVALID-Funktion zur Überprüfung der Gültigkeit. Sie können ungültige Formen korrigieren, bevor Sie eine räumliche Analyse durchführen.

  • Wenn Formen ungültig sind, gehören zu den einfachen Korrekturen das Puffern mit einem kleinen positiven oder negativen Abstand (z. B. um kleine Spitzen zu entfernen oder Selbstüberschneidungen aufzulösen) und das anschließende Überprüfen der Gültigkeit anhand derST_ISVALID-Funktion.

Beispiele

Die folgenden Beispiele verwenden die Funktion ST_ISVALID.

Feststellen, ob ein Polygon eine gültige Form ist:

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;
Copy
+----------+
| 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;
Copy
+----------+
| IS_VALID |
|----------|
| False    |
+----------+

Korrigieren Sie eine ungültige Form mit der:doc:st_buffer -Funktion, um einen kleinen Puffer hinzuzufügen.

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;
Copy
+------------------------+-----------------------+
| IS_VALID_BEFORE_BUFFER | IS_VALID_AFTER_BUFFER |
|------------------------+-----------------------|
| False                  | True                  |
+------------------------+-----------------------+