Виправлення пошкодженого файлу форми?


10

У мене є файл з формами, над яким я працював в ArcGIS Desktop 9.3, якось пошкоджується, і це дає мені помилку "Кількість форм не відповідає кількості записів у таблиці." Я б хотів відновити цей файл файлів, оскільки він має багато редагувань, яких немає в інших версіях файлу.

Раніше я відновлювався від цієї помилки за допомогою ogr2gui, але тепер інструмент просто виходить з ладу. Я навіть спробував версію командного рядка ogr2ogr, але все одно не пощастило. Цей скрипт, інструмент відновлення Shapefile з веб-сайту ArcScripts також не допоміг.

Будь-які ідеї? (за винятком того, що я припиняю використовувати shapefiles)


Ось результат з ogr2ogr (на основі пропозиції у відповідях): введіть тут опис зображення


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


Розмістіть команду (включаючи -f "ESRI Shapefile", який ви залишили). Повідомлення про помилку у файлі. [Тут не можна розмістити скріншот]. Це стосується винних форм, які я здогадуюсь. Формат такий: ПОМИЛКА 1: Пошкоджений .shp файл: Shape 2352, nPoints = 7, nEntitySize = 88.
Ерік

Ви можете безпечно видалити опцію -f: shapefile - це вихідний формат за замовчуванням. Для подальшого дослідження було б цікаво, якби ви могли прикріпити копію
файлу форм

Файл для дослідження: Я б з радістю переслав файл, але, на жаль, дані захищені авторським правом. Все одно, дякую.
Ерік

@Erick, якщо ви поставите скріншот на imgur.com, я можу розмістити його тут (якщо все ще актуально)
djq

5

Я використовую цей. Це завжди вирішує цю проблему для мене.

shapecheck.exe


Я погоджуюсь з Бредом, ShapeCheck просто працює - автономно виправляє shapefiles - скорочує, коли потрібно.
Mapperz

@Mapperz. Побіг інструмент, з кількома розрізами. Дійсно можна було потім відкрити форму файлу! Але тепер він містить менше записів, ніж резервне копіювання, до якого я повинен повернутись. Якби у мене не було резервного копіювання, відновлення було б таким. (Засіб архівації для подій) Спасибі
Ерік

Посилання розірвано. Тут працює одне: geonet.esri.com/servlet/JiveServlet/download/614216-1-160601/… Джерело: geonet.esri.com/thread/177037#comment-614216
Містер Че

4

Офіційна відповідь від Esri є кілька порад , але вказує вам на утиліту ремонту к.с , яка врятувала мене звільнять кілька разів.

Кілька інших, про які я чув, але не можу сказати, що намагався:


Спасибі Саймон. Але моя основна помилка - я не можу змусити файл відкритись для початку, тому більшість пропозицій не спрацює. Ви просто спробували все, що ви запропонували. Нічого не працювало.
Ерік

2

Гаразд, ось ще одна хитрість додати до купи хороших відповідей вище.

Це трохи більше грубої сили, більшість часу це допомагає, іноді це не так, і хоча це, мабуть, лише перший крок до вирішення проблеми (а не рішення до себе, чого часто немає), це може допомогти дістанеться до місця, де можна відкрити файл форми. У більшості випадків вам все ж доведеться виконати більше ручного ремонту в ArcMap після того, як відкриється файл форми (пошкоджені функції?, Відсутні атрибути? Несогласовані атрибути? Тощо)

  1. Скопіюйте файл форми у нову порожню папку. Візьміть із собою лише SHP, SHX та DBF. Залиште всі інші файли позаду, і так, що включає prj.

  2. (Windows): клацніть правою кнопкою миші файл SHX та виберіть "Властивості", щоб відкрити властивості файлу.

  3. На вкладці "Загальне" подивіться на точний розмір цього файлу SHX до байту. Подивіться на властивість "Розмір", а не на "Розмір на диску".

  4. Візьміть цей розмір файлу в байтах і відніміть 100 байт (заголовок). З решти розділіть на 8 (розмір кожного "слова"). Результат дає вам кількість особливостей фігури всередині SHP частини файлу форми.

  5. Відкрийте DBF в деякому програмному забезпеченні, яке дозволить вам редагувати DBF і зберігати його назад як DBF. Додайте або видаліть записи для того, щоб рядки в DBF відповідали кількості функцій форми в SHP, які ви обчислили на кроці №4. (Якщо ви використовуєте старішу версію Excel, майте на увазі, що рядок №1 містить назви полів, тож якщо ви збираєтеся 1000 записів, це буде 1,001 рядок на аркуші з першого рядка даних це рядок №2.) Якщо для того, щоб кількість рядків збігалася, вам потрібно було видалити рядки, і ці рядки мали в них справжні дані, вам потрібно зберегти їх, просто збережіть їх у новому DBF, і ви можете прочитати цей матеріал назад пізніше, як тільки ви дістанетесь до того, що все знову відкриється в ArcMap.

  6. Після того, як ви скористалися описаними вище кроками, щоб зіставити кількість функцій в SHP з кількістю рядків у DBF, спробуйте відкрити файл форми ще раз у ArcMap.


1

Ви можете спробувати підрахувати кількість фігур у своїх .shp-файлах за допомогою ogrinfo (не впевнений, що це буде працювати):

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

Якщо ви можете підрахувати кількість фігур, ви можете відкрити .dbf файл з відкритим офісом, щоб завершити його (або видалити зайві рядки)


Дякую за пропозицію, але я не зовсім інструмент GDAL. або "дуже" sql грамотний. Перепробував запуск інструменту з наданими вами параметрами, але помилка, пов’язана з інструментом. "Неможливо відкрити кількість джерел даних (*)".
Ерік

ви могли скопіювати / вставити командний рядок?
simo

Я можу, але все-таки помилка. Але рішення @capooti, ​​здається, дали певні результати / визначили фігури винуватця.
Ерік

1

У мене пощастило видалити індексні файли (.idx та .shx), які ваш GIS відновить при повторному підключенні.


Спробував це без успіху. Дякуємо за пропозицію.
Ерік

0

Якщо ваш форм-файл був точковим шаром і має значення поля XY, ви можете запустити інструмент Make XY Event Layer, щоб зробити ще один шар із пошкодженого файлу shape dbf.


Це файл доріг (поліліній). Але пам’ятайте про сценарій балів. Дякую.
Ерік
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.