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.