Esportazione dei dati dall'output Raccogli valori in ArcGIS ModelBuilder?


11

Attualmente sto giocando con ModelBuilder. Ho aggiunto una foto del modello che ho al momento.

Questo modello sta attualmente iterando 6 shapefile, quindi ciascuno dei "valori di output" contiene 6 cifre in un elenco. Non riesco a trovare un modo per estrarre i valori da questi elenchi in un file di tabella / testo o simili.

C'è un modo per fare questo?

modello

Questo è ciò che viene mostrato quando apro i "valori di output" dopo aver eseguito il modello: inserisci qui la descrizione dell'immagine

Voglio solo afferrare quei 6 numeri in qualche modo ...


Questa è sostanzialmente la stessa cosa che stai chiedendo qui corretta? gis.stackexchange.com/questions/25922/… Raccogliere valori fa proprio questo. Se leggi l'aiuto, ti dirà che raccoglie valori che possono essere passati in un altro strumento. Quindi cosa stai cercando di fare con i valori? Li registra semplicemente in un file o ne hai bisogno per un'ulteriore elaborazione?
theJones

Voglio solo registrarli su un file. Non riesco a trovare uno strumento per alimentare i valori di output nel generatore di modelli per estrarli.
JPD,

Risposte:


17

Puoi farlo usando lo strumento Calcola valore (Gestione dati) e un po 'di magia Python. Vedi anche questa domanda correlata: aggiungere un codice arbitrario al generatore di modelli Arcgis?

Una variabile multivalore è solo una stringa di valori delimitata da punto e virgola, quindi ciò che fa la multivaluesToCsvseguente funzione è dividere le variabili multivalore in elenchi e trasporle in righe che vengono quindi scritte in un file di testo CSV (valori separati da virgola) .

Gli iteratori del modello eseguono TUTTI i processi nel modello una volta per iterazione: ciò non è desiderabile per il nostro strumento Calcola valore, che vogliamo solo eseguire una volta alla fine. Il modo in cui lo realizzi è creando un altro modello esterno per avvolgere il modello interno originale. Questo è discusso nell'argomento della guida Integrazione di un modello all'interno di un modello .

Quindi, ecco cosa devi fare per farlo funzionare:

Modello interno - Itera le classi di caratteristiche, le elabora, raccoglie valori:

  1. Nel tuo modello originale, che sarà il nostro modello "interno", aggiungi un altro strumento Raccogli valori per raccogliere i Namevalori della variabile in modo da poter mappare i valori delle statistiche di distanza ai corrispondenti nomi delle classi di caratteristiche.
  2. Esporre le variabili di input e output come parametri del modello (fare clic con il pulsante destro del mouse su un ovale e selezionare Parametro modello). Fallo per ciascuno degli output degli strumenti Raccogli valore e per qualsiasi parametro di input di cui hai bisogno, ad esempio l'area di lavoro di input.
  3. Salvare e chiudere il modello interno.

