Filtern von Features mit Definitionsabfragen

Wenn einer Karte oder Szene ein Dataset als Layer hinzugefügt wird, soll manchmal nur eine Teilmenge der Features im Dataset verwendet und dargestellt werden. Hier einige Beispiele:

  • Aus einem Dataset mit Städten nur diejenigen herausfiltern, die über eine Bevölkerungszahl von über einer Million Menschen verfügen
  • Aus einem Dataset mit Wasserläufen nur solche extrahieren, die ganzjährig Wasser führen
  • Aus einem Dataset mit Flurstücken nur die gewerblich nutzbaren Flächen betrachten

Mit Definitionsabfragen können Sie einen Filter definieren, um Einschränkungen dafür festzulegen, welche Features vom Layer aus dem Dataset abgerufen werden. Das bedeutet, dass sich eine Definitionsabfrage nicht nur auf die Darstellung auswirkt, sondern auch darauf, welche Features in der Attributtabelle des Layers angezeigt und von Geoverarbeitungswerkzeugen ausgewählt, beschriftet, identifiziert und verarbeitet werden können.

Ein Beispiel für eine Definitionsabfrage.

Diese Beispieldefinitionsabfrage filtert Stadt-Features in China heraus, die weniger als 100.000 Einwohner haben oder keine Provinzhauptstädte sind.

Wenn Sie Einschränkungen dafür festlegen möchten, welche Features dargestellt werden, aber dennoch alle Features abgefragt und verarbeitet werden sollen, verwenden Sie stattdessen Anzeigefilter. Definitionsabfragen und Anzeigefilter können gemeinsam für einen Layer verwendet werden. Mit Definitionsabfragen werden jedoch die verfügbaren Features im Layer eingeschränkt, während Anzeigefilter nur die angezeigten Features einschränken.

Definitionsabfragen bestehen aus mindestens einer Klausel. Es gibt zwei Typen von Klauseln: Attributklauseln und räumliche Klauseln. Alle Klauseln werden mit dem Abfrage-Manager und mithilfe der SQL-Syntax erstellt. Informationen zur Verwendung von Klauseln und Abfragen sowie zum Speichern und Laden von Abfragen aus Dateien finden Sie unter Einführung in Abfrageausdrücke.

Es können mehrere Definitionsabfragen mit einem Layer verknüpft werden, wobei jedoch nicht mehr als eine Definitionsabfrage aktiv sein kann. Selbst wenn mehrere Abfragen für einen Layer definiert wurden, können alle ausgeschaltet werden, was bedeutet, dass keine Abfrage aktiv angewendet wird.

Hinweis:

In diesem Thema werden Definitionsabfragen für einen Feature-Layer beschrieben, Definitionsabfragen können jedoch auf die gleiche Weise für Standalone-Tabellen verwendet werden.

Erstellen einer Definitionsabfrage für einen Layer

