Qual è la sintassi "mappatura dei campi" dello strumento Refactor Fields in batch in QGIS?


10

In QGIS, c'è questo simpatico strumento "Campi refactor" nella casella degli strumenti di elaborazione:

Strumento Campi refactor

Usarlo su un singolo strato è abbastanza semplice.

Tuttavia, quando prevedi di utilizzarlo in modalità batch, è possibile visualizzare la casella di testo "Mappatura campi" . Sto cercando un esempio della sintassi da utilizzare lì . Non ho ancora trovato alcuna documentazione specifica.

Refactor in batch


Dopo aver eseguito un refactoring dalla GUI, puoi guardare il comando nel menu Elaborazione -> Cronologia (Ctrl + Alt + H)
kadarivan,

Risposte:


7

Non è molto comodo da fare, ma la seguente è la sintassi richiesta per quella casella di testo (la scrivo in più righe solo per motivi di chiarezza):

{'expression': u'type the expression here',
 'length': <type the length>,
 'type': <code of the type>,
 'name': u'type the field name here',
 'precision': <type the precision>}

Ad esempio (ricorda di usare parentesi graffe):

{'expression': u'"FLAG1"+"FLAG2"',
 'length': 20, 'type': 6,
 'name': u'FLAG1',
 'precision': 5}

Devi scrivere tante righe come quella sopra come il numero di campi di input, separati da virgole. Ad esempio, se il livello contiene tre campi:

{'expression': u'"FLAG1"+"FLAG2"', 'length': 20, 'type': 6, 'name': u'FLAG1', 'precision': 5}, {'expression': u'100*"FLAG2"', 'length': 20, 'type': 6, 'name': u'FLAG2', 'precision': 5}, {'expression': u'"100-"FLAG2"', 'length': 20, 'type': 6, 'name': u'FLAG3', 'precision': 5}

e dovrebbe funzionare (ha funzionato per me).

Si noti che è possibile evitare di utilizzare questa sintassi orientata al dizionario e utilizzare direttamente i valori richiesti. Ad esempio, con riferimento al primo esempio, puoi semplicemente usare:

{u'"FLAG1"+"FLAG2"', 20, 6, u'FLAG1', 5}

Se non si utilizza questa sintassi, verrà visualizzato il seguente errore:

Valore del parametro mancante: mappatura dei campi (riga 1)


2
Puoi spiegare cosa significa <codice del tipo>? Ho provato a usare 3 supponendo che sia per stringa (dato che è il 3 ° nelle opzioni a discesa) ma ho ricevuto un errore: l'oggetto "int" non ha attributo " getItem " Vedi il registro per maggiori dettagli. Il codice che ho usato è: {u '"FLAG"', 0, 3, u'FLAG ', 0} per uno dei miei livelli in cui {' espressione ': u' "FLAG" ',' lunghezza ': 0,' digitare ": 3," nome ": u" FLAG "," precisione ": 0}.
JAT86,

@ JAT86 È il numero che identifica il tipo di dati (cioè int, string e così via). Sfortunatamente, non ho trovato un riferimento per loro, ma dovrei ricordare i valori per i tipi più usati: 2 per int, 6 per doppio e 10 per stringa. Inoltre, forse non dovresti specificare 0la lunghezza del campo (almeno 1!). Per favore, fammi sapere se hai risolto il problema.
mgri,

Grazie per la pronta risposta. Forse l'elaborazione in batch è molto più complessa di quanto pensassi. Ho provato a utilizzare almeno 1 per la lunghezza e 10 per il tipo di codice: {u '"FLAG"', 1, 10, u'FLAG ', 0} Tuttavia, l'errore si presenta: l'oggetto' int 'non ha attributi' getItem 'Vedi registro per maggiori dettagli. Il mio livello ha i seguenti attributi: nome: flag, Tipo: stringa, Lunghezza: 0, Precisione: 0, Espressione: "flag"
JAT86

@ JAT86 L'esecuzione dello strumento dalla GUI restituisce qualche problema?
mgri,

Se per GUI intendi un singolo livello, no non ha avuto problemi. La colonna FLAG è stata eliminata correttamente facendo clic su Elimina campo selezionato ed è stata salvata in un nuovo livello "Rifattorizzato".
JAT86,

2

Esiste un altro algoritmo simile a questo la cui interfaccia semplifica meglio il processo batch.

inserisci qui la descrizione dell'immagine


1
Inglese inglese
BERA,

La traduzione inglese per la voce di menu in questione è "Aggiungi campo per attribuire tabella"
J. Taylor
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.