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?
Shapefile xuất khẩu với các lỗ đầy được đánh dấu bằng mũi tên
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)))
ogr2ogr
và pgsql2shp
khá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.