3

オーストラリア統計局によって 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%'

そうではありません (以前に小さなバッファーのトリックを試しましたが、このレベルまでは押し上げませんでした)。

これは修正するには少し多すぎるようです。

4

2 に答える 2

2

st_buffer(最初に半径 0、次に 0.000000001 など) を実行するかst_snaptogrid、これらの無効なジオメトリを「修復」してみてください (ここここのドキュメントへのリンク)。

Mapinfo またはその他のソースからインポートするときにこれらのエラーがポップアップするのを見てきましたogr2ogr2(基本的には、より高い精度や丸めの問題が原因です)。Postgis の開発者は特定の精度低減関数を含めることを計画していたと思いますが、私の記憶が正しければ、1.4 にはありません。

それでも問題が解決しない場合は、現在の postgis バージョンとポリゴンと投影の wkt バージョンを投稿してください。ポリゴンが無効になる原因は他にも考えられます。

于 2011-01-26T23:20:33.863 に答える
1

ハロー

ST_IsValidReason(geometry)を試して、何が問題なのかの手がかりを得ましたか?

/ニクラス

于 2011-01-28T22:40:08.733 に答える