Modello esterno : esegue il modello interno, esegue lo strumento Calcola valore solo una volta al completamento del modello interno:

  1. Crea un nuovo modello: questo sarà il nostro modello "esterno".
  2. Aggiungi una variabile di tipo Folderper consentire di specificare dove creare il file CSV di output.
  3. Aggiungi una variabile di tipo Stringper consentire di specificare il nome del file CSV di output.
  4. Aggiungi il modello interno al nuovo modello (trascina e rilascia da ArcToolbox o fai clic con il pulsante destro del mouse e Aggiungi dati o strumento, passa al modello interno e fai clic su Aggiungi)
  5. Creare variabili per tutti i parametri del modello interno che si desidera poter impostare dal modello esterno, come ad esempio l'area di lavoro di input (fare clic con il pulsante destro del mouse sul modello interno e scegliere Crea parametro da parametro).
  6. Aggiungi lo strumento Calcola valore al nuovo modello
  7. Incollare quanto segue nelle caselle appropriate dello strumento Calcola valore:

    Espressione :

    multivaluesToCsv(r"%Output CSV File Location%", "%Output CSV File Name%", "%Feature Class Names%", "%Minimum Distance Values%", "%Average Distance Values%", "%Maximum Distance Values%")
    • Questo utilizza la sostituzione delle variabili in linea per passare le variabili del modello nella funzione. Regola in modo che corrisponda ai nomi delle variabili del modello.
    • Il rprima "%Output CSV File Location%"è significativo: questo indica che si tratta di una stringa non elaborata ; poiché i percorsi del file system Windows di solito contengono barre rovesciate (un carattere di escape in Python), dobbiamo usarlo per impedire a Python di interpretare erroneamente le barre rovesciate e i caratteri successivi come sequenze di caratteri speciali.
    • Assicurati di mettere le virgolette attorno alle variabili in linea perché senza di esse Python penserà che sono identificatori anziché stringhe.

    Blocco di codice:

    import os, csv
    
    def multivaluesToCsv(csvfilepath, csvfilename, fcnames, minvalues, avgvalues, maxvalues):
        ext = 'csv' # Define output file extension (e.g. csv or txt)
        header = ['FC', 'MIN', 'AVG', 'MAX'] # Define header row (column names)
    
        # Join CSV file path and name, adding extension if necessary
        csvfile = os.path.join(csvfilepath, os.extsep.join((csvfilename, ext)) if not os.path.splitext(csvfilename)[1].lower().endswith(ext) else csvfilename)
    
        # Open text file for writing
        with open(csvfile, 'wb') as f:
            w = csv.writer(f)
            w.writerow(header) # Write header row
            rows = zip(*map(lambda x: x.split(';'), [fcnames, minvalues, avgvalues, maxvalues])) # Transpose the semicolon-delimited values into rows
            w.writerows(rows)
        return csvfile
  8. (Facoltativo) Esporre le variabili di input e output come parametri del modello se si desidera essere in grado di eseguirle dalla finestra di dialogo degli strumenti del modello o collegarle insieme ad altri modelli / script. L'unico output del modello esterno è il file CSV.

  9. (Facoltativo) Collegare le variabili di input e gli output del modello interno allo strumento Calculate Value come precondizioni. Non penso che questo abbia effettivamente alcun effetto, lo rende solo più chiaro visivamente su ciò che sta succedendo.

Ho provato questo con ModelBuilder e l'ho fatto funzionare (vedi schermate).

Modello interno : Modello interno

Modello esterno: Modello esterno

Il modello interno esegue tutti i suoi processi una volta per classe di entità, quindi lo strumento Calcola valore viene eseguito una volta alla fine per generare il file CSV una volta e una sola volta.


Ciao, grazie per l'impegno profuso nella tua risposta e mi scuso per la mia risposta tardiva. Sto cercando di eseguire il modello come hai descritto, ma ho problemi con il CSV. Ho creato un file CSV vuoto in Excel e l'ho salvato, quindi l'ho caricato nel modello. ERRORE 000539: Errore nell'esecuzione dell'espressione: multivaluesToCsv (r "% CSV File%", "% FC Name Values%", "% Valori minimi%", "% Valori medi%", "% Valori massimi%") <tipo 'eccezioni .IOError '>: [Errno 13] Autorizzazione negata: u'% CSV File% 'Impossibile eseguire (Calcola valore). Continuo a ricevere questo errore. Il mio CSV si chiama CSVFile.csv.
JPD,

1
L'ho appena risolto: questa è la soluzione perfetta. Grazie mille per il vostro aiuto!
JPD,

Il codice Python creerà il file CSV per te, non è necessario crearlo in anticipo. Come hai visto, però, se apri il file in Excel, questo blocca il file e non può essere scritto da Python fino a quando non lo chiudi.
blah238,

2
Cordiali saluti Ho aggiornato le istruzioni e le schermate per utilizzare i modelli annidati per evitare che Calcoli valore venga eseguito più volte e ho risolto il problema in cui il file di testo doveva esistere in precedenza (ora specificate la posizione di output e il nome del file come due parametri separati).
blah238,

Risposta eccellente! Mi ha aiutato a risolvere un problema simile emettendo le statistiche di convalida incrociata del livello geostatistico in un file CSV. Grazie @ blah238!
Cotton.Rockwood,

1

L'output descritto dal modello è semplicemente un valore aggiornato nella tabella degli attributi, non è vero? Non puoi semplicemente aprire il file .dbf associato allo shapefile aggiornato?

In caso contrario, Selezione tabella (Strumenti di analisi> Estrai) dovrebbe funzionare con una query SQL.


Ciao, grazie per la tua risposta. Temo che non aggiorni il file .dbf di ogni file di forma. L'aggiunta di "Selezione tabella" al modello builder non funziona neanche, poiché non riesco a collegare "Distanza minima / media / massima" o "Valori di output" come input per lo strumento.
JPD,
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.