回答:
いつ、どこで障害が発生するかを予測することはできないため、不正な形式のデータを保持することは悪い考えです。さらに、不正なデータは、最も悪質で幻想的なバグであるハイゼンバグを引き起こす可能性があります。
無効なジオメトリを格納することで起こりうる結果を議論するのは少し無意味だと思います。とはいえ、結果には次のものが含まれます。
ST_Distance
不正確または単純な間違った数字を返します)私のアドバイス-小さなバッファがデータの一貫性を著しく損なわない場合は、それらを使用して上記のいずれかが発生しないようにしてください。データを有効にしてください。
ST_Buffer(the_geom, 0.0000001)
自己交差のトリックを行うかもしれません。わずかに大きいジオメトリの結果が深刻でない場合にのみ使用してください。
ST_Buffer(the_geom, 0.0000001)
トリックは間違いなく大いに役立ちます。
MULTIPOLYGON
、単一ではなく、2つのPolygon として処理する必要がありますPOLYGON
。可能であれば、元のWKTを取得してください。
最初に無効なジオメトリがデータベースに入るのを防ぐことができます。PostgreSQL / PostGISユーザーの場合、これはチェック制約で簡単に行えます。たとえばpublic.my_valid_table
、ポリゴンジオメトリの列を持つテーブルを考えてgeom
、次のSQL / DDLを使用します。
ALTER TABLE public.my_valid_table
ADD CONSTRAINT enforce_valid_geom CHECK (st_isvalid(geom));
注:このテーブルには、制約を適用する前に有効なポリゴンが必要です。
その後、無効なジオメトリを挿入/追加しようとすると、エラーが表示されます。
ERROR: new row for relation "my_valid_table" violates check constraint "enforce_valid_geom"