- カテゴリ:
ST_ISVALID¶
指定された GEOGRAPHY または GEOMETRY オブジェクトが 有効な形状 を表している場合、TRUE を返します。無効な形状の例としては、自己交差やとがった突起のある形状があります。
構文¶
ST_ISVALID( <geography_or_geometry_expression> )
引数¶
geography_or_geometry_expression
引数は型 GEOGRAPHY または GEOMETRY の式にする必要があります。
戻り値¶
これは BOOLEAN 値を返します。
使用上の注意¶
ST_ISVALID は形状の有効性のみをチェックします。データは変更しません。空間形式(WKT、WKB、EWKT、EWKB、GeoJSON など)からオブジェクトを構築する場合、変換関数(TO_GEOGRAPHY、TO_GEOMETRY、ST_GEOGRAPHYFROMWKT、ST_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;
+----------+
| 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 |
+----------+
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;
+------------------------+-----------------------+
| IS_VALID_BEFORE_BUFFER | IS_VALID_AFTER_BUFFER |
|------------------------+-----------------------|
| False | True |
+------------------------+-----------------------+