Diese Frage klingt einfach so überflüssig ...
Auf jeden Fall wurde ich gebeten, die Verwendung von SQL in ArcGIS zu untersuchen. Wir verwenden eine SDE-DB für den gesamten serverseitigen Speicher und die DB-Verwaltung / umfangreiche Bearbeitung. Ich versuche jedoch, genauer zu untersuchen, wie integriert SQL in die ArcGIS-Tools ist. Im SQL Query Reference Guide der ArcGIS 10-Hilfe finden Sie einen Hinweis , der eindeutig angibt, dass die SQL-Syntax bei Verwendung des Feldrechner-Tools nicht funktioniert. Ich finde das sehr enttäuschend, da es sehr nützlich erscheint, Informationen bei der Berechnung von Feldwerten direkt aus der Datenbank selbst abrufen und entstellen zu können.
Was sind die größten Einschränkungen und Fallstricke, auf die Sie stoßen können, wenn Sie versuchen, SQL in ArcGIS zu verwenden? Welche Tools sehen die beste Funktionalität, wenn sie in SQL integriert sind?
Wenn ein Beispiel erforderlich ist, um diese Frage klarer zu stellen, versuche ich, die Anzahl der Sonderziele eines bestimmten Typs in einer bestimmten Region zu ermitteln. Jeder Punkt hat ein Attribut, das seinen Typ und seine Region beschreibt. Meine derzeitige Lösung beinhaltet die starke Verwendung von Cursorn zum Zählen und Abrufen von Daten, aber ein Vorgesetzter wies darauf hin, dass eine einfache SQL-Abfrage all dies und mehr kann. Leider scheint die Funktionalität dafür nicht vorhanden zu sein.
Oder ist es?
Antworten:
Wenn Sie Python verwenden möchten, sehen Sie sich den Befehl ArcSDESQLExecute an . Auf diese Weise können Sie beliebiges SQL ausführen, es muss jedoch über SDE verbunden sein. Wenn das Ergebnis der Abfrage eine Reihe von Zeilen ist, werden die Attribute als Python-Liste von Listen zurückgegeben. Andernfalls wird True zurückgegeben, wenn die SQL erfolgreich ausgeführt wurde, oder None, wenn nicht. Siehe auch: Ausführen von SQL über eine ArcSDE-Verbindung
quelle
Wenn Sie benutzerdefinierte ArcObjects schreiben, können Sie mithilfe der ExecuteSQL- Methode beliebiges SQL für einen SDE-Arbeitsbereich ausführen . Diese Methode ist auf Abfragen beschränkt, die keine Ergebnismengen zurückgeben, z. B. INSERT, UPDATE oder einige gespeicherte Prozeduren.
Wenn Sie über die ArcMap-Benutzeroberfläche arbeiten, sind Ihre Optionen etwas eingeschränkter. Der Grund, warum Sie SQL nicht über Feld berechnen verwenden können, liegt darin, dass der Ausdruck tatsächlich VBScript und / oder Python ist. Sie könnten VBScript oder Python verwenden, um einen beliebigen SQL-Ausdruck auszuführen und Werte aus dem resultierenden Cursor zu ziehen, aber ich würde es nicht empfehlen.
Alternativ können Sie Regans Antwort verwenden und eine Abfrageebene erstellen. Für schreibgeschützte Daten ist dies der beste Ansatz. Wenn Sie Daten aktualisieren müssen, ist dies etwas komplizierter. Sie müssen eine Abfrageebene mit Ihren "neuen" Werten erstellen, einen Join für Ihre vorhandene Tabelle durchführen und dann Berechnungsfelder verwenden. Dies könnte mit ExecuteSQL kombiniert werden, um komplexe Aktualisierungen durchzuführen und dann die Ergebnisse anzuzeigen (etwas klobig).
Ihre letzte Alternative besteht darin, SQL direkt für ArcSDE-Tabellen auszuführen.
quelle
Sie sollten überprüfen Abfrage - Layer 10 in ArcMap
quelle
Je nachdem, welches RDBMS Sie verwenden, können Sie SQL-Bibliotheken außerhalb von ArcObjects oder arcpy nutzen, sofern Sie nicht darauf angewiesen sind, Feature-Daten zurückzugewinnen. Viele der Abfragen in der SQL Server-Datenbank, die ich täglich verwende, sind nicht räumlicher Natur. Daher verwende ich die System.Data-Klassen in .NET oder die pymssql-Python-Bibliothek in Python-Anwendungen. Wenn Sie die Verwendung von Geodaten benötigen, sind Abfrageebenen die beste Wahl. Die einzige Einschränkung bei Abfrageebenen besteht darin, dass sie nur mit Daten arbeiten, die mit räumlichen Datentypen gespeichert wurden (nicht mit dem Standardtyp SDEBINARY).
quelle