Naprawianie uszkodzonego pliku kształtu?

10

Mam plik kształtu, nad którym pracowałem w ArcGIS Desktop 9.3, został w jakiś sposób uszkodzony i pojawia się błąd: „Liczba kształtów nie pasuje do liczby rekordów tabeli”. Chciałbym odzyskać ten plik kształtu, ponieważ zawiera wiele zmian, których nie mają inne wersje pliku.

Wcześniej odzyskałem ten błąd za pomocą ogr2gui, ale teraz narzędzie po prostu ulega awarii. Próbowałem nawet wersji komendy ogr2ogr, ale nadal nie mam szczęścia. Ten skrypt, narzędzie do naprawy Shapefile ze strony ArcScripts, również nie pomógł.

Jakieś pomysły? (z wyjątkiem tego, że przestaję używać plików kształtów)


Oto wynik z ogr2ogr (na podstawie sugestii w odpowiedziach): wprowadź opis zdjęcia tutaj

Erick
źródło
1
Prawie na pewno został uszkodzony, ponieważ jego tabela atrybutów (plik .dbf) była edytowana osobno, tworząc niespójność między rekordami kształtów i rekordami atrybutów. Nawet jeśli uda ci się „naprawić” plik kształtu, pamiętaj, aby dokładnie sprawdzić, czy prawidłowe atrybuty są powiązane z kształtami!
whuber
Komunikaty o błędach ujawniają wiele. Te liczby punktów i części wskazują wartości między 2 ^ 30 a 2 ^ 32 (bez znaku), co zdecydowanie sugeruje rozległe fizyczne nadpisywanie nagłówków rekordów w samym pliku .shp (ponieważ nigdy nie byłyby prawidłowe). Jest zatem bardzo prawdopodobne, że dane w tych rekordach również zostały zastąpione. Krótko mówiąc, twoje dane kształtu prawdopodobnie już nie istnieją, przynajmniej w wielu częściach pliku .shp, a zatem nie można ich odzyskać przez oprogramowanie. Przywróć z kopii zapasowych i zacznij od tego miejsca.
whuber
1
@whuber. Dzięki. Jasne, że tak jest. Każdy plik odzyskany z tego uszkodzonego pliku kształtu zawiera znacznie mniej rekordów niż moja kopia zapasowa. Od tego czasu wróciłem do kopii zapasowej.
Erick
Shapecheck.exe zalecenie Brad Nesoms, naprawiłem mój uszkodzony plik kształtu po raz pierwszy! świetne narzędzie

Odpowiedzi:

8

Opcją, z utratą uszkodzonych funkcji, może być konwersja pliku shapefile na inny plik shapefile przez ogr2ogr, z opcją -skipfailures:

ogr2ogr -skipfailures fixed_shapefile.shp corrupted_shapefile.shp

w celu uzyskania dalszych szczegółów zobacz ten post na blogu z bloga PerryGeo:

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

capooti
źródło
Wykonał polecenie (w tym -f „ESRI Shapefile”, który pominąłeś). Mam raport o błędzie dotyczący pliku. [Nie można opublikować zrzutu ekranu tutaj]. Chyba ma to związek z kształtami sprawców. Format to: BŁĄD 1: Uszkodzony plik .shp: Shape 2352, nPoints = 7, nEntitySize = 88.
Erick
możesz bezpiecznie usunąć opcję -f: shapefile jest domyślnym formatem wyjściowym. Byłoby interesujące dla dalszych badań, gdybyś mógł dołączyć kopię
pliku shapefile
Plik do badań: chętnie przesłałbym plik, ale niestety dane są chronione prawem autorskim. W każdym razie dzięki.
Erick
@Erick, jeśli umieścisz zrzut ekranu na imgur.com, mogę go opublikować tutaj (jeśli nadal jest istotny)
djq
5

Używam tego. Zawsze rozwiązało to dla mnie ten problem.

shapecheck.exe

Brad Nesom
źródło
Zgadzam się z Bradem, ShapeCheck po prostu działa - samodzielne poprawki plików kształtów - obcina, gdy jest to wymagane.
Mapperz
@Mapperz. Uruchomiłem narzędzie z kilkoma ściętymi końcówkami. Naprawdę może później otworzyć plik kształtu! Ale teraz zawiera mniej rekordów niż kopia zapasowa, do której muszę wrócić. Gdybym nie miał kopii zapasowej, byłoby to takie odzyskiwanie. (Narzędzie do archiwizacji ewentualności) Dzięki.
Erick
4

Oficjalne odpowiedzi z Esri ma szereg wskazówek, ale zwraca cię do narzędzia do naprawy SHP , który uratował mnie wyrzucenie kilka razy.