Zum Erstellen einer Definitionsabfrage für einen Layer führen Sie die folgenden Schritte aus:

  1. Stellen Sie sicher, dass ein Layer im Bereich Inhalt ausgewählt wurde.
  2. Klicken Sie in der Registerkartengruppe Feature-Layer auf die Registerkarte Daten.
  3. Klicken Sie auf der Registerkarte Daten in der Gruppe Definitionsabfrage auf die Schaltfläche Definitionsabfrage erstellen Startprogramm, um das Dialogfeld Layer-Eigenschaften mit der geöffneten Registerkarte Definitionsabfrage zu öffnen.
  4. Klicken Sie auf die Schaltfläche Neue Definitionsabfrage, oder klicken Sie auf das Dropdown-Menü, um eine Abfrage im Designer-Modus (mit Klauseln), im Editor-Modus (mit SQL-Code) oder aus einer Abfrageausdrucksdatei (.exp) zu erstellen.
  5. Wählen Sie im Abfrage-Manager die Werte in den Menüs aus, um die Klausel zu erstellen. Diese Menüs mit ihren Werten hängen von den Quelldaten ab.
  6. Sie können auch auf Klausel hinzufügen Neue Klausel hinzufügen klicken, um der Abfrage eine weitere Attributklausel hinzuzufügen. Wählen Sie die erforderlichen Werte aus den Menüs in der neuen Klausel aus. Wiederholen Sie diesen Schritt, um weitere Attributklauseln hinzuzufügen, oder klicken Sie auf das Dropdown-Menu , um eine räumliche Klausel hinzuzufügen.
  7. Zusätzlich können Sie auf Einstellungen Einstellungen klicken, um die Anzeige der Abfrage oder ihrer Feldwerte zu ändern. Diese Einstellungen gelten für alle Klauseln.
    • Klicken Sie auf Aufsteigend sortieren oder Absteigend sortieren, damit die Namen der Felder im Dropdown-Menü in alphabetischer Reihenfolge angezeigt werden. Klicken Sie auf Originalreihenfolge, um die Standardreihenfolge der Felder wiederherzustellen.
    • Feld-Aliasnamen anzeigen ist standardmäßig aktiviert. Klicken Sie auf Feldnamen anzeigen, um den Namen der Tabelle in das Dropdown-Menü mit den Feldern der Klausel aufzunehmen. Besonders hilfreich ist dies, wenn Ihr Layer an einer Verbindung mit gemeinsamen Feldnamen beteiligt ist.
    • Sichtbare Felder anzeigen ist standardmäßig aktiviert. Klicken Sie auf Alle Felder anzeigen, damit auch die ausgeblendeten Felder im Dropdown-Menü mit den Feldern der Klausel angezeigt werden.
    • Automatische Vervollständigung in SQL ist eine standardmäßig aktivierte Einstellung des Editor-Modus, die beim Schreiben von SQL-Code Vorschläge macht. Klicken Sie auf diese Einstellung, um die Automatische Vervollständigung in SQL zu deaktivieren.
    • Nur Werte für Domäne und Subtype anzeigen ist standardmäßig ausgewählt. Klicken Sie auf Alle Werte anzeigen, um ungültige oder falsche Werte in das Feld-Dropdown-Menü mit eindeutigen Werte aufzunehmen.
  8. Optional können Sie mit der Maus auf einen Abfragenamen zeigen und klicken, um die Abfrage umzubenennen.
  9. Klicken Sie optional auf Die Gültigkeit des SQL-Ausdrucks überprüfen Die Gültigkeit des SQL-Ausdrucks überprüfen, um die Abfrage zu überprüfen.
  10. Um die Abfrage zu überprüfen und abzuschließen, klicken Sie im Abfrage-Manager auf Übernehmen.
  11. Wenn es sich hierbei um die einzige Definitionsabfrage für den Layer handelt, wird diese damit zur aktiven Definitionsabfrage und sofort angewendet. Gibt es andere Definitionsabfragen für den Layer, klicken Sie auf Als aktiv festlegen Als aktiv festlegen, um eine Definitionsabfrage auf den Layer anzuwenden.

Hinzufügen einer räumlichen Klausel zu einer Definitionsabfrage

Neben der Erstellung von Definitionsabfragen mit einer oder mehreren Klauseln können Definitionsabfragen auch eine räumliche Klausel enthalten. Im Gegensatz zu regulären Klauseln, die die aus dem Dataset abgerufenen Features filtern, indem sie ein Feld oder einen Wertebereich angeben, verwenden räumliche Klauseln die Geometrie eines Layers oder einer räumlichen Ausdehnung.

Eine Definitionsabfrage kann nur eine räumliche Klausel enthalten.

Hinweis:

Während Feature-Layer sie unterstützen, werden räumliche Klauseln in Kombination mit bestimmten anderen Layer-Typen nicht unterstützt. Lesen Sie in der Dokumentation Ihres Layer-Typs nach, ob der Layer-Typ räumliche Klauseln unterstützt.

