Der räumliche Datentyp "ST_Geometry" von Esri kann in Oracle-Datenbanken mit und ohne Geodatabase verwendet werden. Er ermöglicht es Ihnen, räumliche Daten in andere Typen der Geschäftsdaten zu integrieren, dadurch erhält die Mehrbenutzer-Datenbank den Vorteil, eine geographische Komponente zu den Analysen und Datenprodukten hinzufügen zu können. Die räumlichen Daten zusammen mit anderen Geschäftsobjekten zu speichern vereinfacht auch den Mehrbenutzerzugriff, die Verwaltung und die Sicherheit der Daten, da Sie weniger Datenspeicherressourcen verwalten müssen.
Der räumliche Datentyp "ST_Geometry" von Esri ist der Standard-Geometriespeichertyp für Geodatabases in Oracle. Mit dem Geoverarbeitungswerkzeug Räumlichen Typ erstellen können Sie auch den Datentyp "ST_Geometry" in Oracle-Datenbanken installieren.
Um eine Geodatabase zu erstellen und den ST_Geometry-Typ und den Domänenindex im Oracle-DBMS zu verwenden, müssen dem Geodatabase-Administratorbenutzer (SDE) die entsprechenden Systemberechtigungen gewährt werden, um Typen, Operatoren und gespeicherte Prozeduren instanziieren zu können. Weitere Informationen zu den erforderlichen Berechtigungen finden Sie unter Berechtigungen für Geodatabases in Oracle. Um den ST_Geometry-Typ in einer Oracle-Datenbank zu installieren, muss auch ein SDE-Benutzer vorhanden sein. Außerdem müssen die spezifischen Systemberechtigungen gewährt werden, um Typen, Operatoren und gespeicherte Prozeduren instanziieren zu können. Weitere Informationen finden Sie unter Hinzufügen des Typs "ST_Geometry" zu einer Oracle-Datenbank.
Wenn Sie den räumlichen Datentyp "ST_Geometry" von Esri in einer Geodatabase in Oracle oder einer Oracle-Datenbank verwenden, können Sie auf die räumlichen Daten über SQL-Funktionen, die den räumlichen ISO SQL/MM-Standard implementieren, und über die Simple Feature Specification des OGCs zugreifen. Sie können SQL-Befehle zum Speichern, Abrufen und Bearbeiten von räumlichen Features wie bei jedem anderen Datentyp verwenden. Sie können eine lange Liste standardbasierter Funktionen mit SQL-Befehlen und gespeicherten Prozeduren verwenden, um räumliche Daten abzurufen und zu analysieren. Der SQL-Zugriff auf die Daten macht es möglich, mit anderen Anwendungen auf Daten zuzugreifen, die in einer ArcSDE-Geodatabase für Oracle erstellt wurden.
Die ST_Geometry-Bibliotheken müssen auf dem gleichen Server wie die Oracle-Instanz installiert sein, um mit SQL auf räumliche Features zugreifen zu können. Stellen Sie sicher, dass das Betriebssystem des Oracle-Servers für die ST_Geometry-Bibliotheken unterstützt wird.
Sie müssen außerdem Oracle extproc konfigurieren, um mit SQL auf Tabellen mit dem räumlichen Typ "ST_Geometry" zugreifen zu können.
Wie ST_Geometry räumliche Daten speichert
Nachfolgend finden Sie eine Beschreibung von "ST_Geometry" in Oracle:
Name | Typ |
---|---|
ENTITY | NUMBER(38) |
NUMPTS | NUMBER(38) |
MINX | FLOAT(64) |
MINY | FLOAT(64) |
MAXX | FLOAT(64) |
MAXY | FLOAT(64) |
MINZ | FLOAT(64) |
MAXZ | FLOAT(64) |
MINM | FLOAT(64) |
MAXM | FLOAT(64) |
AREA | FLOAT(64) |
LEN | FLOAT(64) |
SRID | NUMBER(38) |
POINTS | BLOB |
Die Attribute des räumlichen Datentyps stellen die folgenden Informationen dar:
- Entity: Der Typ des geometrischen Features, der in der räumlichen Spalte (Linestring, Multilinestring, Multipoint, Multipolygon, Punkt oder Polygon) gespeichert ist, dessen Wert eine Bitmaske ist, die von der gespeicherten Prozedur "st_geom_util" abgeleitet wurde.
- Numpts: Die Anzahl der Punkte, die die Geometrie definieren; für Multipart-Geometrien schließt dies die Trennzeichen zwischen jedem Teil ein, ein Punkt für jedes Trennzeichen.
- Minx, miny, maxx, maxy: Der räumliche Envelope der Geometrie.
- Area: Die Fläche der Geometrie.
- Len: Die Länge des Umfangs der Geometrie.
- SRID: Enthält die Kennung für die Geometrie, die sie mit ihrem zugeordneten Raumbezugsdatensatz (Koordinatensystem) in der Tabelle "ST_Spatial_References" verknüpft
- Points: Enthält den Byte-Stream der Punktkoordinaten, die die Geometrie definieren.
Wie andere Objekttypen enthält auch der ST_Geometry-Datentyp eine Konstruktormethode und Funktionen. Eine Konstruktormethode ist eine Funktion, die eine neue Instanz (Objekt) des Datentyps zurückgibt und die Werte seiner Attribute festlegt.
Der Name des Konstruktors ist der gleiche wie der Typ (ST_Geometry). Wenn Sie ein Objekt vom Typ "ST_Geometry" instanziieren, rufen Sie die Konstruktormethode auf. Beispiel:
CREATE TABLE hazardous_sites (name varchar2(128),
location st_geometry);
Die folgenden ST_Geometry-Accessorfunktionen nehmen eine einzelne ST_Geometry als Eingabe und geben den angeforderten Eigenschaftswert als Zahl zurück.
- Die Elementfunktion "ST_Area" gibt die Fläche einer Geometrie zurück.
- "ST_Len" gibt die Länge einer Geometrie zurück.
- "ST_Entity" gibt eine Zahl zurück, die eine Bitmaske enthält, die den Entitätstyp beschreibt.
- "ST_NumPoints" gibt die Anzahl von Punkten (Stützpunkten) zurück, die eine Geometrie definieren.
- "ST_MinM", "ST_MinX", "ST_MinY" und "ST_MinZ" geben die minimale gewünschte Koordinate einer Geometrie zurück.
- "ST_MaxM", "ST_MaxX", "ST_MaxY" und "ST_MaxZ" geben die maximale gewünschte Koordinate einer Geometrie zurück.
- ST_SRID gibt die Raumbezugskennung für eine Geometrie zurück.
- "Get_release" ist eine statische Elementfunktion, die intern für die räumliche Datentypverwaltung (d. h. Upgrades und Patches) verwendet wird.
Die folgende Abfrage gibt z. B. den Namen und die Fläche der einzelnen Staaten in den USA zurück.
SELECT name, sde.st_area(geometry)
FROM us_states
ORDER BY name;
"ST_LineString", "ST_MultiLineString", "ST_MultiPoint", "ST_MultiPolygon", "ST_Point" und "ST_Polygon" sind alle Subtypes (oder Subclasses) von "ST_Geometry". "ST_Geometry" und die zugehörigen Subtypes haben gemeinsame Attribute und Funktionen. Die Konstruktordefinition für "ST_LineString", "ST_MultiLineString", "ST_MultiPoint", "ST_MultiPolygon", "ST_Point" und "ST_Polygon" ist die gleiche. Der Name des Konstruktors ist der gleiche wie der konstruierte Typ.
Da "ST_Point" ein endliches Objekt (ein einzelner Punktwert) ist, kann es auch mit einer der folgenden Methoden erstellt werden.
Diese Methode verwendet Koordinatenpunkte und eine SRID.
METHOD
FINAL CONSTRUCTOR FUNCTION ST_POINT RETURNS SELF AS RESULT
Argument Name Type In/Out Default?
PT_X NUMBER IN
PT_Y NUMBER IN
SRID NUMBER IN
SQL> INSERT INTO sample_pt VALUES (sde.ST_Point (10, 20, 1) );
Diese Methode ermöglicht es Ihnen, Koordinatenpunkte und einen Höhenwert für jeden Punkt anzugeben.
METHOD
FINAL CONSTRUCTOR FUNCTION ST_POINT RETURNS SELF AS RESULT
Argument Name Type In/Out Default?
PT_X NUMBER IN
PT_Y NUMBER IN
PT_Z NUMBER IN
SRID NUMBER IN
SQL> INSERT INTO sample_pt VALUES (sde.ST_Point (10, 20, 5, 1) );
Diese letzte Methode für "ST_Point" lässt darüber hinaus einen Messwert zu, der als Teil des erstellten Punktobjekts angegeben wird.
METHOD
FINAL CONSTRUCTOR FUNCTION ST_POINT RETURNS SELF AS RESULT
Argument Name Type In/Out Default?
PT_X NUMBER IN
PT_Y NUMBER IN
PT_Z NUMBER IN
MEASURE NUMBER IN
SRID NUMBER IN
SQL> INSERT INTO sample_pt VALUES (sde.ST_Point (10, 20, 5, 401, 1) );
Metadaten-Schema
Der ST_Geometry-Typ für Oracle und Metadatentabellen gehören dem SDE-Schema. Die Schemadefinition ist die Basistabellenbeschreibung für Metadatentabellen, die verwendet wird, um den Typ "Spalte/Tabelle", den räumlichen Index (der Domänenindex "ST_Spatial_Index") und die Raumbezugsinformationen zu definieren und zu beschreiben. Alle Typen und Domänenindex-Typdefinitionen, Pakete und Metadatentabellen werden im SDE-Schema erstellt.
Da die Definitionen für "ST_Geometry" dem SDE-Benutzer gehören, löschen Sie niemals den SDE-Benutzer aus der Datenbank, wenn Sie Tabellen in der Datenbank haben, die ST_Geometry-Spalten enthalten. Das würde dazu führen, dass auf diese Tabellen nicht zugegriffen werden kann.
Im Application Developer's Guide von Oracle wird erwähnt, dass, wenn ein Benutzer aus der Datenbank gelöscht wird, eine der Löschanweisungen, die ausgeführt wurde, "DROP TYPE" mit der Option "FORCE" ist. Diese Anweisung entfernt alle Typen, die diesem Benutzer gehören, damit der Benutzer aus der Datenbank entfernt werden kann. DROP TYPE FORCE löscht Typen auch dann, wenn sie abhängige Typen oder mit ihnen verknüpfte Tabellen aufweisen. Wenn das geschieht, werden die zugehörigen Tabellen als ungültig markiert und auf die Daten in den Tabellen kann nicht mehr zugegriffen werden.
Eine Beschreibung der folgenden ST_Geometry-Metadatentabellen finden Sie unter Systemtabellen einer Geodatabase in Oracle:
- ST_COORDINATE_SYSTEMS
- ST_GEOMETRY_COLUMNS
- ST_GEOMETRY_INDEX
- ST_SPATIAL_REFERENCES
Erstellen von Feature-Classes in Oracle mit dem Speichertyp "ST_Geometry"
In Datenbanken, in denen der räumliche Datentyp "ST_Geometry" installiert ist, geben Sie die "ST_Geometry" als Speichertyp an, wenn Sie eine Feature-Class erstellen.
In Geodatabases wird der für eine Feature-Class verwendete Geometriespeichertyp von der Einstellung "GEOMETRY_STORAGE" im Konfigurationsschlüsselwort bestimmt, das Sie beim Erstellen der Feature-Class angeben.
Einstellen von "ST_Geometry" als Standardspeichertyp für neue Geodatabase-Feature-Classes
"ST_Geometry" ist der Standardspeichertyp für Feature-Classes in einer neuen Geodatabase in Oracle. Das bedeutet, für den Parameter GEOMETRY_STORAGE des Konfigurationsschlüsselworts DEFAULTS wird ST_GEOMETRY festgelegt.
Wenn Sie die Geodatabase vor ArcGIS 9.3 erstellt und sie danach aktualisiert haben und Sie alle neuen Feature-Classes standardmäßig mit dem Format "ST_Geometry" erstellen möchten, müssen Sie den Parameter GEOMETRY_STORAGE unter dem Schlüsselwort DEFAULTS in ST_GEOMETRY ändern. Anweisungen dazu finden Sie unter Ändern von Konfigurationsschlüsselwörtern.
Verwenden des Formats "ST_Geometry" für einige der Geodatabase-Feature-Classes
Geodatabases in Oracle unterstützen eine Reihe von anderen Geometriespeichertypen. Diese anderen Typen können alle zusammen in der gleichen Datenbank verwendet werden. Obwohl es nur einen Standard-Geometriespeichertyp geben kann, können einzelne Tabellen mit verschiedenen Datentypen erstellt werden.
Wenn nur einige der Feature-Classes den räumlichen Datentyp-Speicher "ST_Geometry" verwenden sollen, können Sie "DEFAULTS GEOMETRY_STORAGE" auf einen anderen Speichertyp festlegen und ein eigenes Schlüsselwort für den ST_GEOMETRY-Speicher erstellen. Sie können z. B. ein Konfigurationsschlüsselwort ähnlich dem folgenden zu Ihrer Geodatabase hinzufügen:
##ST_GEOMETRY GEOMETRY_STORAGE "ST_GEOMETRY" ATTRIBUTE_BINARY "BLOB" RASTER_STORAGE "BLOB" ST_GEOM_LOB_STORAGE " STORE AS ( # TABLESPACE <tablespace_name> ENABLE STORAGE IN ROW CHUNK 8K RETENTION CACHE)" UI_TEXT "User Interface text description for ST_GEOMETRY" COMMENT "Any general comment for ST_GEOMETRY keyword" END
Nachdem das Schlüsselwort hinzugefügt wurde, können Sie es beim Erstellen von Feature-Classes, für die Sie den Datentypspeicher "ST_Geometry" nutzen möchten, verwenden. Wenn Sie beispielsweise über eine kleine Teilmenge von Daten verfügen, auf die mit SQL zugegriffen werden muss, haben Sie die Möglichkeit, lediglich diese Teilmenge der Feature-Classes zu erstellen, um den räumlichen Datentyp "ST_Geometry" für die Geometriespeicherung zu verwenden.
Welche Datenobjekte werden für Feature-Classes erstellt?
Es werden drei Datenbankobjekte erstellt, wenn Sie mithilfe von ArcGIS eine Feature-Class erstellen, die das Format "ST_Geometry" verwendet. Diese Objekte und die Konfigurationsparameter, die verwendet werden, um die Speicherung zu steuern, sind in der folgenden Tabelle aufgeführt:
Datenbankobjekte | Speicherparameter |
---|---|
Tabelle mit einer "ST_Geometry"-Spalte | Der Parameter B_STORAGE definiert die Speichermethode für die Tabelle. Der Parameter ST_GEOM_LOB_STORAGE definiert die Speichermethode für LOB-Segmente in der Tabelle. |
Räumlicher Index | Der Parameter S_STORAGE definiert den räumlichen Indexspeicher. |
Index für die ObjectID-Spalte | Der Parameter B_INDEX_ROWID definiert die Speichermethode für diesen Index. |
Einstellen des Speichers für das LOB-Segment
Sie sollten den Parameter ST_GEOM_LOB_STORAGE unter der Schlüsselwortliste DEFAULTS ändern. Beim Hinzufügen zum Schlüsselwort DEFAULTS sollte jedoch der LOB-Segmentname nicht in der Definition dieses Parameters enthalten sein. Wenn er enthalten ist und Sie den Wert für den Namen vor dem Erstellen eines zweiten Features nicht ändern, schlägt es fehl, da jeder LOB-Segmentname für ein gegebenes Schema eindeutig sein muss. Das folgende Beispiel für einen ST_GEOM_LOB_STORAGE-Parameter enthält keine Objektnamen, dadurch werden Namenskonflikte innerhalb des gleichen Schemas vermieden:
ST_GEOM_LOB_STORAGE " STORE AS ( ENABLE STORAGE IN ROW CHUNK 8K RETENTION CACHE)"
Beispiele für gültige Werte für den Parameter ST_GEOM_LOB_STORAGE:
##ST_GEOMETRY GEOMETRY_STORAGE "ST_GEOMETRY" ATTRIBUTE_BINARY "BLOB" RASTER_STORAGE "BLOB" ST_GEOM_LOB_STORAGE " STORE AS (TABLESPACE TERRA_NDX ENABLE STORAGE IN ROW CHUNK 8K RETENTION CACHE)" UI_TEXT "User Interface text description for ST_GEOMETRY" COMMENT "Any general comment for ST_GEOMETRY keyword" END
##ST_GEOMETRY GEOMETRY_STORAGE "ST_GEOMETRY" ATTRIBUTE_BINARY "BLOB" RASTER_STORAGE "BLOB" ST_GEOM_LOB_STORAGE " STORE AS (ENABLE STORAGE IN ROW CHUNK 8K RETENTION CACHE)" UI_TEXT "User Interface text description for ST_GEOMETRY" COMMENT "Any general comment for ST_GEOMETRY keyword" END
Wie zuvor in diesem Abschnitt erwähnt: Wenn Sie LOB- und LOB-Index-Tablespace-Namen definieren, müssen Sie diese Werte vor jeder Feature-Class-Erstellung ändern. Wenn Sie dies nicht tun, schlagen nachfolgende Feature-Class-Erstellungen fehl, da jeder Segmentname eindeutig sein muss.