Исправление поврежденного шейп-файла?

10

У меня есть шейп-файл, над которым я работал в ArcGIS Desktop 9.3, как-то поврежден, и он выдает мне ошибку «Количество фигур не соответствует количеству записей таблицы». Я хотел бы восстановить этот шейп-файл, так как он имеет много правок, которых нет в других ревизиях файла.

Раньше я восстанавливался после этой ошибки с помощью ogr2gui, но инструмент теперь просто вылетает. Я даже попробовал версию командной строки ogr2ogr, но все равно не повезло. Этот скрипт, Shapefile Repair Tool с сайта ArcScripts, тоже не помог.

Любые идеи? (кроме того, что я перестаю использовать шейп-файлы)


Вот вывод из ogr2ogr (основываясь на предложении в ответах): введите описание изображения здесь

Erick
источник
1
Он почти наверняка был поврежден, потому что его таблица атрибутов (файл .dbf) редактировалась отдельно, создавая несоответствие между записями формы и записями атрибутов. Даже если вам удастся «исправить» шейп-файл, убедитесь, что сделали очень тщательный двойной контроль, чтобы правильные атрибуты были связаны с формами!
whuber
Сообщения об ошибках показывают много. Эти числа точек и частей указывают значения между 2 ^ 30 и 2 ^ 32 (без знака), что настоятельно рекомендует обширную физическую перезапись заголовков записей в самом файле .shp (поскольку они никогда не будут действительными значениями). Поэтому весьма вероятно, что данные в этих записях также были перезаписаны. Короче говоря, ваши данные формы, вероятно, больше не существуют, по крайней мере, во многих частях файла .shp, и, следовательно, не могут быть восстановлены программным обеспечением. Восстановите из своих резервных копий и начните оттуда.
whuber
1
@whuber. Спасибо. Конечно, это так. Каждый файл, восстановленный из этого поврежденного шейп-файла, содержит гораздо меньше записей, чем моя резервная копия. С тех пор я вернулся к резервной копии.
Эрик
Рекомендация Брэда Нессома shapecheck.exe, исправила мой поврежденный файл формы в первый раз! отличный инструмент

Ответы:

8

Вариант с потерей поврежденных объектов может заключаться в использовании ogr2ogr для преобразования вашего шейп-файла в другой шейп-файл с опцией -skipfailures:

ogr2ogr -skipfailures fixed_shapefile.shp corrupted_shapefile.shp

для более подробной информации смотрите этот пост в блоге PerryGeo:

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

capooti
источник
Выполните команду (включая опцию -f "ESRI Shapefile", которую вы пропустили). Получен отчет об ошибке в файле. [Не могу опубликовать скриншот здесь]. Я думаю, это связано с формами преступника. Формат: ОШИБКА 1: поврежденный файл .shp: форма 2352, nPoints = 7, nEntitySize = 88.
Эрик
Вы можете безопасно удалить опцию -f: shapefile является форматом вывода по умолчанию. Для дальнейшего исследования было бы интересно, если бы вы могли прикрепить копию шейп-
файла
Файл для исследования: я бы с удовольствием отправил файл, но, к сожалению, данные защищены авторским правом. Спасибо, в любом случае.
Эрик
@ Эрик, если вы разместите скриншот на imgur.com, я могу выложить его здесь (если он все еще актуален)
djq
5

Я использую это. Это всегда решало эту проблему для меня.

shapecheck.exe

Брэд Несом
источник
Я согласен с Брэдом, ShapeCheck просто работает - автономно исправляет шейп-файлы - усекает при необходимости.
Mapperz
@Mapperz. Запустил инструмент, с несколькими усеченными. После этого действительно может открыть шейп-файл! Но теперь он содержит меньше записей, чем резервная копия, к которой я должен вернуться. Если бы у меня не было резервной копии, то такое восстановление было бы таким. (Инструмент для архивации на случай) Спасибо.
Эрик
Ссылка не работает. Здесь работает один: geonet.esri.com/servlet/JiveServlet/download/614216-1-160601/… Источник: geonet.esri.com/thread/177037#comment-614216
г-н Че
4