Gehen Sie folgendermaßen vor, um einer vorhandenen Definitionsabfrage eine räumliche Klausel hinzuzufügen:

  1. Klicken Sie ggf. im Bereich Inhalt mit der rechten Maustaste auf den Layer, und klicken Sie auf Eigenschaften, um das Dialogfeld Layer-Eigenschaften zu öffnen.
  2. Klicken Sie auf der Registerkarte Definitionsabfrage auf Bearbeiten, um eine vorhandene Abfrage zu ändern, oder führen Sie die Schritte 1 bis 6 des oben beschriebenen Workflow aus, um eine neue Definitionsabfrage zu erstellen.
  3. Klicken Sie auf das Dropdown-Menü Klausel hinzufügen und klicken Sie auf Räumliche Klausel hinzufügen.

    Das Dialogfeld Geometrie von räumlicher Klausel wird angezeigt.

  4. Wählen Sie im Dialogfeld Geometrie von räumlicher Klausel eine der folgenden Optionen aus:
    • Layer auswählen: Die Geometrie eines Layers in der aktiven Karte verwenden. Grafik- und Multipatch-Layer können nicht ausgewählt werden. Sie können die Geometrie aller Features im Layer, nur ausgewählte Features oder nur Features in der Ansicht verwenden. Wenn der Layer, der zur Erstellung der Geometrie verwendet wurde, bearbeitet oder aus der Karte entfernt wird, ist die Geometrie der räumlichen Klausel nicht betroffen.
    • Benutzerdefinierte Ausdehnung auswählen: Eine benutzerdefinierte Ausdehnung aus einer der folgenden Quellen verwenden:
      • Aktuell sichtbare Ausdehnung
      • Ausdehnung der Daten in allen Layern
      • Ausdehnung aller Features oder Elemente in einem Layer
      • Ausdehnung aller ausgewählten Features oder Elemente
      Außerdem können Sie die Anzeigeeinheiten ändern, um die Ausdehnung anzupassen.
  5. Wählen Sie einen Layer oder eine Ausdehnungsoption aus der Liste aus, um die Geometrie für die räumliche Klausel zu generieren. Eine der Vorschau der Geometrie wird angezeigt.
  6. Klicken Sie auf OK.

    Der Abfrage wird eine räumliche Klausel hinzugefügt. Im Editor- und im Designer-Modus wird die räumliche Klausel unter den Ausdrücken der Attributklausel angezeigt. Mit dem Operator AND wird die räumliche Klausel dem übrigen Teil des Ausdrucks angefügt.

    Hinweis:

    Der Feldname "Shape" und der Operator wird überschnitten von sind erforderliche Komponenten der räumlichen Klausel. Diese Werte können nicht geändert werden.

Festlegen der aktiven Definitionsabfrage

Sie können für einen Layer oder eine Tabelle mehrere Definitionsabfragen definieren und zwischen diesen hin und her wechseln. Es ist immer jeweils nur eine oder keine Abfrage aktiv. Die Definitionsabfragen werden als Eigenschaft des Layers gespeichert.

Gehen Sie wie folgt vor, um zwischen aktiven Definitionsabfragen hin und her zu wechseln:

  1. Stellen Sie sicher, dass im Bereich Inhalt ein Layer ausgewählt ist.
  2. Klicken Sie in der Registerkartengruppe Feature-Layer auf die Registerkarte Daten.
  3. Wählen Sie auf der Registerkarte Daten in der Gruppe Definitionsabfrage im Menü Definitionsabfrage eine Abfrage aus, die auf den Layer angewendet werden soll.
  4. Alternativ können Sie die aktive Abfrage auch über die Registerkarte Definitionsabfrage des Dialogfeldes Layer-Eigenschaften festlegen.
    • Klicken Sie auf Als aktiv festlegen Als aktiv festlegen, und klicken Sie auf Übernehmen, um diese Abfrage auf den Layer anzuwenden. Daraufhin werden alle anderen Abfragen inaktiv. Der Name der aktiven Abfrage wird am unteren Rand des Dialogfeldes Eigenschaften angegeben. Wenn viele Abfragen angezeigt werden und die aktive Abfrage fehlt, klicken Sie auf Aktive Definitionsabfrage anzeigen Aktive Definitionsabfrage anzeigen, um per Bildlauf zu der Abfrage zu gelangen.
    • Klicken Sie auf Aktive Abfrage löschen Aktive Abfrage löschen, und klicken Sie auf Übernehmen, wenn auf den Layer bzw. die Tabelle keine Abfrage angewendet werden soll. Die Abfragen werden für den Layer bzw. die Tabelle beibehalten, aber derzeit nicht angewendet.

Tipp:

Im Bereich Inhalt können Sie die Liste der Layer filtern, damit ausschließlich die Layer mit einer aktiven Definitionsabfrage angezeigt werden.

Ändern von vorhandenen Abfragen

