Der Datentyp "ST_Geometry" implementiert die SQL 3-Spezifikation benutzerdefinierter Datentypen (UDTs) und ermöglicht es Ihnen, Spalten zu erstellen, die zum Speichern von räumlichen Daten wie der Lage eines Orientierungspunktes, einer Straße oder eines Flurstückes geeignet sind. Er stellt den International Organization for Standards (ISO)- und Open Geospatial Consortium, Inc. (OGC)-kompatiblen SQL-Zugriff (Structured Query Language) auf die Geodatabase und die Datenbank bereit. Dieser Speichertyp erweitert die Funktionen der Datenbank, indem er die Speicherung von Objekten (Punkte, Linien und Polygone) ermöglicht, die geographische Features darstellen. Er wurde für die effiziente Verwendung von Datenbankressourcen, die Kompatibilität mit Datenbank-Features, wie z. B. Replikation und Partitionierung, und den schnellen Zugriff auf räumliche Daten entwickelt.
Esri hat einen von Esri definierten Typ "ST_Geometry" in Oracle, PostgreSQL und SQLite implementiert. Dieser Datentyp "ST_Geometry" wird in der ArcGIS-Hilfe erklärt.
"ST_Geometry" selbst ist eine abstrakte, nicht instanziierte übergeordnete Objektklasse. Ihre Subclasses können jedoch instanziiert sein. Bei einem instanziierten Datentyp handelt es sich um einen Datentyp, der als Tabellenspalte definiert werden kann und darin eingefügte Werte seines Typs aufweisen kann.
Eine Spalte kann zwar als Typ "ST_Geometry" definiert werden, es werden jedoch keine ST_Geometry-Werte in die Spalte eingefügt, da sie nicht instanziiert werden kann. Stattdessen werden die Subclass-Werte eingefügt.
Im folgenden Diagramm wird die Hierarchie des Datentyps "ST_Geometry" und seiner Subclasses veranschaulicht:
Subclasses
Die Subclasses von "ST_Geometry" sind in zwei Kategorien unterteilt: die Subclasses der Basisgeometrie und die Subclasses der homogenen Sammlung. Die Basisgeometrien umfassen "ST_Point", "ST_LineString" und "ST_Polygon", während die homogene Sammlung "ST_MultiPoint", "ST_MultiLineString" und "ST_MultiPolygon" umfasst. Wie der Name schon besagt, handelt es sich bei den homogenen Sammlungen um Sammlungen der Basisgeometrien. Homogene Sammlungen weisen neben den mit der Basisgeometrie gemeinsamen Eigenschaften auch eigene Eigenschaften auf.
Jede Subclass speichert den durch ihren Namen implizierten Geometrietyp: "ST_MultiPoint" speichert beispielsweise Multipoints. In der folgenden Tabelle finden Sie eine Liste mit den Subclasses und die dazugehörigen Beschreibungen:
Subtype | Beschreibung |
---|---|
ST_Point |
|
ST_LineString |
|
ST_Polygon |
|
ST_MultiPoint |
|
ST_MultiLineString |
|
ST_MultiPolygon |
|
Beachten Sie, dass jede Subclass die Eigenschaften der übergeordneten Objektklasse "ST_Geometry" erbt, aber auch über eigene Eigenschaften verfügt. Bei Funktionen, die für den Datentyp "ST_Geometry" verwendet werden können, sind alle Subclass-Entitätstypen zulässig. Einige Funktionen wurden jedoch auf Subclass-Ebene definiert und nehmen nur bestimmte Subclasses an. Die Funktion "ST_GeometryN" akzeptiert beispielsweise nur die Subtype-Werte "ST_MultiLinestring", "ST_MultiPoint" oder "ST_MultiPolygon" als Eingabe.
Um die Subclass einer "ST_Geometry" zu ermitteln, können Sie die Funktion "ST_GeometryType" verwenden. Die Funktion "ST_GeometryType" gibt für eine "ST_Geometry" die instanziierte Subclass in der Form einer Zeichenfolge zurück. Um zu ermitteln, wie viele Basisgeometrieelemente in einer homogenen Sammlung enthalten sind, können Sie die Funktion "ST_NumGeometries" verwenden, die eine homogene Sammlung annimmt und die Anzahl der enthaltenen Basisgeometrieelemente zurückgibt.
"ST_Geometry"-Funktionsaufrufe
"ST_Geometry"-Funktionen in Oracle und PostgreSQL werden in SQL implementiert. Dies ist eine Sprache auf Datenbankebene. In Oracle ist dies die Procedural Language Structured Query Language (PL/SQL). In PostgreSQL ist dies "PL/pgSQL".
Wenn Sie in einer Oracle- oder PostgreSQL-Datenbank mit SQL-Funktionen auf ST_Geometry-Spalten zugreifen, rufen Sie die Datenbank direkt auf. Daher muss die Datenbank auf die ST_Geometry-Funktionen zugreifen können. In Oracle erzeugt die Datenbank außerdem einen "extproc"-Prozess.
In SQLite werden ST_Geometry-Funktionen in der ST_Geometry-Bibliothek in C implementiert. Sie müssen die ST_Geometry-Bibliothek aufrufen, um die ST_Geometry-Funktionen zu verwenden.
Oracle
Die Funktionen sind in PL/SQL implementiert. Bei dieser Sprache werden Funktionen in externen freigegebenen Bibliotheksdateien aufgerufen, die in der Programmiersprache C geschrieben wurden. Die Funktionen werden von PL/SQL mittels eines Aliasnamens abgerufen, der den Namen der Bibliothek (bei "ST_Geometry" in Oracle ist dies "st_shapelib") mit dem Namen der Bibliotheksdatei verknüpft. (Weitere Informationen zum Oracle-Befehl CREATE LIBRARY finden Sie in der Dokumentation.) Wenn eine Spatial Type-Funktion, die "st_shapelib" erfordert, zum ersten Mal aufgerufen wird, fordert die Datenbank den Listener auf, einen "extproc"-Vorgang für die SQL-Sitzung zu erstellen. Extproc erhält den Speicherort von "st_shapelib", den Namen der aufgerufenen Funktion und die entsprechenden Parameter. Extproc lädt "st_shapelib" und ruft die Funktion auf. Wenn die externe Funktion abgeschlossen ist, gibt extproc die Ergebnisse zurück, bleibt weiterhin aktiv und wartet auf weitere Funktionsaufrufe während dieser Sitzung. Der extproc-Vorgang wird beendet, wenn die SQL-Sitzung getrennt wird.
Dies erfordert die folgende Konfiguration:
- Die Datenbank benötigt den Speicherort der Datei, die "st_shapelib" enthält, damit sie diese Informationen an den Listener-Vorgang und an extproc weiterleiten kann.
- Wenn die Angabe unter "file_spec" für "st_shapelib" in der Tabelle "user_libraries" nicht mit dem physischen Dateispeicherort von "st_shapelib" auf dem Server übereinstimmt, funktionieren "ST_Geometry"-Operatoren und -Funktionen nicht. Aus diesem Grund müssen Sie die Bibliotheksdefinition in den Oracle-Benutzerbibliotheken aktualisieren, damit diese den richtigen Bibliothekspfad zur Datei mit "st_shapelib" enthält, indem Sie den Befehl CREATE LIBRARY verwenden.
- Die Datenbank muss den Service kennen, der die Anfragen an extproc bearbeitet. Dies wird in der Datei "tnsnames.ora" konfiguriert.
- Extproc muss die Datei, die "st_shapelib" enthält, laden können. Dies wird dadurch garantiert, dass die Umgebungsvariable EXTPROC_DLLS in der Datei "extproc.ora" definiert wird.
- Extproc (wird normalerweise mit dem Benutzer, der ORACLE_HOME besitzt, ausgeführt) benötigt Leseberechtigungen (READ) für den Speicherort der Bibliotheksdaten sowie Ausführungsberechtigungen (EXECUTE) für die Dateien selbst.
PostgreSQL
Die Bibliothek "st_geometry" muss im Installationsverzeichnis von PostgreSQL gespeichert werden, damit PostgreSQL auf die "ST_Geometry"-Funktionen zugreifen kann. Kopieren Sie die Datei "st_geometry.dll" (Windows) in den Bibliotheksordner des PostgreSQL-Installationsverzeichnisses. Bei Linux-Servern müssen Sie die Datei "st_geometry.so" (Linux) in das Verzeichnis /usr/lib/pgsql auf dem PostgreSQL-Server kopieren. Beide Dateien befinden sich im Ordner "DatabaseSupport" der ArcMap- oder ArcGIS Server-Installationen oder können aus My Esri heruntergeladen werden.
SQLite
Sie müssen den Speicherort der ST_Geometry-Bibliothek festlegen und sie laden, damit der SQLite-Client auf die SQL-Funktionen zugreifen kann. Sie können den Speicherort der Bibliothek in der Systemumgebungsvariablen "PATH" (Windows) oder "LIBPATH" (Linux) des Clients festlegen und dann die Bibliothek laden, oder Sie können den Pfad angeben, wenn Sie die Bibliothek "ST_Geometry" laden. Weitere Anweisungen finden Sie unter Laden der SQLite-Bibliothek "ST_Geometry".
Wie wird "ST_Geometry" implementiert?
"ST_Geometry" wird als benutzerdefinierter Typ zur Verwendung in Datenbanken und Geodatabases in IBM DB2, IBM Informix, Oracle und PostgreSQL implementiert. ST_Geometry kann auch in SQLite-Datenbanken verwendet werden.
Jedes DBMS unterstützt "ST_Geometry" wie folgt:
"ST_Geometry" nach DBMS
DBMS | Beschreibung |
---|---|
Oracle | Der Datentyp "ST_Geometry" wird implementiert, wenn Sie eine Geodatabase in Oracle erstellen. Dies ist der Standard-Geometriespeichertyp für Geodatabases in Oracle. Wenn Sie keine Geodatabase-Funktionen verwenden müssen, können Sie den Typ "ST_Geometry" mithilfe des Geoverarbeitungswerkzeugs Räumlichen Typ erstellen in einer Oracle-Datenbank installieren. |
IBM DB2 | Der DB2 Spatial Extender, der in IBM standardmäßig im DB2-Produkt bereitgestellt wird, bietet Unterstützung für "ST_Geometry". "ST_Geometry" ist die einzige Option, die zum Speichern von Feature-Geometrie in Geodatabases in DB2 verwendet wird. Sie wurde von Esri und IBM gemeinsam entwickelt. Beachten Sie, dass es einige Unterschiede in der SQL-Syntax zwischen DB2 for z/OS und DB2 for Windows/Linux/Unix gibt. Weitere Informationen zur richtigen Syntax für die verwendete DBMS-Version finden Sie in der DB2-Dokumentation. |
IBM Informix | Die Informix Spatial DataBlade, die von IBM im Informix-Produkt bereitgestellt wird, installiert den Typ "ST_Geometry" in der Datenbank und Geodatabase. "ST_Geometry" ist die einzige Option, die zum Speichern von Feature-Geometrie in Geodatabases in Informix verwendet wird. Dieser leistungsstarke Speichertyp, der von Esri und IBM gemeinsam entwickelt wurde, ermöglicht einen ISO- und OGC-kompatiblen SQL-Zugriff auf räumliche Daten. |
PostgreSQL | Der Datentyp "ST_Geometry" wird implementiert, wenn Sie eine Geodatabase in PostgreSQL erstellen. Dies ist der Standardtyp für das Speichern von Feature-Geometrie in Geodatabases in PostgreSQL. Wenn Sie keine Geodatabase-Funktionen verwenden müssen, können Sie den Typ "ST_Geometry" mithilfe des Geoverarbeitungswerkzeugs Räumlichen Typ erstellen in einer PostgreSQL-Datenbank installieren. |
SQLite | Der Datentyp "ST_Geometry" in SQLite wird mit einer st_geometry-Bibliothek und einer geometryblob-Spalte implementiert. Die SQL-Funktionen "ST_Geometry" werden in der st_geometry-Bibliothek statt in der Datenbank gespeichert. Sie können das Geoverarbeitungswerkzeug SQLite-Datenbank erstellen oder die ArcPy-Funktion CreateSQLiteDatabase verwenden, um eine SQLite-Datenbank zu erstellen, die den Typ "ST_Geometry" enthält. Sie können auch die SQL-Funktion "CreateOGCTables" verwenden, um den Datentyp "ST_Geometry" in einer vorhandenen SQLite-Datenbank zu erstellen. |