Sửa shapefile hỏng?


10

Tôi có một shapefile mà tôi đang làm việc trong ArcGIS Desktop 9.3 bị hỏng bằng cách nào đó và nó gây ra lỗi cho tôi "Số lượng hình không khớp với số lượng bản ghi bảng.". Những gì tôi muốn là để phục hồi shapefile này vì nó có rất nhiều chỉnh sửa mà các phiên bản khác của tệp không có.

Trước đây tôi đã phục hồi từ lỗi này bằng cách sử dụng ogr2gui nhưng công cụ bây giờ chỉ gặp sự cố. Tôi thậm chí đã thử phiên bản dòng lệnh ogr2ogr nhưng vẫn không gặp may. Kịch bản này, Công cụ sửa chữa Shapefile từ trang web ArcScripts cũng không giúp được gì.

Có ý kiến ​​gì không? (ngoại trừ việc tôi ngừng sử dụng shapefiles)


Đây là đầu ra từ ogr2ogr (dựa trên gợi ý aa trong các câu trả lời): nhập mô tả hình ảnh ở đây


1
Nó gần như chắc chắn đã bị hỏng vì bảng thuộc tính của nó (tệp .dbf) đang được chỉnh sửa riêng biệt, tạo ra sự không thống nhất giữa các bản ghi hình dạng và bản ghi thuộc tính. Ngay cả khi bạn quản lý để "sửa" shapefile, hãy đảm bảo kiểm tra kỹ cẩn thận xem các thuộc tính chính xác có được liên kết với các hình dạng không!
whuber

Các thông báo lỗi tiết lộ nhiều. Những số điểm và bộ phận đó biểu thị các giá trị trong khoảng từ 2 ^ 30 đến 2 ^ 32 (không dấu), khuyến nghị mạnh mẽ việc ghi đè vật lý rộng rãi của các tiêu đề bản ghi trong chính tệp .shp (vì chúng sẽ không phải là số đếm hợp lệ). Do đó, rất có thể dữ liệu trong các hồ sơ đó cũng đã bị ghi đè. Nói tóm lại, dữ liệu hình dạng của bạn có thể không còn tồn tại, ít nhất là trong nhiều phần của tệp .shp và do đó phần mềm không thể phục hồi được. Khôi phục từ bản sao lưu của bạn và bắt đầu từ đó.
whuber

1
@whuber. Cảm ơn. Chắc chắn là như vậy. Mỗi tệp được phục hồi từ shapefile bị hỏng này chứa ít hồ sơ hơn so với bản sao lưu của tôi. Tôi đã trở lại bản sao lưu.
Erick

Brad Nesoms đề xuất shapecheck.exe, lần đầu tiên sửa tệp hình dạng bị hỏng của tôi! công cụ tuyệt vời

Câu trả lời:


8

Một tùy chọn, với việc mất các tính năng bị hỏng, có thể là sử dụng ogr2ogr chuyển đổi shapefile của bạn sang một shapefile khác, với tùy chọn -skipfailures:

ogr2ogr -skipfailures fixed_shapefile.shp corrupted_shapefile.shp

để biết thêm chi tiết, hãy xem bài đăng trên blog này từ blog PerryGeo:

http://www.perrygeo.net/wordpress/?p=132


Chạy lệnh (bao gồm -f "ESRI Shapefile" mà bạn đã bỏ qua). Có báo cáo lỗi về tập tin. [Không thể đăng ảnh chụp màn hình ở đây]. Nó phải làm với các hình dạng thủ phạm tôi đoán. Định dạng là: LRI 1: Tệp .shp bị hỏng: Hình dạng 2352, nPoints = 7, nEntitySize = 88.
Erick

bạn có thể xóa tùy chọn -f một cách an toàn: shapefile là định dạng đầu ra mặc định. Sẽ rất thú vị, vì nghiên cứu sâu hơn, nếu bạn có thể đính kèm một bản sao của shapefile
capooti

Tệp để nghiên cứu: Tôi đã sẵn sàng chuyển tiếp tệp nhưng không may dữ liệu có bản quyền. Dẫu sao cũng xin cảm ơn.
Erick

@Erick, nếu bạn đặt ảnh chụp màn hình lên imgur.com tôi có thể đăng nó ở đây (nếu vẫn có liên quan)
djq

5

Tôi sử dụng cái này Nó luôn luôn khắc phục vấn đề đó cho tôi.

shapecheck.exe


Tôi đồng ý với Brad, ShapeCheck chỉ hoạt động - sửa lỗi độc lập shapefiles - cắt ngắn khi được yêu cầu.
Mapperz

@Mapperz. Ran công cụ, với một số cắt ngắn. Thực sự có thể mở shapefile sau đó! Nhưng bây giờ nó chứa ít bản ghi hơn bản sao lưu mà tôi phải hoàn nguyên. Nếu tôi không có bản sao lưu, một phục hồi như thế này sẽ là nó. (Công cụ lưu trữ cho sự kiện) Cảm ơn.
Erick


