Làm thế nào để tránh tạo Shapefiles bị hỏng trong khi chỉnh sửa?


15

Tôi có một trong những kỹ thuật viên GIS của tôi số hóa một số dòng trong QGIS ở định dạng shapefile. Tôi không biết làm thế nào anh ta làm điều đó (và anh ta cũng không), nhưng bằng cách nào đó, shapefile trở nên hư hỏng. Nó đang tạo ra các dòng ngẫu nhiên hoặc một số dòng anh ta tạo sẽ biến mất. Tôi đã đi vào ArcCatalogue để xem nó trông như thế nào trong ArcGIS và đây là những gì tôi thấy:

nhập mô tả hình ảnh ở đây

Lưu ý biểu tượng dấu hỏi nơi tôi sẽ thấy biểu tượng 'dòng' shapefile. Rõ ràng ArcCatalogue không thể đọc tệp này. Ngoài ra, một tệp dbf thứ hai dường như đã được tạo với '_packed' được đính kèm ở cuối. Khi tôi nhìn vào shapefile bằng Windows explorer, tôi thấy rằng đã có một .dbf cho shapefile 'M3_PRE_SMU_lines_10Apr13_SMC.dbf', vì vậy tôi không biết cái này được đóng gói từ đâu và tôi dường như không thể tìm thấy bất cứ thứ gì nói lên điều đó

Tôi đã cố gắng thêm tệp này vào ArcMap và tôi đã nhận được lỗi sau:

nhập mô tả hình ảnh ở đây

Lỗi khá tự giải thích ... số lượng hình không khớp với số lượng bản ghi. Tôi chỉ không biết tại sao điều đó xảy ra. Dường như không có bất cứ điều gì trực tuyến giải thích điều này xảy ra trong QGIS, nhưng tôi thấy một vài công cụ sửa chữa. Tôi thực sự đã tự sửa nó bằng cách mở QGIS, thêm layer và sau đó nhấp chuột phải vào layer và 'lưu dưới dạng' một shapefile khác. Vì vậy, tôi đã tìm ra một công việc xung quanh, nhưng tôi hy vọng sẽ tìm ra giải pháp ngăn chặn điều này xảy ra ngay từ đầu. Cảm ơn, Mike


1
Tôi đã sử dụng QGIS trong nhiều năm và chưa thấy vấn đề này trước đây. Sự xuất hiện "ma thuật" của một .dbf khác cho thấy rằng Shapefile đã bị giả mạo bên ngoài QGIS. Nếu bạn chỉ có thể sao chép lỗi bằng cách sử dụng QGIS, vui lòng gửi báo cáo lỗi. Điều đó sẽ rất quan trọng!
underdark

Tôi đã cố gắng tái tạo vấn đề mà không có may mắn. Một điều tôi đã nhận thấy là, không giống như trong ArcGIS, tôi không nhận được thông báo khóa lược đồ khi chỉnh sửa trong QGIS (nghĩa là nếu ai đó có khóa lược đồ trên shapefile và bạn bắt đầu chỉnh sửa cùng một thứ, ArcGIS sẽ gặp lỗi khi lưu chỉnh sửa. QGIS không) Tôi nghĩ rằng nó sẽ tiết kiệm khi bạn lưu một shapefile mà lược đồ bị khóa. Tôi không chắc chắn 100% đây là nguyên nhân, nhưng điều đáng chú ý.
Mike

Tôi cũng đã gặp lỗi này trong khi chỉnh sửa shapefiles. Công việc của tôi chỉ là chỉnh sửa trong ArcMap. Rõ ràng đó không phải là một giải pháp thực sự - nhưng - bạn không đơn độc khi gặp phải loại lỗi này.
Kevin

Bạn đã thử đổi tên tập tin ..._ SMC.dbf thành ..._ SMC.dbf.backup và ..._ SMC_packed.dbf thành ..._ SMC.dbf?
Matthias Kuhn

2
chào cùng một vấn đề với Dufur. Các tệp được tạo trong môi trường q gis chỉ. Nó xảy ra khi tôi đang chỉnh sửa hình dạng và cuối cùng đi lưu và sau đó dừng chỉnh sửa, vì vậy các dòng biến mất và bảng thuộc tính dường như không có bất kỳ dữ liệu nào. Nếu cố gắng tải lại hình dạng trên qgis, nó trông trống rỗng. Trong thư mục tập tin es. mario.shx đã trở thành một mario_packed.shp. Tôi thấy rằng việc xóa từ được đóng gói khỏi tên (nó đã trở lại mario.shx) hình dạng hiện đã được tải và dường như đang hoạt động. Bao lâu? không biết tôi đang phát điên với điều này
user27144

Câu trả lời:


16

Giải trình

OGR (một phần của GDAL) là thư viện được sử dụng bởi QGIS để truy cập các shapefiles. Khi OGR xóa các tính năng, nó không xóa chúng ngay lập tức mà chỉ đánh dấu các tính năng là đã xóa. Thỉnh thoảng , một lệnh gọi là repack được thực thi, nó sẽ tạo ra một tệp mới với hậu tố _repack và sao chép tất cả các tính năng không được đánh dấu là đã xóa vào tệp mới này. Khi nó kết thúc, .dbf ban đầu được thay thế bằng _repack.dbf. Sau đó, nó thực hiện điều tương tự với shapefile: tạo một cái mới (_packed.shp), sao chép tất cả các tính năng không bị xóa và cuối cùng thay thế .shp ban đầu.