Kilka innych, o których słyszałem, ale nie mogę powiedzieć, że próbowałem:

Szymon
źródło
Dzięki Simon. Ale moim głównym problemem jest to, że nie mogę otworzyć pliku na początek, więc większość sugestii nie zadziała. Właśnie wypróbowałem wszystko na Tip One, które zasugerowałeś. Nic nie działało.
Erick
2

Ok, oto kolejna sztuczka, którą można dodać do stosu dobrych odpowiedzi powyżej.

Ta jest nieco bardziej brutalna, przez większość czasu pomaga, czasem nie, i chociaż jest to prawdopodobnie tylko pierwszy krok w kierunku rozwiązania problemu (zamiast rozwiązania samego siebie, co często nie jest), może pomóc doprowadzi cię do miejsca, w którym możesz otworzyć plik kształtu. W większości przypadków po otwarciu pliku shapefile nadal musisz wykonać więcej ręcznych napraw w ArcMap (uszkodzone funkcje? Brakujące atrybuty? Źle wyosiowane atrybuty? Itp.)

  1. Skopiuj plik kształtu do nowego pustego folderu. Zabierz ze sobą tylko SHP, SHX i DBF. Pozostaw wszystkie pozostałe pliki, i tak, w tym prj.

  2. (Windows): kliknij prawym przyciskiem myszy plik SHX i wybierz „Właściwości”, aby otworzyć właściwości pliku.

  3. Na karcie „Ogólne” spójrz na DOKŁADNY rozmiar tego pliku SHX aż do bajtu. Sprawdź właściwość „Rozmiar”, a nie właściwość „Rozmiar na dysku”.

  4. Weź ten rozmiar pliku w bajtach i odejmij 100 bajtów (nagłówek). Z pozostałej części podziel przez 8 (wielkość każdego „słowa”). Wynik daje liczbę funkcji kształtu wewnątrz części SHP pliku kształtu.

  5. Otwórz DBF w jakimś oprogramowaniu, które pozwoli ci edytować DBF i zapisać go jako DBF. Dodaj lub usuń rekordy, aby wiersze w DBF były zgodne z liczbą elementów kształtu w SHP obliczoną w kroku 4. (Jeśli używasz starszej wersji programu Excel, pamiętaj, że wiersz nr 1 zawiera nazwy pól, więc jeśli wybierzesz 1000 rekordów, w pierwszym arkuszu danych będzie to 1 001 wierszy jest wiersz nr 2). Jeśli aby dopasować liczbę wierszy, musisz usunąć wiersze, a te wiersze zawierały prawdziwe dane, które musisz zachować, po prostu zapisz je w nowym DBF i możesz je ponownie odczytać później, gdy dojdziesz do punktu, w którym wszystko otwiera się ponownie w ArcMap.

  6. Po wykonaniu powyższych kroków, aby dopasować liczbę funkcji w SHP do liczby wierszy w DBF, spróbuj ponownie otworzyć plik kształtu w ArcMap.

JimBarry
źródło
1

Możesz spróbować policzyć liczbę kształtów w plikach .shp za pomocą ogrinfo (nie jestem pewien, czy to zadziała):

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

Jeśli jesteś w stanie policzyć liczbę kształtów, możesz następnie otworzyć plik .dbf z otwartym biurem, aby go ukończyć (lub usunąć dodatkowe wiersze)

simo
źródło
Dzięki za sugestię, ale nie jestem profesjonalistą od narzędzi GDAL. lub „bardzo” znajomość języka SQL. Próbowałem uruchomić narzędzie z podanymi parametrami, ale wystąpił błąd związany z narzędziem. „Nie można otworzyć liczby źródeł danych (*)”.
Erick
czy możesz skopiować / wkleić wiersz poleceń?
simo
Mogę, ale nadal ten sam błąd. Wydaje się jednak, że rozwiązanie @capooti przyniosło pewne wyniki / zidentyfikowało kształty sprawców.
Erick
1

Miałem trochę szczęścia, usuwając pliki indeksu (.idx i .shx), które GIS zregeneruje po ponownym połączeniu.

Nate
źródło
Próbowałem tego bez powodzenia. Dzięki za sugestie.
Erick
0

Jeśli plik kształtów był warstwą punktową i miał wartości pól XY, można uruchomić narzędzie Utwórz warstwę zdarzeń XY, aby utworzyć kolejną warstwę z uszkodzonego pliku kształtu dbf.

grafika 21
źródło
Jest to plik dróg (polilinii). Ale pamiętaj o wskazówkach dotyczących scenariusza punktowego. Dzięki.
Erick