Einrichten einer Dropdown-Liste in den Parametern des Python-Skript-Tools?

10

Ich versuche, ein Tool aus einem von mir geschriebenen Python-Skript zu erstellen, das eine von mir erstellte Liste als Dropdown-Menü im fertigen Tool als eine der Eingaben verwendet (siehe angehängtes Bild zum Beispiel):

Geben Sie hier die Bildbeschreibung ein

Die Liste, die ich verwende, ist eine große Liste, die alle Städte im Bundesstaat Vermont enthält, und ich generiere sie im Skript aus einer Tabelle (siehe Code unten). Ich vermute, dass mein Problem im Moment nur darin besteht, die Werkzeugeigenschaften so einzustellen, dass diese Liste verwendet und eine Dropdown-Liste für den Benutzer erstellt wird. Hier ist der Codeblock, mit dem die Liste zur Verwendung im Parameter erstellt wird. Hat jemand Probleme mit diesem Code-Ende des Tools?

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)

Hier ist auch ein Bild der Tool-Eigenschaften mit dem Standard-Validierungscode. Muss ich diesen Validierungscode ändern?

Ich habe nach Informationen zum Ändern dieses Validierungscodes gesucht, aber keine Informationen zum Verwenden dieses Codes zum Formatieren von Dropdown-Listen gefunden.

Geben Sie hier die Bildbeschreibung ein

GISdan
quelle

Antworten:

7

Versuchen Sie, den Klassencode des Tool Validator wie folgt festzulegen:

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
quelle