オーストラリア統計局によって MapInfo 形式で提供されているオーストラリアの国勢調査コレクションの図形を処理する際に問題に直面しています。これらをogr2ogr ツールを使用して PostGIS データベースにロードしていますが、すべての形状では機能しません。
私が直面している問題の簡単な例は、次のようなクエリです (NSW データ セットの読み込みが必要です)。
SELECT st_union(wkb_geometry) FROM cd06answ WHERE cd_code_2006 LIKE '1291%'
このクエリの結果は、期待される形状ではなく、NULL です。
テーブルに null 値はありませんが、無効なジオメトリがあります。例えば
SELECT cd_code_2006 FROM cd06answ
WHERE cd_code_2006 LIKE '1291%' AND NOT st_isvalid(wkb_geometry)
値「1291301」および「1291321」を取得します。無効なジオメトリを除外すると、st_union は成功します。
Quantum GISをデータベースに接続すると、問題の両方の形状をレンダリングできます。それらは幾何学的結合の一部でなければならないので、どうにかして問題を解決する必要があります。
MapInfo データを PostGIS にロードするより良い方法はありますか? または、PostGIS 内のデータを修正する手段はありますか? データベースのデータは正常にレンダリングされるので、保存できるはずですよね?
編集: Christophe のフィードバックに基づいて、st_buffer と st_snaptogrid をもう少し試しました。このクエリの結果:
SELECT
cd_code_2006,
st_isvalid(st_buffer(wkb_geometry,0)),
st_isvalid(st_snaptogrid(wkb_geometry, 0.00000001)),
st_isvalid(st_snaptogrid(wkb_geometry, 0.0000001))
FROM
cd06answ
WHERE
cd_code_2006 LIKE '1291%'
AND
NOT st_isvalid(wkb_geometry)
影響を受けるジオメトリの両方で、3 つの st_isvalids の最初と最後が true であり、中央のものはそうではありません。
残念ながら、どちらのアプローチも結合を修正しません。
SELECT st_union(st_buffer(wkb_geometry,0.4)) FROM cd06answ
WHERE cd_code_2006 LIKE '1291%'
結果はジオメトリになりますが、
SELECT st_union(st_buffer(wkb_geometry,0.3)) FROM cd06answ
WHERE cd_code_2006 LIKE '1291%'
そうではありません (以前に小さなバッファーのトリックを試しましたが、このレベルまでは押し上げませんでした)。
これは修正するには少し多すぎるようです。