Configurando a lista suspensa na ferramenta de script Parâmetros da Python?

10

Estou tentando criar uma ferramenta a partir de um script python que escrevi que pegará uma lista que eu criei e a usei como um menu suspenso na ferramenta concluída como uma das entradas (veja a imagem em anexo, por exemplo):

insira a descrição da imagem aqui

A lista que estou usando é uma lista grande que inclui todas as cidades do estado de Vermont e eu a gero no script a partir de uma tabela (consulte o código abaixo). Suspeito que meu problema no momento seja apenas definir as propriedades da ferramenta para pegar essa lista e usá-la para criar uma lista suspensa para o usuário. Aqui está o bloco de código que cria a lista para uso no parâmetro - alguém vê algum problema com esse final de código da ferramenta?

import arcpy
arcpy.env.workspace = "Z:\\OPS\\TechnicalServices\\Culverts\\GetCulverts\\GetCulverts.gdb"
towns = "Database Connections\\GDB_GEN.sde\\GDB_Gen.VTRANS_ADMIN.townindex"
arcpy.MakeFeatureLayer_management(towns,"towns_lyr")

NameList = []
NameListArray = set()
rows = arcpy.SearchCursor("towns_lyr")
for row in rows:
    value = row.getValue("TOWNNAME")
if value not in NameListArray:
    NameList.append(value)
town = NameList

town = arcpy.GetParameterAsText(0)

Aqui também está uma imagem das propriedades da ferramenta, com o código de validação padrão - preciso alterar esse código de validação?

Procurei informações sobre como alterar esse código de validação, mas não consegui encontrar informações sobre como usá-lo para formatar listas suspensas.

insira a descrição da imagem aqui

GISdan
fonte

Respostas:

7

Tente definir o código da classe do validador da ferramenta para isso:

import arcpy
class ToolValidator(object):
  """Class for validating a tool's parameter values and controlling
  the behavior of the tool's dialog."""

  def __init__(self):
    """Setup arcpy and the list of tool parameters."""
    self.params = arcpy.GetParameterInfo()

  def initializeParameters(self):
    """Refine the properties of a tool's parameters.  This method is
    called when the tool is opened."""
    return

  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."""
    towns = "Database Connections\\GDB_GEN.sde\\GDB_Gen.VTRANS_ADMIN.townindex"
    rows = arcpy.SearchCursor(towns)
    self.params[0].filter.list = sorted(list(set(r.getValue('TOWNNAME') for r in rows)))
    del rows
    return

  def updateMessages(self):
    """Modify the messages created by internal validation for each tool
    parameter.  This method is called after internal validation."""
    return
crmackey
fonte