Klicken Sie bei ausgewähltem Layer im Bereich Inhalt in der Registerkartengruppe Feature-Layer auf der Registerkarte Daten in der Gruppe Definitionsabfrage auf die Schaltfläche Definitionsabfrage erstellen Startprogramm, um das Dialogfeld Layer-Eigenschaften mit der geöffneten Registerkarte Definitionsabfrage zu öffnen. Wenn Sie eine Definitionsabfrage ändern möchten, zeigen Sie mit der Maus auf die Abfrage, und führen Sie eine der folgenden Aktionen aus:

  • Wenn Sie Klauseln ändern, hinzufügen oder aus der Definitionsabfrage entfernen möchten, klicken Sie in der Abfragezelle auf Bearbeiten.
    • Um eine Klausel in einer Abfrage zu bearbeiten, passen Sie die Werte ggf. an.
    • Um eine Klausel aus der Abfrage zu entfernen, klicken Sie auf Klausel entfernen Klausel entfernen.
    • Um eine Klausel in der Abfrage einzufügen, klicken Sie auf Klausel hinzufügen Neue Klausel hinzufügen.
    • Um die Geometrie der räumlichen Klausel einer vorhandenen Abfrage zu bearbeiten, klicken Sie auf Geometrie Räumlichen Filter festlegen.

    Klicken Sie auf Übernehmen, um die Änderungen in die Definitionsabfrage zu übernehmen.

  • Wenn Sie die Definitionsabfrage aus dem Layer oder der Tabelle entfernen möchten, während Sie sich nicht im Bearbeitungsmodus befinden, zeigen Sie mit der Maus auf die Zelle der Definitionsabfrage, und klicken Sie auf Definitionsabfrage entfernen Entfernen.
  • Um eine Definitionsabfrage umzubenennen, klicken Sie auf den Namen einer Definitionsabfrage, und geben Sie einen neuen Namen ein.
  • Um die Abfragesyntax in eine Abfrageausdrucksdatei (.exp) zu exportieren, zeigen Sie, während Sie sich nicht im Bearbeitungsmodus befinden, mit der Maus auf die Zelle der Definitionsabfrage, und klicken Sie auf Definitionsabfrage speichern Speichern.
  • Um die aktuelle Abfrage durch eine andere Abfrage aus einer Abfrageausdrucksdatei (.exp) zu ersetzen, zeigen Sie, während Sie sich nicht im Bearbeitungsmodus befinden, mit der Maus auf die Zelle der Definitionsabfrage, und klicken Sie auf Definitionsabfrage laden Abfrage laden.

Festlegen von Definitionsabfragen für mehrere Layer gleichzeitig

Wenn Definitionsabfragen mit demselben Namen für mehrere Layer verwendet werden, können die Abfragen für die Layer gleichzeitig aktiviert werden, auch wenn der Inhalt der Abfragen nicht identisch ist. Das bedeutet, dass Sie für ein bestimmtes Szenario zusammengehörige Abfragen erstellen und gleichzeitig anwenden können. Für ein anderes Szenario können Sie ggf. zu einer anderen Gruppe von Abfragen wechseln.

Gehen Sie wie folgt vor, um Definitionsabfragen mit einem gemeinsamen Namen auf mehrere Layer gleichzeitig anzuwenden:

  1. Stellen Sie sicher, dass die Layer im Bereich Inhalt ausgewählt wurden.
  2. Klicken Sie in der Registerkartengruppe Feature-Layer auf die Registerkarte Daten.
  3. Wählen Sie auf der Registerkarte Daten in der Gruppe Definitionsabfrage im Menü Definitionsabfrage eine Abfrage aus, die auf den Layer angewendet werden soll.

    Nur Definitionsabfragen mit einem in allen ausgewählten Layern identischen Namen werden angezeigt.

Automatisieren der Erstellung von Definitionsabfragen

Sie können die Erstellung und Durchführung von Definitionsabfragen mit Python automatisieren, indem Sie eine Kombination von ArcPy-Funktionen verwenden. Weitere Informationen zu diesem Thema sowie Codebeispiele finden Sie in der Dokumentation der Layer-Klasse.

Mit dem Werkzeug Definitionsabfrage aus Auswahl generieren können Sie eine Definitionsabfrage auch aus der Auswahl für einen Feature-Layer erstellen.

Freigeben von Layern mit Definitionsdateien

Wenn ein Layer als Feature-Layer oder in einem Kartenbild-Layer freigegeben wird, wird nur die aktive Definitionsabfrage beibehalten und berücksichtigt. Alle anderen inaktiven Definitionsabfragen werden entfernt.

Wenn die Abfrage eine räumliche Klausel enthält, wird ein Fehler zurückgegeben. Weitere Informationen finden Sie in der Beschreibung des folgenden Fehlers: 00428: Die räumliche Klausel der Definitionsabfrage wird vom Server nicht unterstützt.