4 votos

Lista filtrada en la caja de herramientas de ArcGIS

Mi objetivo es coger un montón de clases de características, seleccionar la primera clase de características, listar los campos y devolver esa lista al parámetro 1 como una lista filtrada.

Mi caja de herramientas ArcGIS está configurada con 2 parámetros.

El primer parámetro es una featureclass multivalente

El segundo parámetro es una cadena con el filtro establecido: "Lista de valores" que está vacía. Espero poder rellenar esto. Cuando ejecuto el siguiente código:

def updateParameters(self):

    if self.params[0].value: #when user inputs feature classe(s)

      fcs = self.params[0].value.value # getting list of fcs as string?

      spl = fcs.split(";") #splitting list of fcs

      fields = arcpy.ListFields(spl[0]) #getting list of fields from 1st featureclass

      self.params[1].filter.list = fields #return list of fields to param 1

Cuando introduzco los fcs en el parámetro 0, me sale este error:

ERROR Error de ejecución de updateParameters: Error de ejecución : el objeto 'ValueTable' no tiene el atributo 'value'

2 votos

He visto tus otros mensajes y entiendo cómo quieres que funcione el diálogo, pero ¿cuál es el objetivo final? Usted originalmente quería seleccionar un GDB, que el FC de que se ponen en el 2 º parámetro. Luego en el 3er parámetro quieres listar los campos de todos esos FC, o los campos de un FC seleccionado? ¿Y entonces qué? ¿Qué ocurrirá cuando se ejecute con los FC y los campos seleccionados?

0 votos

He indicado al usuario que todos los datos de ese campo en particular deben tener el mismo esquema, por lo que está bien seleccionar cualquier FC

5voto

John Kramlich Puntos 286

El código que necesita es:

  def updateParameters(self):
    """Modify the values and properties of parameters before internal
    validation is performed.  This method is called whenever a parameter
    has been changed."""
    if self.params[0].value:
        fcs = self.params[0].value.exportToString()
        spl = fcs.split(";")
        desc = arcpy.Describe(spl[0])
        fields = desc.fields # A list of of Field objects
        list = []
        for f in fields:
            list.append(f.name) # Transfer name to new list
        self.params[1].filter.list=list
    return

El archivo de ayuda sugiere que NO se utilice ListFields pero utiliza Describe en su lugar.

5voto

Galbrezu Puntos 142

Aunque puede que tengas tu respuesta, esta es mi opinión basada en lo que pensé que estabas haciendo.

Parámetro 1 = Entrada GDB

Parámetro 2 = Entrada FC (multivalor)

Parámetro 3 = Campos de entrada (multivalor)

enter image description here

Código del validador

  def updateParameters(self):
    """Modify the values and properties of parameters before internal
    validation is performed.  This method is called whenever a parameter
    has been changed."""

    if self.params[0].value:
      #Populate the list of FC from the GDB
      arcpy.env.workspace = self.params[0].value
      fcList = arcpy.ListFeatureClasses() 
      self.params[1].value = fcList

      if self.params[1].value:
        fcs = self.params[1].value.exportToString()

        fieldList = []
        # Loop through every FC and get each field
        for fc in fcs.split(';'):
          desc = arcpy.Describe(fc)
          for field in desc.fields:
            if field.name not in fieldList:
              fieldList.append(field.name)
        self.params[2].value = fieldList   

    return

3voto

sbohlen Puntos 1511

Pude averiguarlo usando ListFields El problema es que me olvidé ListFields devuelto objects no strings .

Código de trabajo:

def updateParameters(self):
  """Modify the values and properties of parameters before internal
  validation is performed.  This method is called whenever a parmater
  has been changed."""

  if self.params[0].value:

    fcs = self.params[0].value.exportToString()

    split = fcs.split(";")

    fields = arcpy.ListFields(split[0])

    l = [f.name for f in fields]

    self.params[1].filter.list = l

  return

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