シェープファイルに変換したときのPostGISマルチポリゴンがソースジオメトリと一致しない


8

MULTIPOLYGONレコードをPostGIS(v2.2.2)からQGIS(v2.18.9)を介してシェープファイルに変換しようとしていますが、下の画像に表示されているように、ソースジオメトリと結果のシェープファイルが一致しません(赤いレイヤーがソースです)緑のレイヤーが結果のシェープファイルです)。GDAL v2.0.0からogr2ogrを介して変換を実行しても、同じ結果が得られます。この変換は完了するまでに約40分かかります。

ソースジオメトリをPOLYGONにダンプして変換を実行すると、結果のシェープファイルは正しく、変換がはるかに高速になります(ダンプには7秒+ 17秒)。しかし、5つの機能ではなく、305188になりました。

ソースのMULTIPOLYGONレコードは、必要に応じて、隣接するセルのST_Unionによって作成されます。

何か不足していますか?正しい変換を実行する方法はありますか?なぜこれが起こっているのか誰でも説明できますか?

ソースジオメトリ PostGISからのソース

矢印でマークされた穴のあるエクスポートされたシェープファイル エクスポートされたシェープファイル


詳細があります:

pgsql2shpは、QGISやogr2ogrのような同じ結果のシェープファイルを生成します。

@dbaston-私はほとんどのデータを切り取って、上の画像に表示されている領域の周りの部分を残しました(周り( 'POINT(-89.45 29.99)'、4326))。私はこの小さなサンプルを変換し、同じ結果を得ました。あなたまたは誰かが同じサンプルで変換を試したい場合は、ここでダンプを取得できます:

PostgreSQL v9.5からのサンプルデータバックアップ

31時間後、ST_IsValidは完全なデータセットのすべてのジオメトリでtrueを返しました。上記のリンクから入手できる小さいサンプルでも同じ結果が得られました。ただし、返された同じ小さいデータセットについてQGISで有効性を確認します。

ring 1 of polygon 712 not in exterior ring  
ring 2 of polygon 712 not in exterior ring  
ring 3 of polygon 712 not in exterior...

PostGISとQGISの有効性チェックに違いがあるのはなぜですか?

さらに確認するために、上の画像で青でマークされている部分を除くすべてのポリゴンパーツを削除しました。私はそのWKT形式を確認しましたが、問題はありません。そして今、この機能だけを備えたシェープファイルへの変換は正しかった。

これは意味がありますか?隣接するセルでST_Unionによって作成されたより多くのデータセットをチェックしたところ、シェープファイルに変換するときに同じ問題が存在することがわかりました。同じデータをGeoJSONに変換すると、正しい結果が得られます。

MULTIPOLYGONは、次の式を使用してPOLYGONジオメトリから作成されました。

st_multi(st_union(st_buffer(geom,0)))

1
ソースデータにトポロジエラーがある可能性があります。データはPostGISにあるため、ST_IsValidおよびST_IsValidReasonを使用してジオメトリを確認するか、ST_MakeValidを使用してそれらを修正できます。
user30184 '10 / 10/17

ここでコメントしないで申し訳ありませんが、私はまだ特権を持っていません。「GDAL v2.0.0からogr2ogrを介して変換を実行しても同じ結果が得られます。もっと具体的なコードを教えてください。」コード pgsql2shpを試しましたか?
Martinyt 2017年

ありがとう。現在実行していますが、ジオメトリの有効性を確認するのに非常に長い時間がかかります。確認が取れ次第ご連絡いたします。
Dejan Stojanovic 2017年

2
この動作は、穴の内側にネストされたリングを持つ(有効な)複雑なジオメトリで以前に見たことがあります。これらは両方で処理できますがogr2ogrpgsql2shpそれぞれに問題がある場合もあります。問題を小さな入力に減らすことができれば、バグレポートとして役立ちます。
dbaston 2017年

サンプルをGeoPackageに変換しましたが、結果はPostgisと同じです。本当にシェープファイル形式を使用する必要がありますか?スクリーンショット。GeoPackageの方がはるかに優れています:-)
jgrocha 2018

回答:


1

SHPからマルチポリゴンをレンダリングする場合、QGIS(2.18.16を含む)のバグのようです。ArcMapでSHPを開いた場合-この問題は発生しません。または、マルチポリゴンをSQLiteにエクスポートすると、この問題も発生しません。うまくいけば、QGISチームの誰かがこの質問を見てくれます。

ArcMap 10を使用したSHP QGIS 2.18.16を使用するSQLite

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.