MapINFOデータをポストGISにインポートする際に、ジオメトリの問題を回避するにはどうすればよいですか?

StackOverflow https://stackoverflow.com/questions/4811207

  •  25-10-2019
  •  | 
  •  

質問

私はオーストラリアの国勢調査コレクションの形に対処する問題に直面しています オーストラリア統計局によってMapInfo形式で提供. 。これらをポストギスデータベースにロードしています OGR2OGRツール, 、これは大部分の形状で機能しますが、それらのすべてではありません。

私が直面している問題の簡単な例は、このようなクエリです(NSWデータセットをロードする必要があります):

SELECT st_union(wkb_geometry) FROM cd06answ WHERE cd_code_2006 LIKE '1291%'

このクエリの結果は、予想される形状ではなく、nullです。

テーブルにはヌル値はありませんが、無効な形状があります。例えば

SELECT cd_code_2006 FROM cd06answ 
WHERE cd_code_2006 LIKE '1291%' AND NOT st_isvalid(wkb_geometry)

値「1291301」と「1291321」を取得します。無効なジオメトリを除外すると、ST_UNIONが成功します。

接続 量子GIS データベースには、問題の両方の形状をレンダリングできます。彼らは幾何学的連合の一部であるべきなので、どういうわけか問題を解決する必要があります。

MapINFOデータをPostGISにロードするより良い方法はありますか?または、ポストGIS内でデータを修正する手段?データベースデータはOKレンダリングであるため、保存することができるはずですよね?

編集: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の最初と最後は真実であるということですが、真ん中の幾何学はそうではありません。

残念ながら、どちらのアプローチも組合を修正しません

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%'

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

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

役に立ちましたか?

解決

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

MapInfoまたは他のソースからインポートするときにこれらのエラーがポップアップするのを見てきました ogr2ogr2 (基本的には、より高い精度および/または丸めの問題によって引き起こされます)。 PostGIS開発者は特定の精度還元剤機能を含めることを計画していたと思いますが、正しく思い出せば1.4にそれはありません。

それが役に立たない場合は、現在のポストGISバージョンとポリゴンと投影のWKTバージョンを投稿してください。ポリゴンの無効性には他の考えられる原因があります。

他のヒント

ハロ

やってみました st_isvalidreason(幾何学) 何が間違っているのかについての手がかりを得るために?

/nicklas

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top