Correggi lo shapefile corrotto?


10

Ho un file di forma su cui stavo lavorando in ArcGIS Desktop 9.3 in qualche modo corrotto e mi viene visualizzato l'errore "Il numero di forme non corrisponde al numero di record della tabella". Quello che vorrei è recuperare questo shapefile in quanto ha molte modifiche che non hanno altre revisioni del file.

In precedenza ho recuperato da questo errore utilizzando ogr2gui ma lo strumento ora si blocca. Ho anche provato la versione da riga di comando ogr2ogr ma non ho ancora avuto fortuna. Neanche questo script, Shapefile Repair Tool dal sito Web ArcScripts.

Qualche idea? (tranne che smetto di usare gli shapefile)


Ecco l'output di ogr2ogr (basato su un suggerimento nelle risposte): inserisci qui la descrizione dell'immagine


1
Quasi sicuramente è stato danneggiato perché la sua tabella degli attributi (un file .dbf) veniva modificata separatamente, creando un'incoerenza tra i record di forma e i record di attributo. Anche se riesci a "correggere" lo shapefile, assicurati di fare un doppio controllo molto attento che gli attributi corretti siano associati alle forme!
whuber

I messaggi di errore rivelano molto. Quei numeri di punti e parti indicano valori compresi tra 2 ^ 30 e 2 ^ 32 (senza segno), suggerendo fortemente una sovrascrittura fisica estesa delle intestazioni dei record nel file .shp stesso (perché non sarebbero mai conteggi validi). È quindi molto probabile che anche i dati in quei record siano stati sovrascritti. In breve, probabilmente i tuoi dati di forma non esistono più, almeno in molte parti del file .shp, e quindi non sono recuperabili dal software. Ripristina dai tuoi backup e inizia da lì.
whuber

1
@whuber. Grazie. Sicuro. Ogni file recuperato da questo file di forma corrotto contiene un numero di record inferiore rispetto al mio backup. Da allora sono tornato al backup.
Erick,

Raccomandazione shapecheck.exe di Brad Nesoms, risolto il mio file di forma corrotto per la prima volta! ottimo strumento

Risposte:


8

Un'opzione, con la perdita delle funzionalità danneggiate, potrebbe essere quella di utilizzare ogr2ogr convertendo il tuo file di forma in un altro file di forma, con l'opzione -skipfailures:

ogr2ogr -skipfailures fixed_shapefile.shp corrupted_shapefile.shp

per ulteriori dettagli guarda questo post dal blog PerryGeo:

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


Esegui il comando (incluso -f "ESRI Shapefile" che hai lasciato fuori). È stato segnalato un errore nel file. [Impossibile pubblicare screenshot qui]. Ha a che fare con le forme dei colpevoli, immagino. Il formato è: ERRORE 1: file .shp danneggiato: Shape 2352, nPoints = 7, nEntitySize = 88.
Erick,

puoi rimuovere tranquillamente l'opzione -f: shapefile è il formato di output predefinito. Sarebbe interessante, per ulteriori ricerche, se potessi allegare una copia dello shapefile
capooti,

File per la ricerca: avrei spedito volentieri il file ma sfortunatamente i dati sono protetti da copyright. Grazie comunque.
Erick,

@Erick, se metti lo screenshot su imgur.com posso pubblicarlo qui (se ancora pertinente)
djq

5

Io uso questo. Mi ha sempre risolto il problema.

shapecheck.exe


Sono d'accordo con Brad, ShapeCheck funziona semplicemente - correzioni stand-alone di correzioni autonome - tronca quando richiesto.
Mapperz

