PostGIS Multipolygon ketika dikonversi ke shapefile tidak cocok dengan geometri sumber

8

Saya mencoba mengubah catatan MULTIPOLYGON dari PostGIS (v2.2.2) ke shapefile melalui QGIS (v2.18.9), tetapi sumber geometri dan bentuk yang dihasilkan tidak cocok seperti yang ditampilkan pada gambar di bawah ini (lapisan merah adalah sumbernya) dan lapisan hijau adalah shapefile yang dihasilkan). Saya mendapatkan hasil yang sama jika saya melakukan konversi melalui ogr2ogr dari GDAL v2.0.0. Konversi ini membutuhkan waktu sekitar 40 menit untuk selesai.

Jika saya membuang sumber geometri ke POLYGON dan melakukan konversi, bentuk yang dihasilkan benar dan konversi jauh lebih cepat (7 detik + 17 detik untuk dump). Tapi, bukannya 5 fitur, sekarang saya berakhir dengan 305188.

Catatan sumber MULTIPOLYGON dibuat oleh ST_Union pada sel yang berdekatan jika itu penting.

Apakah saya melewatkan sesuatu? Apakah ada cara untuk melakukan konversi yang benar? Adakah yang bisa menjelaskan mengapa ini terjadi?

Sumber geometri Sumber dari PostGIS

Shapefile yang diekspor dengan lubang yang diisi ditandai dengan panah Shapefile yang diekspor


Saya memiliki detail lebih lanjut:

pgsql2shp menghasilkan shapefile yang sama seperti QGIS atau ogr2ogr.

@dbaston - Saya memang memotong sebagian besar data dan meninggalkan bagian di sekitar area yang disajikan pada gambar di atas (sekitar ('POINT (-89,45 29,99)', 4326)). Saya mengonversi sampel kecil ini dan mendapatkan hasil yang sama. Jika Anda atau siapa pun ingin mencoba konversi pada sampel yang sama, Anda bisa mendapatkan dump di sini:

Sampel cadangan data dari PostgreSQL v9.5

Setelah 31 jam, ST_IsValid kembali benar pada semua geometri dari kumpulan data lengkap. Saya mendapat hasil yang sama untuk sampel yang lebih kecil yang tersedia di tautan di atas. Namun, Periksa validitas dalam QGIS untuk set data yang lebih kecil yang dikembalikan:

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...

Kenapa ada perbedaan dalam pemeriksaan validitas pada PostGIS dan QGIS?

Untuk memeriksa lebih lanjut, saya menghapus semua bagian poligon kecuali yang ditandai biru pada gambar di atas. Saya memeriksa format WKT-nya dan terlihat bagus. Dan sekarang konversi ke shapefile hanya dengan fitur ini sudah benar.

Apakah ini masuk akal? Saya memang memeriksa lebih banyak set data yang dibuat oleh ST_Union pada sel-sel yang berdekatan dan menemukan bahwa masalah yang sama ada di sana juga ketika mengkonversi ke shapefile. Data yang sama yang dikonversi ke GeoJSON menghasilkan hasil yang benar.

MULTIPOLYGON dibuat dari geometri POLYGON dengan ekspresi berikut:

st_multi(st_union(st_buffer(geom,0)))
Dejan Stojanovic
sumber
1
Mungkin ada kesalahan topologi dalam sumber data. Karena data ada di PostGIS, Anda dapat memeriksa geometri dengan ST_IsValid dan ST_IsValidReason atau memperbaikinya dengan ST_MakeValid.
user30184
Maaf karena tidak berkomentar di sini, tetapi saya belum memiliki hak istimewa. Saya bertanya-tanya bagaimana Anda melakukannya: "Saya mendapatkan hasil yang sama jika saya melakukan konversi melalui ogr2ogr dari GDAL v2.0.0" Bisakah Anda lebih spesifik .. kode? Sudahkah Anda mencoba pgsql2shp?
Martinyt
Terima kasih. Saya menjalankannya sekarang, tetapi butuh waktu sangat lama untuk memeriksa validitas geometri. Saya akan merespons ketika cek selesai.
Dejan Stojanovic
2
Saya telah melihat perilaku ini sebelumnya dalam geometri kompleks (valid) dengan cincin bersarang di dalam lubang. Ini dapat ditangani oleh keduanya ogr2ogrdan pgsql2shpberbeda, tetapi saya telah melihat kasus-kasus yang masing-masing tunggul. Jika Anda dapat mengurangi masalah menjadi input yang lebih kecil, ini akan berguna sebagai laporan bug.
dbaston
Saya mengonversi sampel Anda ke GeoPackage dan hasilnya sama dengan Postgis. Apakah Anda benar-benar perlu menggunakan format shapefile? Screenshot . GeoPackage jauh lebih baik :-)
jgrocha

Jawaban:

1

Tampaknya ada bug di QGIS (termasuk 2.18.16) saat merender multipoligon dari SHP. Jika Anda membuka SHP di ArcMap - masalah ini tidak terjadi. Atau, jika Anda mengekspor multipoligon Anda ke SQLite - masalah ini tidak terjadi juga. Semoga seseorang dari tim QGIS melihat pertanyaan ini.

SHP menggunakan ArcMap 10 SQLite menggunakan QGIS 2.18.16

Ralph Tee
sumber