Esiste un modo rapido per cancellare tutti gli attributi da un livello ma lasciare in posizione i poligoni?


9

Ho un layer Shapefile in QGIS 2.6 con diversi poligoni, ognuno dei quali ha dati in oltre 100 campi. Ho bisogno di creare un nuovo livello con tutti gli stessi poligoni, ma con tutti i loro campi di dati vuoti (impostato su 0, Null o vuoto a seconda del tipo di campo). Esiste un modo più rapido per farlo che premere Canc su ciascun campo di ciascun poligono uno alla volta, dovrei farlo più di 1000 volte in questo modo.


1
Si prega di modificare la domanda per includere la versione del software GIS e il formato dei dati (ad esempio, shapefile, FGDB, PostGIS, ..)
Vince

Risposte:


3

Non puoi semplicemente copiare e incollare i tuoi dati nel Livello X (un layer / shapefile / feature class / qualunque cosa) che non ha attributi (oltre a OID e Geometria) e quindi copiare e incollare la geometria ora "vuota" indietro nel tuo livello originale?


6

È possibile immettere il seguente codice nella console Python per cancellare TUTTI gli attributi NULLper un file di forma caricato in QGIS. Seleziona il livello dal pannello dei livelli (Sommario) ed esegui il codice:

layer = qgis.utils.iface.activeLayer()     
layer.startEditing()   
for field in layer.dataProvider().attributeIndexes():   
    for feature in layer.getFeatures(): 
        layer.changeAttributeValue(feature.id(), field, NULL)    

layer.commitChanges()        

Questo è stato testato su QGIS 2.8.2.


AGGIORNAMENTO :

In risposta al commento di @Vince, il seguente codice può essere copiato / incollato direttamente nella console Python e cambierà i valori degli attributi in base al tipo di campo (cioè 0per i campi interi ; NULLper i campi stringa ; e un'epoca di 1900-01-01per un campo Data ):

layer = qgis.utils.iface.activeLayer()     
layer.startEditing()  
for field in layer.pendingFields():
        if field.typeName() == 'Integer':
                name_int = field.name()
                for feature in layer.getFeatures():
                        feature[name_int] = '0'
                        layer.updateFeature(feature)
        if field.typeName() == 'String':
                name_str = field.name()
                for feature in layer.getFeatures():
                        feature[name_str] = NULL
                        layer.updateFeature(feature)
        if field.typeName() == 'Date':
                name_dat = field.name()
                for feature in layer.getFeatures():
                        feature[name_dat] = '1900-01-01'
                        layer.updateFeature(feature)
layer.commitChanges()

1
Puoi modificare la logica per assegnare zero ai valori numerici, vuoto / NULL alle stringhe e l'epoca alle date?
Vince il

@Vince - Grazie amico, posso certamente provare perché non sono un esperto in materia :)
Joseph,

@Vince - Grazie ancora per aver menzionato il tweak, mi è capitato di saperne di più su python =)
Joseph,

1
Immagino che la mia età mostri quando penso a un'epoca del 1 gennaio 1970 o 1900, non del 2000;)
Vince il

3

Puoi semplicemente salvarlo come nuovo file e selezionare la casella "Salta creazione attributo" nella finestra di dialogo "Salva con nome ...". Fa esattamente quello che dice.

Ci sarà una colonna del contatore numerico chiamata FID, apparentemente il formato Shapefile richiede almeno un attributo? Se puoi, usa qualcosa di meglio, spatialite o geopackage.


+1, hai ragione in quanto deve esserci almeno un attributo. Ma questo è un metodo molto carino e semplice in quanto potresti eseguire il Field Calculator e sostituire tutti i valori del FID NULL.
Joseph,

1
Il comportamento di QGIS sembra strano. Il FID della colonna è modificabile e non è il mapping effettivo tra geometria e attributi. Se si elimina la colonna, si ottiene uno denominato "ID funzione" che non è modificabile. Questo dovrebbe essere già il primo risultato. QGIS 2.10. In seguito presenterò un bug.
bugmenot123

2

Apri il file .dbf con openoffice o altri e rimuovi i dati.
È possibile utilizzare Python per eseguire il ciclo dei file e rimuovere tutti tranne le intestazioni Vedere il modulo python dbf


1
L'uso di strumenti ignoranti di shapefile sul componente file dBase può causare la corruzione di shapefile. Se lo scopo è quello di popolare spazi vuoti e zeri, la "rimozione" dei dati produrrà probabilmente solo un file dBase con meno record rispetto a .shp / .shx.
Vince il

In effetti, ma stiamo semplicemente rimuovendo i dati, non c'è alcun rischio.
julsbreakdown

No, il compito è preservare i poligoni e cancellare gli attributi corrispondenti, quindi il rischio è molto alto. Qualsiasi risposta che non avverta di una potenziale corruzione non prende abbastanza seriamente il rischio.
Vince il

Riconosco che è un modo difficile, cioè non regolare, ma funziona. Ovviamente, è possibile conservare un backup dei dati originali.
Leehan,

In questo caso speciale il rischio non è così grande perché tutti gli attributi in tutti i campi sono inizializzati. Pertanto, se l'ordine dei record sta cambiando nel file dbf, non farà comunque alcun casino perché tutti i record hanno gli stessi dati negli attributi. L'utente deve comunque assicurarsi che il numero di funzionalità in .dbf sia lo stesso di in .shp. Tuttavia, come ha scritto @Vince, gli utenti dovrebbero essere avvisati che a) cambiare l'ordine delle righe di b) il numero di righe in .dbf generalmente porta a uno shapefile corrotto e inutilizzabile.
user30184

2

QGIS può aprire i file di forma senza .dbf.

Quindi potresti semplicemente eliminare il componente .dbf e caricarlo in .shp, che porterà solo alla geometria.


Questo è un buon consiglio, anche se mi trattengo personalmente di non eliminare alcun file associato :)
Joseph

1
Sì, rinominare potrebbe essere un'opzione più sicura.
Heikki Vesanto,

2

Forse puoi modificare il file * .dbf con Excel.

Quindi elimini tutti i campi tranne quello geografico.

Finalmente salva ed esci.

Sarebbe utile tenere un archivio di * .shp prima di farlo.


Il significato sembra essere quello di mantenere intatto lo schema, quindi solo i valori degli attributi dovrebbero essere impostati su un valore predefinito. E non puoi salvare in formato dbf con Excel.
user30184

2
Il campo della geometria non esiste nel componente dBase di uno shapefile.
Vince il

proprio non c'è campo wkt quando si modifica dbf con Excel.
Leehan,

Il campo FID collega le righe in .dbf alla geometria, che è memorizzata in .shp. Davvero, il .dbf non ha nulla a che fare con la geometria. en.wikipedia.org/wiki/Shapefile
mr.adam

1

In QGIS 2.8.x puoi anche eliminare campi specifici o tutti. Apri la tabella degli attributi, Attiva / disattiva modalità modifica, fai clic sul pulsante "Elimina colonna", seleziona tutti gli attributi indesiderati e fai clic su "OK". Salva modifiche.

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.