@Mapperz. Ha eseguito lo strumento, con diversi tronchi. In seguito potrebbe davvero aprire lo shapefile! Ma ora contiene meno record rispetto al backup che devo ripristinare. Se non avessi alcun backup, un ripristino come questo sarebbe stato. (Strumento di archiviazione per l'eventualità) Grazie.
Erick,


4

La risposta ufficiale di Esri ha una serie di suggerimenti, ma ti indica l' utilità di riparazione shp che mi ha risparmiato di essere licenziato alcune volte.

Pochi altri di cui ho sentito parlare ma non posso dire di aver provato:


Grazie Simone. Ma il mio problema principale è che non riesco ad aprire il file per cominciare, quindi la maggior parte dei suggerimenti non funzionerà. Ho appena provato tutto sul Suggerimento Uno che hai suggerito. Niente ha funzionato.
Erick,

2

Ok, ecco un altro trucco da aggiungere alla pila di buone risposte sopra.

Questa è una forza un po 'più bruta, il più delle volte aiuta, a volte no, e mentre probabilmente è solo un primo passo verso la risoluzione del problema (piuttosto che una soluzione a se stessa, che spesso non lo è), può aiutare ti porta dove puoi aprire lo shapefile. Nella maggior parte dei casi dovrai comunque eseguire ulteriori riparazioni manuali in ArcMap dopo l'apertura dello shapefile (funzionalità corrotte? Attributi mancanti? Attributi non allineati? Ecc.)

  1. Copia lo shapefile in una nuova cartella vuota. Porta SHP, SHX e DBF solo con te. Lasciare tutti gli altri file e sì, incluso il prj.

  2. (Windows): fare clic con il pulsante destro del mouse sul file SHX e selezionare "Proprietà" per aprire le proprietà del file.

  3. Nella scheda "Generale" dai un'occhiata alla dimensione del file EXACT di questo file SHX fino al byte. Guarda la proprietà "Dimensione" e non la proprietà "Dimensione su disco".

  4. Prendi quella dimensione del file in byte e sottrai 100 byte (l'intestazione). Del resto, dividi per 8 (la dimensione di ogni "parola"). Il risultato fornisce il numero di funzioni di forma all'interno della parte SHP del file di forma.

  5. Apri il DBF in alcuni software che ti permetteranno di modificare il DBF e salvarlo come DBF. Aggiungi o rimuovi i record per far corrispondere le righe nel DBF al numero di feature di forma nell'SHP calcolato nel passaggio 4. (Se stai utilizzando una versione precedente di Excel, tieni presente che la riga n. 1 contiene i nomi dei campi, quindi se stai andando per 1.000 record, finirà per essere 1.001 righe nel foglio dalla prima riga di dati è la riga n. 2.) Se per fare in modo che il numero di righe corrisponda, è necessario eliminare le righe e quelle righe contengono dati reali che è necessario conservare, è sufficiente salvarle su un nuovo DBF e si può rileggere quella roba più tardi, una volta arrivato al punto in cui tutto si riapre in ArcMap.

  6. Dopo aver utilizzato i passaggi precedenti per abbinare il numero di funzionalità nell'SHP con il numero di righe nel DBF, prova ad aprire nuovamente il file di forma in ArcMap.


1

Puoi provare a contare il numero di forme nei tuoi file .shp con ogrinfo (non sono sicuro che funzionerà):

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

Se riesci a contare il numero di forme, puoi aprire il tuo file .dbf con open office per completarlo (o rimuovere le righe extra)


Grazie per il suggerimento, ma non sono esattamente un professionista di strumenti GDAL. o letterato "molto" sql. Ho provato lo strumento in esecuzione con i parametri che hai fornito ma hai riscontrato un errore relativo allo strumento. "Impossibile aprire il conteggio dell'origine dati (*)".
Erick,

potresti copiare / incollare la riga di comando?
simo

Posso ma ancora stesso errore. Ma la soluzione di @capooti sembra aver prodotto alcuni risultati / identificato le forme dei colpevoli.
Erick,

1

Ho avuto un po 'di fortuna cancellando i file di indice (.idx e .shx), che il tuo GIS rigenererà quando ricollegato.


Ho provato questo senza successo. Grazie per avermelo suggerito.
Erick,

0

Se il tuo file di forma era un livello punto e aveva valori di campo XY, puoi eseguire lo strumento Crea livello evento XY per creare un altro livello dal file di forma danneggiato dbf.


È un file di strade (polilinee). Ma tieni a mente il tuo suggerimento per uno scenario di punti. Grazie.
Erick,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.