4 votos

¿Cómo se crea una herramienta iterativa Seleccionar por ubicación, Estadísticas resumidas utilizando ModelBuilder?

Realizo mucho análisis de proximidad utilizando "seleccionar por ubicación" y me gustaría reducir el esfuerzo que se dedica cada vez a hacer esto!

He creado un modelo usando ModelBuilder que:

  1. Itera sobre entidades en una capa de entidades (capa de origen);
  2. Selecciona entidades en una capa de destino separada basada en los parámetros establecidos; y
  3. Utiliza estadísticas resumidas para resumir sobre un campo específico.

Donde me estoy atascando es en hacer que esto sea lo más parecido posible a una herramienta estándar.

Tengo dos problemas con los que me estoy encontrando:

  1. He establecido el "campo de estadísticas" de la herramienta de Estadísticas Resumidas como un parámetro del modelo. Sin embargo, cuando voy a ejecutar esta herramienta a través de ArcToolbox, establezco la capa de destino, pero el campo de estadísticas no se llena con la lista de campos potenciales de la capa de destino. El menú desplegable permanece en blanco. ¿Hay alguna forma de hacer que todos los campos de la capa de destino se llenen de manera similar a como lo harían si estuviera utilizando la herramienta de Estadísticas Resumidas sola y estableciendo una capa de entrada?
  2. Get Field Value obtiene el valor de la primera fila del campo especificado, pero no sé cómo decirle que obtenga el valor del campo en el que acabo de hacer un resumen.

Entonces, en Estadísticas Resumidas, si le dije que obtuviera la SUMA de un campo llamado POPTOTAL, entonces quiero que la herramienta Get Field Value tome el valor del nuevo campo llamado "SUM_POPTOT" en las estadísticas de salida. Solo debería haber una fila de datos, así que no necesito preocuparme por obtener la fila correcta. Actualmente tengo "Campo" establecido como un parámetro del modelo, pero no creo que sea necesario.

He publicado este hilo en el foro de ArcGIS, pero no he recibido ninguna respuesta. Todavía soy nuevo en ModelBuilder... Tengo algo de experiencia en programación, así que el script de Python estaría bien (o tal vez incluso mejor).

Modelo de Análisis de Proximidad Iterativo

Diálogo de Herramienta de Análisis de Proximidad Iterativo

1 votos

¿Puede incluir tal vez una imagen de su cuadro de diálogo de herramientas? Creo que entiendo lo que quiere como sus entradas pero no tengo claro su resultado deseado. ¿Quiere ver cuadros de diálogo de herramientas repetidos - uno por capa iterada - o solo uno al principio para elegir el campo a utilizar en todas las iteraciones? Su pregunta está bien formulada pero quizás edítela para proporcionar estas aclaraciones.

0 votos

Gracias por responder. Me gustaría ver solo un cuadro de diálogo de herramientas al principio para elegir el campo que se utilizará en todas las iteraciones. He editado mi publicación original para incluir una captura de pantalla de mi modelo y cuadro de diálogo de herramientas. He anidado esta herramienta dentro de otra para crear efectivamente la tabla de salida (esa fue la mejor forma que encontré para crear una tabla de salida a partir de este proceso).

0 votos

¿Tus datos están en una geodatabase o como shapefiles? En el pasado, he tenido problemas con ModelBuilder al no reconocer valores que aún no existen, mientras que los archivos independientes no tienen el mismo problema. Ahora principalmente trabajo en Python, así que no sé si este sigue siendo un problema.

3voto

msayler Puntos 133

Si entiendo la necesidad correctamente, podrías modificar el código de validación para que llene la lista después de seleccionar una capa. Es posible que tengas que convertirlo en un script de Python (está en las Propiedades del Script en la pestaña de Validación).

El código de validación contiene funciones que se ejecutan cuando se abre la herramienta, cuando se cambia un parámetro y después de que se ejecuta la validación interna. No hace referencia a un archivo de script como lo hace la herramienta en sí. Tienes que editar en el lugar y guardar, o copiar y pegar tu código.

Modifiqué este código de validación para deshabilitar algunos campos de parámetros hasta que se seleccione el primer parámetro. También rellena una lista seleccionable al obtener los valores únicos de un campo de atributo de una clase de entidad. Básicamente, está configurado para esperar a que el usuario elija una conexión, utiliza esa conexión para mirar la clase de entidad, rellena una lista basada en los valores encontrados para uno de los campos de la clase de entidad, y solo entonces hace que el resto de los parámetros estén disponibles para completar.

import arcpy
class ToolValidator:
    """Clase para validar los valores de los parámetros de una herramienta y controlar
    el comportamiento del diálogo de la herramienta."""

    def \_\_init\_\_(self):
        """Configurar el Geoprocesador y la lista de parámetros de herramienta."""
        self.params = arcpy.GetParameterInfo()
        self.X = 0

    def initializeParameters(self):
        """Refinar las propiedades de los parámetros de una herramienta. Este método se
        llama cuando se abre la herramienta."""
        self.params\[1\].enabled = False
        self.params\[2\].enabled = False
        self.params\[3\].enabled = False
        #self.params\[4\].value = "False" #para depuración
        return

    def updateParameters(self):
        """Modificar los valores y propiedades de los parámetros antes de que se realice la
        validación interna. Este método se llama cada vez que un parámetro
        ha sido cambiado."""

        if self.X == 0:
            if self.params\[0\].altered == True:

                FC = str(self.params\[0\].value) + "\\\\gis.ELEC.ElectricDataset\\\\gis.ELEC.eCircuitBreaker"
                self.params\[4\].value = FC
                Col = "FeederID"

                self.params\[1\].filter.list = \[str(val) for val in \\
                                        sorted(\\
                                            set(\\
                                                row.getValue(Col) for row in \\
                                                    arcpy.SearchCursor(FC, None, None, Col)\\
                                            )\\
                                        )\\
                                    \]

                self.params\[1\].enabled = True
                self.params\[2\].enabled = True
                self.params\[3\].enabled = True
                self.X = 1
                                #self.params\[4\].value = "True" #para depuración

        return

    def updateMessages(self):
        """Modificar los mensajes creados por la validación interna para cada parámetro de la
        herramienta. Este método se llama después de la validación interna."""
        return

Algunos recursos sobre la validación de scripts:

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