Come evitare la creazione di Shapefile corrotti durante la modifica?


15

Ho uno dei miei tecnici GIS che digitalizza alcune linee in QGIS in formato shapefile. Non so come abbia fatto (e nemmeno lui), ma in qualche modo lo shapefile è diventato corrotto. Stava creando linee casuali o alcune delle linee che aveva creato sarebbero semplicemente scomparse. Sono entrato in ArcCatalogue per vedere come appariva in ArcGIS e questo è quello che ho visto:

inserisci qui la descrizione dell'immagine

Notare l'icona del punto interrogativo in cui dovrei vedere un'icona 'line' dello shapefile. Ovviamente ArcCatalogue non può leggere questo file. Inoltre, sembrava che fosse stato creato un secondo file dbf con "_packed" allegato alla fine. Quando guardo lo shapefile usando Windows Explorer, vedo che esiste già un .dbf per lo shapefile 'M3_PRE_SMU_lines_10Apr13_SMC.dbf', quindi non so da dove provenga questo _file shapefile e non riesco a trovare nulla online quello ci parla.

Ho provato ad aggiungere questo file in ArcMap e ho ricevuto il seguente errore:

inserisci qui la descrizione dell'immagine

L'errore è piuttosto autoesplicativo ... il numero di forme non corrisponde al numero di record. Non so proprio perché stia succedendo. Non sembra esserci nulla in linea che spieghi come ciò avvenga in QGIS, ma vedo un paio di strumenti di riparazione. In realtà l'ho riparato da solo aprendo QGIS, aggiungendo il layer e facendo clic con il tasto destro sul layer e 'salvando come' un altro file di forma. Quindi, ho pensato a un lavoro in giro, ma spero di trovare una soluzione che impedisca che ciò accada in primo luogo. Grazie Mike


1
Uso QGIS da anni e non ho mai visto questo problema prima. L'aspetto "magico" di un altro .dbf suggerisce che lo Shapefile è stato manomesso al di fuori di QGIS. Se è possibile riprodurre il bug utilizzando solo QGIS, si prega di presentare una segnalazione di bug. Sarebbe molto importante!
underdark

Ho provato a replicare il problema senza fortuna. Una cosa che ho notato è che, a differenza di ArcGIS, non ricevo un messaggio di blocco dello schema durante la modifica in QGIS (ovvero se qualcuno ha un blocco dello schema nel file di forma e si inizia a modificare lo stesso, ArcGIS genererà un errore durante il salvataggio QGIS no) Sto pensando che salva strano quando si salva uno shapefile con schema bloccato. Non sono sicuro al 100% che questa sia la causa, ma qualcosa che vale la pena notare.
Mike,

Ho anche avuto questo errore spuntare durante la modifica di shapefile. Il mio lavoro era solo per fare il mio editing in ArcMap. Ovviamente questa non è una vera soluzione - ma - non sei il solo a riscontrare questo tipo di errore.
Kevin,

Hai provato a rinominare il file ..._ SMC.dbf in ..._ SMC.dbf.backup e il ..._ SMC_packed.dbf in ..._ SMC.dbf?
Matthias Kuhn,

2
ciao stesso problema con Dufur. File creati solo nell'ambiente q gis. Succede quando sto modificando la forma e finalmente vado a salvare e poi smetto di modificarlo, quindi le linee scompaiono e la tabella degli attributi sembra non avere dati. se si tenta di caricare nuovamente la forma sul qg sembra vuota. Nella cartella il file es. mario.shx era diventato un mario_packed.shp. Ho scoperto che eliminando la parola compressa dal nome (è tornato mario.shx) la forma è ora caricata e sembra funzionare. Per quanto? non so che sto impazzendo con questo
user27144

Risposte:


16

Spiegazione

OGR (parte di GDAL) è la libreria utilizzata da QGIS per accedere agli shapefile. Quando OGR elimina le funzionalità, non le elimina immediatamente, ma le contrassegna semplicemente come eliminate. Di tanto in tanto, viene eseguito un comando chiamato repack , che crea un nuovo file con il suffisso _repack e copia tutte le funzionalità che non sono contrassegnate come eliminate in questo nuovo file. Al termine, l'originale .dbf viene sostituito con _repack.dbf. Quindi fa la stessa cosa con lo shapefile: crearne uno nuovo (_packed.shp), copiare tutte le funzionalità non cancellate e infine sostituire l'originale .shp.

