ST_IsValid — ジオメトリーが 2次元で整形されているかのテスト。
boolean ST_IsValid(geometry g);
boolean ST_IsValid(geometry g, integer flags);
ST_Geometry 値が整形式であり、2次元で妥当かどうかを OGC 規則に沿ってテストします。3次元と 4次元のジオメトリーでは、評価は 2次元で行います。ジオメトリーが不正なら、PostgreSQL NOTICE が出力され、不正である理由の詳細が示されます。
flagsパラメータを持つ版が対応する値についてはST_IsValidDetailで説明しています。
ジオメトリー評価に関する詳細情報については「ジオメトリー検証」を参照してください。
|
|
|
SQL-MM では、ST_IsValid(NULL) は 0を返しますが、PostGIS では NULL を返します。 |
GEOS モジュールで実現しています。
フラグを受け付ける形式は、2.0.0から有効になりました。
このメソッドはOGC Simple Features Implementation Specification for SQL 1.1の実装です。
このメソッドはSQL/MM仕様の実装です。 SQL-MM 3: 5.1.9
|
|
|
OGC-SFS も SQL-MM も ST_IsValid でフラグ引数を含む仕様になっていません。フラグはPostGIS 独自拡張です。 |
SELECT ST_IsValid('LINESTRING(0 0,1 1)') As good_line,
ST_IsValid('POLYGON((0 0,1 1,1 2,1 1,0 0))') As bad_poly;
NOTICE: Self-intersection at or near point 0 0 good_line | bad_poly -----------+---------- t | f
登録されているジオメトリーカラム内の不正なジオメトリーがあるテーブルを探索する。
CREATE TEMP TABLE invalid_geometry_columns (
table_name text,
column_name text,
invalid_count bigint
);
DO $$
DECLARE
rec record;
invalid_count bigint;
BEGIN
FOR rec IN
SELECT f_table_schema, f_table_name, f_geometry_column
FROM geometry_columns
ORDER BY f_table_schema, f_table_name, f_geometry_column
LOOP
EXECUTE format(
'SELECT count(*) FROM %I.%I WHERE NOT ST_IsValid(%I, 0)',
rec.f_table_schema,
rec.f_table_name,
rec.f_geometry_column
) INTO invalid_count;
IF invalid_count
> 0 THEN
INSERT INTO invalid_geometry_columns
VALUES (
format('%I.%I', rec.f_table_schema, rec.f_table_name),
rec.f_geometry_column,
invalid_count
);
END IF;
END LOOP;
END;
$$;
SELECT * FROM invalid_geometry_columns;