Bei dieser Art von Operation wird fast immer eine WHERE-Klausel geschrieben, daher halte ich es für angebracht, zumindest ein wenig Python zu verwenden.
Auch wenn dies mit ModelBuilder, IMO, möglich ist, könnte das Erstellen eines Python- Skript-Tools mit benutzerdefinierter Validierung und besserer Kontrolle über die Parametereinstellungen eine bessere Benutzererfahrung bieten - beispielsweise indem die Dropdown-Menüs Field und MultiValue * die entsprechenden Dropdown-Menüs verwenden Sie können Werte auswählen, anstatt sie eingeben zu müssen.
* Möglicherweise nicht sicher über MultiValue-Parameter
Da dies jedoch eine fortgeschrittenere Übung für ein anderes Thema ist, bleibe ich beim ModelBuilder-Ansatz und verwende Python nur zum Erstellen der WHERE-Klausel:
- Erstellen Sie ein neues Modell
- Erstellen Sie Variablen (klicken Sie mit der rechten Maustaste auf die leere Zeichenfläche und klicken Sie auf Variable hinzufügen ) für die eingegebenen Parameter Feature Layer , Field und MultiValue .
- Klicken Sie mit der rechten Maustaste auf diese und wählen Sie Modellparameter
- Fügen Sie der Zeichenfläche ein Werkzeug zum Berechnen von Werten (Datenverwaltung) hinzu . Verbinden Sie die 3 Variablen als Voraussetzung damit (nur zur Anzeige in diesem Fall, aber in anderen Situationen kann dies einen Unterschied in der Ausführungsreihenfolge bewirken).
Doppelklicken Sie auf das Werkzeug Wert berechnen, um es einzurichten:
5a. Kopieren Sie Folgendes in das Feld Ausdruck (passen Sie es an Ihre Variablennamen an):
buildWhereClauseMultiValue(r"%Feature Layer%","%Field%","%Values%")
5b. Kopieren / Einfügen ist folgendes in den Codeblock - Box:
import arcpy
def buildWhereClauseMultiValue(table, field, values):
"""Takes a semicolon-delimited list of values and constructs a SQL WHERE
clause to select those values within a given field and table."""
# Add DBMS-specific field delimiters
fieldDelimited = arcpy.AddFieldDelimiters(arcpy.Describe(table).path, field)
# Split multivalue at semicolons and strip quotes
valueList = [value[1:-1] if (value.startswith("'") and value.endswith("'")) else value for value in values.split(';')]
# Determine field type
fieldType = arcpy.ListFields(table, field)[0].type
# Add single-quotes for string field values
if str(fieldType) == 'String':
valueList = ["'%s'" % value for value in valueList]
# Format WHERE clause in the form of an IN statement
whereClause = "%s IN(%s)" % (fieldDelimited, ', '.join(valueList))
return whereClause
5c. Legen Sie den Ausgabedatentyp als SQL-Ausdruck fest .
5d. Klicken Sie auf OK, klicken Sie mit der rechten Maustaste auf die Ausgabevariable im Werkzeug Wert berechnen und benennen Sie sie in eine aussagekräftigere Variable wie "WHERE-Klausel" um.
- Fügen Sie der Zeichenfläche ein Tool zum Auswählen von Ebenen nach Attributen (Datenverwaltung) hinzu . Verbinden Sie die Variablen Feature Layer und WHERE-Klausel mit dem Werkzeug Layer nach Attribut auswählen.
Fügen Sie der Zeichenfläche ein Werkzeug zum Kopieren von Funktionen (Datenverwaltung) hinzu . Verbinden Sie die Ausgabe des Werkzeugs "Ebene nach Attribut auswählen" mit dem Werkzeug "Features kopieren". Klicken Sie mit der rechten Maustaste auf die Variable Ausgabe-Feature-Class und überprüfen Sie den Modellparameter und (optional) die Optionen Zur Anzeige hinzufügen.
An dieser Stelle sollte es ungefähr so aussehen:
Unter der Modell -> Modelleigenschaften Menü ihm einen guten Namen und Label geben und speichern und zu schließen.
Doppelklicken Sie in ArcToolbox auf das Modell, um das Modelldialogfeld aufzurufen. Geben Sie Ihre Parameter ein und klicken Sie auf OK. Die ausgewählten Features sollten in eine neue Feature-Class exportiert und zur Karte hinzugefügt werden (wenn Sie in der Ausgabe-Feature-Class "Zur Anzeige hinzufügen" aktiviert haben).
ANMERKUNGEN:
Sie können immer Werte fest codieren und keine Variablen "parametrisieren", die der Benutzer nicht ändern soll, wie z. B. die Feature-Layer- oder Feldparameter. Ich mag es einfach, Tools zu haben, die generisch / wiederverwendbar sind, also habe ich diese Modellparameter erstellt. Tatsächlich würde ich das generische Modell einfach per Drag & Drop in ein neues Modell ziehen und dann Ihre vordefinierten Parameter festlegen. Auf diese Weise können Sie mehrere verschiedene vordefinierte "Wrapper" -Modelle erstellen, aber nur ein zugrunde liegendes Modell erledigt die Arbeit Wenn Sie die Funktionalität ändern müssen, müssen Sie sie nur an einer Stelle ändern.
Wenn Sie Glück haben wie ich, müssen Sie das Modell nicht validieren und einige Dummy-Daten angeben, um sie nach der Validierung zu entfernen (beachten Sie, dass alle Modellelemente leer / weiß sind, was bedeutet, dass sie nicht "betriebsbereit" sind). - aber ich konnte es trotzdem ausführen, nachdem ich die Parameter im Modelldialog ausgefüllt hatte).