11 votos

¿Exportación de datos desde la salida de Collect Values en ArcGIS ModelBuilder?

Actualmente estoy jugando con ModelBuilder. He añadido una imagen del modelo que tengo en este momento.

Este modelo está iterando 6 shapefiles, por lo que cada uno de los "valores de salida" contiene 6 cifras en una lista. No puedo encontrar una manera de extraer los valores de estas listas en una tabla / archivo de texto o similar.

¿Hay alguna forma de hacerlo?

model

Esto es lo que se muestra cuando abro "valores de salida" después de ejecutar el modelo: enter image description here

Sólo quiero agarrar esos 6 números de alguna manera...

17voto

auramo Puntos 161

Para ello, puede utilizar la función Calcular el valor (gestión de datos) y algo de magia de Python. Vea también esta pregunta relacionada: ¿Añadir código arbitrario al constructor de modelos de Arcgis?

A variable multivaluada es sólo una cadena de valores delimitada por punto y coma, así que lo que el multivaluesToCsv hace es dividir las variables multivalor en listas y transponerlas en filas que luego se escriben en un CSV (valor separado por comas) archivo de texto.

Iteradores de modelos ejecutar TODOS los procesos del modelo una vez por iteración -- esto no es deseable para nuestra herramienta Calcular Valor, que sólo queremos ejecutar una vez al final. La forma de conseguirlo es creando otro modelo externo que envuelva al modelo interno original. Esto se discute en el tema de ayuda Integrar un modelo dentro de otro modelo .

Así que esto es lo que tienes que hacer para que esto funcione:

Modelo interior - Itera las clases de características, las procesa y recoge los valores:

  1. En su modelo original, que será nuestro modelo "interno", añada otra herramienta Collect Values para recoger el Name para poder asignar los valores de las estadísticas de distancia a sus correspondientes nombres de clases de características.
  2. Exponga las variables de entrada y salida como parámetros del modelo (haga clic con el botón derecho en un óvalo y marque Parámetro del modelo). Haga esto para cada una de las salidas de las herramientas de Recopilación de valores, así como para cualquier parámetro de entrada que necesite, como el Espacio de trabajo de entrada.
  3. Guarde y cierre el modelo interior.

Modelo exterior - Ejecuta el modelo interno, ejecuta la herramienta Calcular Valor sólo una vez cuando el modelo interno se completa:

  1. Cree un nuevo modelo, que será nuestro modelo "externo".

  2. Añadir una variable de tipo Folder para permitirle especificar donde para crear el archivo CSV de salida.

  3. Añadir una variable de tipo String para permitirle especificar el nombre del archivo CSV de salida.

  4. Añada el modelo interno al nuevo modelo (arrastre y suelte desde ArcToolbox o haga clic con el botón derecho del ratón y añada datos o herramientas, busque el modelo interno y haga clic en Añadir)

  5. Cree variables para cualquier parámetro del modelo interno que desee poder establecer desde el modelo externo, como el Espacio de Trabajo de Entrada (haga clic con el botón derecho del ratón en el modelo interno y elija Hacer Variable-Desde Parámetro).

  6. Añadir la herramienta Calcular Valor al nuevo modelo

  7. Pegue lo siguiente en las casillas correspondientes de la herramienta Calcular valor:

    Expresión :

    multivaluesToCsv(r"%Output CSV File Location%", "%Output CSV File Name%", "%Feature Class Names%", "%Minimum Distance Values%", "%Average Distance Values%", "%Maximum Distance Values%")
    • Esto utiliza sustitución de variables en línea para pasar las variables del modelo a la función. Ajústelo para que coincida con los nombres de las variables del modelo.
    • El r antes de "%Output CSV File Location%" es significativo: esto indica que se trata de un cadena bruta porque las rutas del sistema de archivos de Windows suelen contener barras invertidas (un carácter de escape en Python), tenemos que usar esto para evitar que Python malinterprete las barras invertidas y los caracteres posteriores como secuencias de caracteres especiales.
    • Asegúrate de poner comillas alrededor de las variables en línea porque sin ellas Python pensará que son identificadores en lugar de cadenas.

    Bloque de código:

    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. (Opcional) Exponga las variables de entrada y salida como parámetros del modelo si desea poder ejecutarlas desde el diálogo de herramientas del modelo o encadenarlas con otros modelos/scripts. La única salida del modelo externo es el archivo CSV.

  9. (Opcional) Conecte las variables de entrada y las salidas del modelo interno a la herramienta Calcular Valor como condiciones previas. No creo que esto realmente tiene ningún efecto, sólo hace que sea más claro visualmente en cuanto a lo que está pasando.

He probado esto con ModelBuilder y he conseguido que funcione (ver capturas de pantalla).

Modelo interior : Inner Model

Modelo exterior: Outer Model

El modelo interno ejecuta todos sus procesos una vez por clase de característica, y luego la herramienta Calcular Valor se ejecuta una vez al final para dar salida al archivo CSV una y sólo una vez.

1voto

Michael L Perry Puntos 2380

La salida que describe su modelo es simplemente un valor actualizado en la tabla de atributos ¿no es así? ¿No puede simplemente abrir el archivo .dbf asociado al shapefile actualizado?

En su defecto, Table Select (Analysis Tools > Extract) debería funcionar con una consulta SQL.

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X