4

Câu trả lời chính thức từ Esri có một số lời khuyên nhưng chỉ cho bạn tiện ích sửa chữa shp đã giúp tôi tiết kiệm được vài lần.

Vài người khác mà tôi đã nghe nói nhưng không thể nói rằng tôi đã thử:


Cảm ơn Simon. Nhưng trở ngại lớn của tôi là tôi không thể mở tệp để bắt đầu nên hầu hết các đề xuất sẽ không hoạt động. Vừa mới thử mọi thứ trên Tip One mà bạn đề xuất. Không có gì làm việc.
Erick

2

Ok, đây là một mẹo khác để thêm vào đống câu trả lời hay ở trên.

Điều này mạnh hơn một chút, đôi khi nó giúp, đôi khi nó không, và trong khi nó có lẽ chỉ là bước đầu tiên để khắc phục vấn đề (chứ không phải là một giải pháp cho chính nó, mà nó thường không), nó có thể giúp đưa bạn đến nơi bạn có thể mở shapefile. Hầu hết các trường hợp bạn vẫn sẽ cần sửa chữa thủ công nhiều hơn trong ArcMap sau khi shapefile mở (tính năng bị hỏng?, Thuộc tính bị thiếu? Thuộc tính sai? V.v.)

  1. Sao chép shapefile vào một thư mục trống mới. Chỉ mang theo SHP, SHX và DBF. Để lại tất cả các tệp khác phía sau, và có bao gồm prj.

  2. (Windows): nhấp chuột phải vào tệp SHX và chọn "Thuộc tính" để mở thuộc tính tệp.

  3. Trên tab "Chung", hãy xem kích thước tệp CHÍNH XÁC của tệp SHX này xuống byte. Nhìn vào thuộc tính "Kích cỡ" chứ không phải thuộc tính "Kích thước trên đĩa".

  4. Lấy kích thước tệp đó theo byte và trừ 100 byte (tiêu đề). Phần còn lại, chia cho 8 (kích thước của mỗi "từ"). Kết quả cung cấp cho bạn số lượng các tính năng hình dạng bên trong phần SHP của shapefile.

  5. Mở DBF trong một số phần mềm sẽ cho phép bạn chỉnh sửa DBF và lưu lại dưới dạng DBF. Thêm hoặc xóa các bản ghi để làm cho các hàng trong DBF khớp với số lượng các tính năng hình dạng trong SHP mà bạn đã tính ở bước # 4. (Nếu bạn đang sử dụng phiên bản Excel cũ hơn, hãy nhớ rằng Hàng số 1 chứa tên trường, vì vậy nếu bạn đang có 1.000 bản ghi, thì cuối cùng sẽ có 1.001 hàng trong trang tính kể từ hàng dữ liệu đầu tiên là hàng số 2.) Nếu để làm cho số lượng hàng khớp với nhau, bạn cần xóa các hàng đó và những hàng đó có dữ liệu thực trong đó bạn cần giữ, chỉ cần lưu chúng vào DBF mới và bạn có thể lấy lại những thứ đó sau này, một khi bạn đã đến điểm mà mọi thứ lại mở ra trong ArcMap.

  6. Khi bạn đã sử dụng các bước ở trên để khớp số lượng tính năng trong SHP với số lượng hàng trong DBF, hãy thử mở lại shapefile trong ArcMap.


1

Bạn có thể thử đếm số lượng hình dạng vào các tệp .shp của mình bằng ogrinfo (không chắc nó sẽ hoạt động):

 ogrinfo -sql 'select count(*) from myshp' myshp.shp

Nếu bạn có thể đếm số lượng hình dạng thì bạn có thể mở tệp .dbf của mình với văn phòng mở để hoàn thành nó (hoặc loại bỏ các hàng thừa)


Cảm ơn lời đề nghị, nhưng tôi không chính xác là một công cụ GDAL pro. hoặc "rất" biết chữ. Đã thử công cụ chạy với các tham số bạn cung cấp nhưng có lỗi liên quan đến công cụ. "Không thể mở số lượng nguồn dữ liệu (*)".
Erick

bạn có thể sao chép / dán dòng lệnh?
simo

Tôi có thể nhưng vẫn cùng một lỗi. Nhưng giải pháp của @capooti dường như đã tạo ra một số kết quả / hình dạng thủ phạm được xác định.
Erick

1

Tôi đã có một số may mắn khi xóa các tệp chỉ mục (.idx và .shx), mà hệ thống GIS của bạn sẽ tạo lại khi được kết nối lại.


Đã thử điều này mà không thành công. Cảm ơn đã gợi ý.
Erick

0

Nếu shapefile của bạn là một lớp điểm và có các giá trị trường XY, bạn có thể chạy công cụ Make XY Event Layer để tạo một lớp khác từ dbf shapefile bị hỏng.


Đó là một tập tin đường (polylines). Nhưng sẽ giữ gợi ý của bạn trong tâm trí cho một kịch bản điểm. Cảm ơn.
Erick
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.