Đa giác PostGIS khi được chuyển đổi thành shapefile không khớp với hình dạng nguồn


8

Tôi đang cố gắng chuyển đổi bản ghi MULTIPOLYGON từ PostGIS (v2.2.2) sang shapefile thông qua QGIS (v2.18.9), nhưng hình dạng nguồn và shapefile kết quả không khớp như hiển thị trên hình ảnh bên dưới (lớp màu đỏ là nguồn và lớp màu xanh lá cây là shapefile kết quả). Tôi nhận được kết quả tương tự nếu tôi thực hiện chuyển đổi qua ogr2ogr từ GDAL v2.0.0. Việc chuyển đổi này mất khoảng 40 phút để hoàn thành.

Nếu tôi đổ hình dạng nguồn vào POLYGON và thực hiện chuyển đổi, shapefile kết quả là chính xác và chuyển đổi nhanh hơn nhiều (7 giây + 17 giây cho kết xuất). Nhưng, thay vì 5 tính năng, bây giờ tôi kết thúc với 305188.

Các bản ghi MULTIPOLYGON nguồn được ST_Union tạo trên các ô liền kề nếu có vấn đề.

Tui bỏ lỡ điều gì vậy? Có cách nào để thực hiện chuyển đổi chính xác? Bất cứ ai có thể giải thích tại sao điều này xảy ra?

Nguồn hình học Nguồn từ PostGIS

Shapefile xuất khẩu với các lỗ đầy được đánh dấu bằng mũi tên Shapefile xuất khẩu


Tôi có thêm chi tiết:

pssql2shp tạo ra shapefile kết quả tương tự như QGIS hoặc ogr2ogr.

@dbaston - Tôi đã cắt hầu hết dữ liệu và để lại phần xung quanh khu vực được trình bày trên các hình ảnh trên (xung quanh ('ĐIỂM (-89,45 29,99)', 4326)). Tôi đã chuyển đổi mẫu nhỏ này và nhận được kết quả tương tự. Nếu bạn hoặc bất kỳ ai muốn thử chuyển đổi trên cùng một mẫu, bạn có thể nhận kết xuất tại đây:

Sao lưu dữ liệu mẫu từ PostgreSQL v9.5

Sau 31 giờ, ST_IsValid trả về đúng trên tất cả các dạng hình học từ bộ dữ liệu hoàn chỉnh. Tôi đã nhận được kết quả tương tự cho mẫu nhỏ hơn có sẵn trên liên kết ở trên. Tuy nhiên, Kiểm tra tính hợp lệ trong QGIS cho cùng một bộ dữ liệu nhỏ hơn được trả về:

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

Làm thế nào có sự khác biệt trong kiểm tra tính hợp lệ trong PostGIS và QGIS?

Để kiểm tra thêm, tôi đã loại bỏ tất cả các phần đa giác trừ phần được đánh dấu màu xanh trên hình trên. Tôi đã kiểm tra định dạng WKT của nó và nó có vẻ tốt. Và bây giờ việc chuyển đổi sang shapefile chỉ với tính năng này là chính xác.

Liệu điều này có ý nghĩa gì? Tôi đã kiểm tra thêm các bộ dữ liệu được tạo bởi ST_Union trên các ô liền kề và phát hiện ra rằng vấn đề tương tự cũng tồn tại ở đó khi chuyển đổi sang shapefile. Dữ liệu tương tự được chuyển đổi sang GeoJSON tạo ra kết quả chính xác.

MULTIPOLYGON được tạo từ hình học POLYGON với biểu thức sau:

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

1
Có thể có lỗi cấu trúc liên kết trong dữ liệu nguồn. Vì dữ liệu có trong PostGIS, bạn có thể kiểm tra hình học bằng ST_IsValid và ST_IsValidR Lý do hoặc sửa chúng bằng ST_MakeValid.
dùng49584

Xin lỗi vì đã không bình luận ở đây, nhưng tôi chưa có đặc quyền. Tôi đã tự hỏi làm thế nào bạn đã làm: "Tôi nhận được kết quả tương tự nếu tôi thực hiện chuyển đổi qua ogr2ogr từ GDAL v2.0.0" Bạn có thể cụ thể hơn .. mã không? Bạn đã thử pssql2shp chưa?
Martinyt

Cảm ơn. Tôi đang chạy nó bây giờ, nhưng phải mất một thời gian rất dài để kiểm tra tính hợp lệ hình học. Tôi sẽ trả lời khi kiểm tra hoàn tất.
Dejan Stojanovic

2
Tôi đã thấy hành vi này trước đây trong hình học phức tạp (hợp lệ) với các vòng lồng nhau bên trong các lỗ. Chúng có thể được xử lý bởi cả hai ogr2ogrpgsql2shpkhác nhau, nhưng tôi đã thấy các trường hợp làm hỏng từng cái trong số chúng. Nếu bạn có thể giảm sự cố xuống một đầu vào nhỏ hơn, nó sẽ hữu ích như một báo cáo lỗi.
dbaston

Tôi đã chuyển đổi mẫu của bạn thành GeoPackage và kết quả giống như Postgis. Bạn có thực sự cần sử dụng định dạng shapefile? Ảnh chụp màn hình . GeoPackage tốt hơn nhiều :-)
jgrocha

Câu trả lời:


1

Nó dường như là một lỗi trong QGIS (bao gồm 2.18.16) khi hiển thị đa dữ liệu từ SHP. Nếu bạn mở SHP của mình trong ArcMap - vấn đề này không xảy ra. Hoặc, nếu bạn xuất đa dữ liệu của mình sang SQLite - vấn đề này cũng không xảy ra. Hy vọng ai đó từ nhóm QGIS nhìn thấy câu hỏi này.

SHP sử dụng ArcMap 10 SQLite sử dụng QGIS 2.18.16

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.