В Официальном ответе Esri есть несколько советов, но он указывает на утилиту восстановления shp, которая несколько раз спасала меня от увольнения.

Несколько других, о которых я слышал, но не могу сказать, что пытался:

Саймон
источник
Спасибо Саймон. Но моя главная проблема в том, что я не могу открыть файл для начала, поэтому большинство предложений не сработает. Только что попробовал все по совету, который вы предложили. Ничего не получалось.
Эрик
2

Хорошо, вот еще один трюк, чтобы добавить к куче хороших ответов выше.

Это немного более грубая сила, в большинстве случаев это помогает, иногда - нет, и, хотя это, вероятно, всего лишь первый шаг к решению проблемы (а не решение для себя, которое зачастую таковым не является), оно может помочь доставит вас туда, где вы можете открыть шейп-файл. В большинстве случаев вам все равно нужно будет сделать больше ручного восстановления в ArcMap после открытия шейп-файла (поврежденные объекты? Отсутствующие атрибуты? Выровненные атрибуты? И т. Д.)

  1. Скопируйте шейп-файл в новую пустую папку. Только возьмите SHP, SHX и DBF с собой. Оставьте все остальные файлы позади, и да, включая prj.

  2. (Windows): щелкните правой кнопкой мыши файл SHX и выберите «Свойства», чтобы открыть свойства файла.

  3. На вкладке «Общие» обратите внимание на размер файла EXACT этого файла SHX вплоть до байта. Посмотрите на свойство «Размер», а не на свойство «Размер на диске».

  4. Возьмите этот размер файла в байтах и ​​вычтите 100 байтов (заголовок). Из оставшейся части разделите на 8 (размер каждого «слова»). В результате вы получите количество элементов формы внутри части SHP файла формы.

  5. Откройте DBF в некотором программном обеспечении, которое позволит вам отредактировать DBF и сохранить его обратно как DBF. Добавьте или удалите записи, чтобы строки в DBF соответствовали количеству объектов формы в SHP, которое вы рассчитали на шаге # 4. (Если вы используете более старую версию Excel, имейте в виду, что строка # 1 содержит имена полей, поэтому, если вы собираетесь использовать 1000 записей, это будет 1001 строк на листе с первой строки данных это строка # 2.) Если для того, чтобы количество строк соответствовало, вам нужно было удалить строки, и в этих строках содержались реальные данные, которые вам нужно сохранить, просто сохраните их в новом DBF, и вы сможете снова прочитать эти данные обратно позже, как только вы дойдете до точки, где все снова открывается в ArcMap.

  6. После того, как вы использовали описанные выше шаги, чтобы сопоставить количество объектов в SHP с количеством строк в DBF, попробуйте снова открыть шейп-файл в ArcMap.

JimBarry
источник
1

Вы можете попытаться подсчитать количество фигур в ваших файлах .shp с помощью ogrinfo (не уверен, что это сработает):

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

Если вы можете посчитать количество фигур, то можете открыть файл .dbf с помощью open office, чтобы завершить его (или удалить лишние строки).

Симо
источник
Спасибо за предложение, но я не профессионал GDAL Tools. или "очень" sql грамотный. Пробовал запустить инструмент с параметрами, которые вы указали, но получил ошибку, связанную с инструментом. Msgstr "Невозможно открыть счетчик источников данных (*)".
Эрик
Вы могли бы скопировать / вставить командную строку?
Симо
Я могу, но все же ошибка. Но решение @capooti, ​​похоже, дало некоторые результаты / определили формы преступников.
Эрик
1

Мне посчастливилось удалить файлы индекса (.idx и .shx), которые будут восстановлены вашей ГИС при повторном подключении.

Nate
источник
Пробовал это без успеха. Спасибо за предложение.
Эрик
0

Если ваш шейп-файл был точечным слоем и имел значения полей XY, вы можете запустить инструмент Создать слой событий XY, чтобы создать другой слой из поврежденного шейп-файла dbf.

artwork21
источник
Это файл дорог (полилиний). Но учтите ваш намек на сценарий очков. Спасибо.
Эрик