Sembra da qualche parte in questo processo, qualcosa non è riuscito (forse un incidente?).

All'interno di questo processo, gli ID delle caratteristiche cambiano, quindi immagino che shp (geometria) che hai e dbf (tabella degli attributi) utilizzino ID di caratteristiche diverse per le stesse caratteristiche, il che porta allo strano comportamento che si verifica. Sembra che uno dei due file contenga ancora (parte di) le funzionalità eliminate mentre l'altro no.

Come gestirlo

Aggiornamento, novembre 2016: GDAL 2.2 viene fornito con funzionalità integrata per chiamare il repack automaticamente ogni volta che il file viene scritto sul disco. Quindi, prima di fare qualsiasi altra cosa: controlla la versione GDAL nella finestra di dialogo QGIS sulla finestra di dialogo e aggiorna la tua versione GDAL (spesso fornita come parte di QGIS) a una versione recente.

Probabilmente non c'è molto che puoi fare al riguardo oltre a fare backup regolari per non perdere più dati di quelli che puoi gestire (lo stai facendo comunque, giusto? 😉). E se trovi un modo per riprodurre questo (meglio con un set di dati di esempio) crea una segnalazione di bug .

Se riscontri nuovamente questo problema, puoi anche provare a creare un indice spaziale sul file di forma. In questo processo, QGIS chiamerà nuovamente repack sul file di forma e potrebbe "riparare" shp / dbf. Ma questa è solo un'ipotesi non verificata.

Come menzionato da @rhm e nei commenti, può anche aiutare a rinominare il file {xyz} _packed. {Ext} in {xyz}. {Ext} . Se il file compresso è già stato completamente scritto ed è stata solo la ridenominazione che non è riuscita, è assolutamente valido eseguire questo passaggio manualmente. Tuttavia, se il file _packed non è stato completamente scritto, è possibile che manchino informazioni da parti delle funzioni. Quindi, prima di provare, crea copie di backup di tutti i file coinvolti.

Informazioni di base su quando viene chiamato il repack

Tra QGIS 2.0 e 2.8 è stato chiamato il repack ogni volta che il layer è stato scaricato (uscire da QGIS, caricare un altro progetto ...). Se una funzione è stata eliminata o una geometria modificata, sono stati presenti file .shp e .dbf con record contrassegnati come eliminati .

A partire da QGIS 2.10 il repack viene chiamato ogni volta che il layer viene salvato dopo un'operazione che ha il potenziale per aggiungere il flag eliminato ai record. Pertanto i file dovrebbero ora essere sempre in uno stato sano per essere elaborati da altre applicazioni.


1

Questo mi è successo in QGIS. Sono riuscito a risolvere il problema semplicemente eliminando '_packed' dal nome del file, come qualcuno ha suggerito nella sezione commenti sopra.


1

Forse questo è un altro problema di un file indice .shx rotto. Il tipo di geometria deve essere memorizzato nell'intestazione .shp e .shx. Se non corrispondono, il software genererà un errore.

Sembra che QGIS non sia molto severo sui file di indice rotti e possa ricrearlo con Save As..., mentre ARCGIS insiste su un file di indice corretto e crea un dbf compresso (tabella degli attributi) per le funzionalità che possono essere trovate tramite le parti corrette del file indice o forse senza utilizzare l'indice.


1

La riapparizione delle funzioni cancellate e / o il comportamento strano dei file di forma da cui sono state eliminate le funzionalità in QGIS è un bug noto, vedere questo rapporto sui bug 11007 e questa domanda correlata - I poligoni eliminati sembrano tornare alle versioni precedenti . Oltre ad avere problemi con ArcGIS con tali shapefile, quando vengono salvati in QGIS come file TAB di MapInfo, causano l'arresto anomalo del plug-in MapInfo RouteFinder a meno che le tabelle non vengano impacchettate in MapInfo prima di caricare RouteFinder. L'esecuzione di Universal Translator per convertire questi shapefile danneggiati in MapInfo non riesce.

Come hai scoperto, il problema può essere risolto eseguendo un 'salvataggio con nome' in QGIS.

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.