Definieren von Definitionsabfragen in ArcGIS Desktop?

10

Ich verwende in meinem täglichen GIS-Leben häufig Definitionsabfragen, aber eines der vielen Dinge, die ich an ArcMap als störend empfunden habe, ist die Unfähigkeit, Definitionsabfragen zu kommentieren. Ich möchte diese Option haben, da ich manchmal die Definitionsabfrage aktivieren / deaktivieren oder mehrere Abfragen in einer einzelnen Shapefile haben möchte, aber jeweils nur eine aktiv ist.

Um dies zu umgehen, habe ich normalerweise nur ein Notizblockdokument im Hintergrund und kopiere und füge es nach Bedarf ein. Die ideale Lösung wäre jedoch, die Registerkarte Definitionsabfrage in den Ebeneneigenschaften zu verwenden, um dieses Dokument zu ersetzen. Ich habe möglicherweise mehrere verschiedene Abfragen auf einer Ebene, aber alle sind auskommentiert.

Soweit ich weiß, werden Definitionsabfragen in SQL geschrieben. Um in SQL zu kommentieren, beginnen Sie entweder eine Zeile mit: - oder schließen eine Anweisung in Klammern ein: {} . Ich habe beide ausprobiert:

Original: "DATA_AQUISITION" LIKE 'MISSING XSECTION'
Dashes:   --"DATA_AQUISITION" LIKE 'MISSING XSECTION'
Brackets: {"DATA_AQUISITION" LIKE 'MISSING XSECTION'}

Die letzten beiden Anweisungen geben einen SQL-Ausdrucksfehler zurück und werden in ArcMap nicht gezeichnet. Ich suche keine Programmierlösung, da das einfach zu viel Arbeit wäre.

Cody Brown
quelle
2
Ich habe ArcGIS auf diesem System nicht zum Auschecken, aber funktioniert so etwas wie 'OR 1 = 1' oder vielleicht sogar ObjectID> -1?
Devdatta Tengshe
@ DevdattaTengshe, die zu ziemlich funktioniert, kommentieren eine Abfrage aus: "OBJECTID" <> -1 OR "DATA_AQUISITION" LIKE 'MISSING XSECTION'Das ist eine großartige Lösung, aber ich suche nach etwas, das eher wie ein tatsächlicher Kommentar aussieht. Dies kann in jeder Codesprache durchgeführt werden, in der Sie mehrere Abfrageoptionen in verschiedenen Zeilen haben und alle bis auf eine auskommentiert sind. Wenn es nicht möglich ist, soll es so sein, aber ich glaube, es wäre eine großartige Option.
Cody Brown

Antworten:

6

Nur eine Vermutung, aber der Grund, warum das Auskommentieren nicht funktioniert, liegt wahrscheinlich darin, dass eine Definitionsabfrage nur der WHERE-Klauselteil einer größeren SQL-Anweisung ist, die von ArcGIS intern erstellt wird, wenn die zugrunde liegende Datenbank abgefragt werden muss, beispielsweise um die Ebene zu zeichnen . Wenn Sie die Kommentarzeichen hinzufügen, fügt ArcGIS weiterhin die WHERE-Klausel und die zugrunde liegenden DB-Freaks hinzu, da es sich nicht um gültiges SQL handelt.

Im Dialogfeld "Abfrage-Generator" befinden sich Schaltflächen zum Laden und Speichern. Speichern erstellt eine EXP-Datei, die Sie dann mit der Schaltfläche Laden wieder laden können. Es sind ein paar Klicks mehr, als Sie wahrscheinlich suchen, aber es ist etwas.

blah238
quelle
Das stimmt, dass es nur ein Teil einer größeren Aussage ist. Es ist sehr wahrscheinlich, dass die DB ausflippt, wenn wir einen Kommentar hinzufügen, aber ich weiß, dass es in anderen Programmen möglich ist, die SQL verwenden, um einen Kommentar mitten in einer Anweisung hinzuzufügen. Das Speichern und Laden einer .exp-Datei habe ich bereits verwendet, aber wie Sie sagten, sind es ein paar Klicks mehr, als ich suche. Ich versuche auch, die Menge an Code und Dateien zu reduzieren, die an jedes MXD angehängt sind, und das würde es stattdessen erhöhen.
Cody Brown
2
SELECT * FROM table WHEREist nicht gültig SQL ist das, worauf ich hinaus wollte. Nach dem WHERE-Schlüsselwort muss etwas stehen, oder das WHERE-Schlüsselwort muss überhaupt nicht vorhanden sein. ArcGIS fügt wahrscheinlich WHERE hinzu, wenn die Definitionsabfrage überhaupt etwas enthält.
blah238
Ich habe es versucht SELECT * FROM table WHERE "OBJECTID" <> -1 --"DATA_AQUISITION" LIKE 'MISSING XSECTION'und SELECT * FROM table WHERE "OBJECTID" <> -1 {"DATA_AQUISITION" LIKE 'MISSING XSECTION'}beide führen zu den gleichen Fehlern. Es folgt etwas WHERE, kann aber die Kommentare immer noch nicht verarbeiten.
Cody Brown
1
Huh. Was auch immer der Grund sein mag, der Kommentaransatz wird eindeutig nicht funktionieren.
blah238
4
Tatsächlich sieht die Kommentarsyntax im C-Stil so aus, als würde sie funktionieren. Versuchen Sie dies zum Beispiel : 1 = 1 /*"DATA_AQUISITION" LIKE 'MISSING XSECTION'*/. Arbeitete für mich bei Oracle. Der 1 = 1Teil wird benötigt, nur die Verwendung des Kommentars funktioniert nicht (Fehler "Fehlender Ausdruck").
blah238
4

Der Blockkommentar / .. / scheint zu funktionieren, solange Ihre Definitionsabfrage etwas enthält. Wenn Sie alles auskommentieren, müssen Sie vor Ihren auskommentierten Zeilen eine 1 = 1 setzen

Beispiele:

Alle auskommentiert:

1=1  
/*  
  and ASSIGNMENT_STATUS <> 'Closed' 
  and DEVICE_TYPE = 'device'     
  and ASSIGNED_TO = 'somebody'    
*/

1 unkommentiert, 2 auskommentiert:

ASSIGNMENT_STATUS <> 'Closed' 
/* 
  and DEVICE_TYPE = 'device'     
  and ASSIGNED_TO = 'somebody'    
*/

2 unkommentiert, 1 auskommentiert:

ASSIGNMENT_STATUS <> 'Closed' 
DEVICE_TYPE = 'device'
/*      
  and ASSIGNED_TO = 'somebody'    
*/

Bewegen Sie einfach das "/ " und " /".

JasonT
quelle
1

XTools Pro, ein Nicht-ESRI-Add-On, verfügt über eine Funktion, mit der eine Definitionsabfrage auf einer Ebene ein- und ausgeschaltet werden kann. Sehr hilfreich.

Sie können Ihre Definitionsabfrage auch auf der Registerkarte "Allgemein" der Ebeneneigenschaften kopieren / einfügen. Dort gibt es ein Fenster für "Beschreibung", das oft nicht verwendet wird. Ich kopiere / füge meine Definitionsabfragen oft dort ein, wenn ich sie deaktivieren muss. Es sind im Dokument gespeichert

Marie
quelle
Hmm hört sich gut an, aber kostet XTools Geld oder ist es ein schönes kostenloses Add-On?
Cody Brown