カテゴリ:

地理空間関数

ST_ISVALID

指定された GEOGRAPHY または GEOMETRY オブジェクトが 有効な形状 を表している場合、TRUE を返します。無効な形状の例としては、自己交差やとがった突起のある形状があります。

構文

ST_ISVALID( <geography_or_geometry_expression> )
Copy

引数

geography_or_geometry_expression

引数は型 GEOGRAPHY または GEOMETRY の式にする必要があります。

戻り値

これは BOOLEAN 値を返します。

使用上の注意

  • ST_ISVALID は形状の有効性のみをチェックします。データは変更しません。空間形式(WKT、WKB、EWKT、EWKB、GeoJSON など)からオブジェクトを構築する場合、変換関数(TO_GEOGRAPHYTO_GEOMETRYST_GEOGRAPHYFROMWKTST_GEOMETRYFROMWKT など)は入力を解析し、デフォルトで形状の検証または修復を試みます。変換関数が形状を修復できない場合は、無効な形状を許可しない限り、エラーを返します。

  • 無効な可能性があるデータ(後で修正する予定のデータなど)を取り込むには、変換関数を呼び出すときに、追加の allow_invalid 引数に TRUE を指定して、無効な形状を許可してください。その後、ST_ISVALID 関数を使用して、テーブル内の無効な行にフラグを付けることができます。

  • 一部の地理空間関数は、無効な形状を指定すると、エラーまたは使用できない結果を返す場合があります。ST_ISVALID 関数を使用して有効性を確認します。空間分析を実行する前に、無効な形状を修正することができます。

  • 形状が無効な場合の簡単な修正方法としては、わずかに正または負の距離でバッファ処理を行うこと(たとえば、小さな突起を削除したり、自己交差を解消したりするため)と、その後に ST_ISVALID 関数を使用して再度有効性を確認することが含まれます。

以下の例では、 ST_ISVALID 関数を使用しています。

ポリゴンが有効な形状であるかどうかを判断します。

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    |
+----------+

ST_BUFFER 関数を使用して小さなバッファを追加することで、無効な形状を修正します。

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                  |
+------------------------+-----------------------+