Có vẻ như ở đâu đó trong quá trình này, một cái gì đó thất bại (có thể là một vụ tai nạn?).

Trong quá trình này, các id tính năng thay đổi, vì vậy tôi đoán rằng shp (hình học) mà bạn có và dbf (bảng thuộc tính) sử dụng các id tính năng khác nhau cho cùng một tính năng, điều này dẫn đến hành vi lạ mà bạn gặp phải. Dường như, một trong hai tệp vẫn chứa (một phần) các tính năng đã bị xóa trong khi tệp kia thì không.

Làm thế nào để đối phó với điều này

Cập nhật, tháng 11 năm 2016: GDAL 2.2 có chức năng dựng sẵn để gọi đóng gói lại tự động bất cứ khi nào tệp được ghi vào đĩa. Vì vậy, trước khi làm bất cứ điều gì khác: hãy kiểm tra phiên bản GDAL trong hộp thoại QGIS about và cập nhật bản phát hành GDAL (thường được vận chuyển như một phần của QGIS) lên phiên bản gần đây.

Có lẽ bạn không thể làm được gì nhiều ngoài việc tạo các bản sao lưu thông thường để không mất nhiều dữ liệu hơn mức bạn có thể xử lý (dù sao bạn cũng đang làm điều đó, phải không?). Và nếu bạn tìm được cách tái tạo điều này (tốt nhất với bộ dữ liệu mẫu), hãy tạo một báo cáo lỗi .

Nếu bạn gặp lại vấn đề này, bạn cũng có thể thử tạo một chỉ mục không gian trên shapefile. Trong quá trình này, QGIS sẽ gọi repack một lần nữa trên shapefile và có thể "sửa chữa" shp / dbf. Nhưng đây chỉ là một phỏng đoán chưa được xác minh.

Như được đề cập bởi @rhm và trong các bình luận, nó cũng có thể giúp đổi tên tệp {xyz} _packed. {Ext} thành {xyz}. {Ext} . Nếu tệp đã đóng gói đã được ghi hoàn toàn và đó chỉ là việc đổi tên không thành công, việc thực hiện bước này theo cách thủ công là hoàn toàn hợp lệ. Tuy nhiên, nếu tệp _packed chưa được ghi hoàn toàn, bạn có thể thiếu thông tin từ các phần của tính năng. Vì vậy, trước khi bạn thử điều này, hãy tạo các bản sao lưu của tất cả các tệp liên quan.

Thông tin cơ bản về thời điểm đóng gói lại được gọi

Giữa QGIS 2.0 và 2.8 repack đã được gọi bất cứ khi nào lớp được tải (thoát khỏi QGIS, tải dự án khác nhau ...). Nếu một tính năng đã bị xóa hoặc hình học thay đổi, các tệp .shp và .dbf với các bản ghi được đánh dấu là đã xóa đã có mặt.

Bắt đầu với việc đóng gói lại QGIS 2.10 được gọi bất cứ khi nào lớp được lưu sau một thao tác có khả năng thêm cờ đã xóa vào các bản ghi. Do đó, các tệp phải luôn ở trạng thái lành mạnh để được xử lý bởi các ứng dụng khác.


1

Điều này đã xảy ra với tôi trong QGIS. Tôi đã quản lý để giải quyết vấn đề đơn giản bằng cách xóa '_packed' khỏi tên tệp, như ai đó đã đề xuất trong phần nhận xét ở trên.


1

Có thể đây là một vấn đề khác của tệp chỉ mục .shx bị hỏng. Loại hình học nên được lưu trữ trong tiêu đề .shp và .shx. Nếu chúng không khớp, phần mềm sẽ phát sinh lỗi.

Có vẻ như QGIS không quá nghiêm ngặt đối với các tệp chỉ mục bị hỏng và có thể tạo lại nó Save As..., trong khi ARCGIS nhấn mạnh vào một tệp chỉ mục chính xác và tạo một dbf (bảng thuộc tính) cho các tính năng có thể được tìm thấy thông qua các phần chính xác của tệp chỉ mục, hoặc có thể không sử dụng chỉ mục.


1

Sự xuất hiện lại của các tính năng đã bị xóa và / hoặc hành vi kỳ quặc của các shapefile mà các tính năng đã bị xóa trong QGIS là một lỗi đã biết, xem báo cáo lỗi này 11007 và câu hỏi liên quan này - Các đa giác đã xóa dường như trở lại các phiên bản cũ hơn . Cũng như ArcGIS gặp sự cố với các shapefile như vậy, khi được lưu trong các tệp QGIS dưới dạng tệp MapInfo, sau đó chúng khiến plugin MapInfo Route Downloader bị sập trừ khi các bảng được đóng gói lần đầu trong MapInfo trước khi tải Route Downloader. Chạy Universal Translator để chuyển đổi các shapefile bị hỏng này trong MapInfo không thành công.

Như bạn đã tìm thấy, vấn đề có thể được khắc phục bằng cách thực hiện 'lưu dưới dạng' trong QGIS.

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.