Speichertyp "ST_Geometry" in Oracle
ArcSDE for Oracle bietet einen Geometriespeichertyp, der International Organization for Standards (ISO)- und Open Geospatial Consortium, Inc. (OGC)-kompatiblen SQL-Zugriff (Structured Query Language) auf die Geodatabase bereitstellt. Dieser Speichertyp erweitert die Funktionen der Oracle-Datenbank, indem er die Speicherung von Objekten (Punkte, Linien und Polygone) ermöglicht, die geographische Features darstellen. Er ist konzipiert, um die effiziente Verwendung von Oracle-Datenbankressourcen zu ermöglichen, um mit Oracle-Datenbank-Features wie z. B. Replikation und Partitionierung kompatibel zu sein und um schnellen Zugriff auf räumliche Daten zu bieten. 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.
Ab ArcGIS 9.3 und neueren Versionen verwenden neue ArcSDE-Geodatabases für Oracle standardmäßig den räumlichen Datentyp "ST_Geometry" für die Geometriespeicherung. Er 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. Eine Erklärung des räumlichen Datentyps "ST_Geometry" finden Sie im Abschnitt "Wie ST_Geometry räumlichen Daten speichert" dieses Themas.
Um ArcSDE zu installieren und den ST_Geometry-Typ und den Domänenindex im Oracle-DBMS zu verwenden, müssen dem ArcSDE-Administratorbenutzer 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 Benutzerberechtigungen für Geodatabases in Oracle.
Wenn Sie den räumlichen Datentyp "ST_Geometry" in einer ArcSDE-Geodatabase für Oracle 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.
Der Typ "ST_Geometry" wird nicht für Oracle XA-Transaktionen unterstützt.
Um mit SQL auf eine Geodatabase in Oracle zuzugreifen, die den räumlichen Datentyp verwendet, müssen Sie den Oracle-Listener konfigurieren. Weitere Informationen finden Sie unter Konfigurieren des Oracle-Listeners für die Verwendung von SQL.
Für ArcGIS 9.3 und neuere Versionen erfordern neue ArcSDE-Geodatabases für Oracle, dass alle ST-Funktionen und -Operatoren mit dem sde-Schemanamen qualifiziert werden. Beispiel: Beim Ausführen einer Abfrage, die den ST_Union-Operator verwendet, muss der Operator als "sde.ST_Union" eingegeben werden. Für Geodatabases, die von ArcSDE 9.2 oder früher aktualisiert wurden, ist nicht dies erforderlich.
Um mit SQL auf räumliche Features zuzugreifen, müssen die ST_Geometry-Bibliotheken auf dem gleichen Server wie das Oracle-Datenbankmanagementsystem (DBMS) installiert sein. Wenn Sie planen, das Oracle-DBMS auf einem anderen Server als dem von ArcSDE auszuführen, stellen Sie sicher, dass das Betriebssystem des Oracle-Servers auch für ArcSDE unterstützt wird und dass die ST_Geometry-Bibliotheken dort installiert sind.
Wie ST_Geometry räumliche Daten speichert
Nachfolgend finden Sie die Oracle-Beschreibung von ST_Geometry:
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. Beispiele:
CREATE TABLE hazardous_sites (name varchar2(128), location st_geometry);
Die folgenden "ST_Geometry accessor"-Funktionen 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", "ST_MinZ" geben die minimale gewünschte Koordinate einer Geometrie zurück.
- "ST_MaxM", "ST_MaxX", "ST_MaxY", "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, 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 (ST_Point (10, 20, 1) );
Diese Methode ermöglicht es einem Benutzer, 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 (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 (ST_Point (10, 20, 5, 401, 1) );
SP_GRID_INFO
"SP_Grid_Info" wird in der Tabelle "ST_Geometry_Index" als Datentyp für das Feld GRID verwendet. Es enthält die Gitterebeneninformationen für räumliche Indizes.
SQL> desc sp_grid_info Name Null? Type GRID1 NUMBER GRID2 NUMBER GRID3 NUMBER
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 Developers 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"
Der für eine Feature-Class verwendete Geometriespeichertyp wird von der Einstellung GEOMETRY_STORAGE im Konfigurationsschlüsselwort bestimmt, das Sie angeben, wenn Sie die Feature-Class erstellen.
Einstellen von "ST_Geometry" als Standardspeichertyp für neue Feature-Classes
Ab ArcGIS 9.3 ist "ST_Geometry" der Standardspeichertyp für Feature-Classes in einer Geodatabase in Oracle. Das bedeutet, der Parameter GEOMETRY_STORAGE des Schlüsselworts DEFAULTS in der DBTUNE-Tabelle wird auf ST_GEOMETRY festgelegt.
Wenn Sie die meisten Feature-Class-Daten im ST_Geometry-Format speichern möchten, lassen Sie den Parameter GEOMETRY_STORAGE des Schlüsselworts DEFAULTS auf ST_GEOMETRY eingestellt.
Wenn Sie die Geodatabase anfänglich vor ArcGIS 9.3 erstellt haben und 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 der DBTUNE-Tabelle ändern. Legen Sie den Parameter GEOMETRY_STORAGE auf ST_GEOMETRY fest.
Verwenden Sie den administrativen sdedbtune-Befehl, um DBTUNE-Einstellungen zu ändern. Weitere Informationen zur Verwendung des Befehls "sdedbtune" finden Sie unter Ändern des Inhalts der Tabelle DBTUNE, nachdem sie erstellt wurde und in der ArcSDE Administration Command Reference, die mit der ArcSDE-Komponente von ArcGIS Server Enterprise bereitgestellt wird.
Verwenden des Formats "ST_Geometry" für einige der Feature-Classes
ArcSDE for Oracle unterstützt eine Reihe von anderen Geometriespeicherschemas – diese anderen Schemas können alle zusammen in der gleichen Datenbank verwendet werden. Während es nur ein Standard-Geometrieschema geben kann, können einzelne Tabellen mit verschiedenen Geometrieschemas erstellt werden.
Wenn Sie nur einige der Feature-Classes mit dem räumliche Datentyp-Speicher speichern möchten, können Sie DEFAULTS GEOMETRY_STORAGE auf einen anderen Speichertyp festlegen und dann das Schlüsselwort ST_GEOMETRY angeben, wenn Sie einige der Feature-Classes erstellen. Wenn Sie dies tun, wird die jeweilige Feature-Class mit einer "ST_Geometry"-Spalte erstellt. In der Datei "dbtune" wird das Schlüsselwort ST_GEOMETRY wie folgt angezeigt:
##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
Welche Datenbankobjekte werden erstellt und wo werden sie gespeichert?
Es werden drei Datenbankobjekte erstellt, wenn Sie mithilfe von ArcGIS eine Feature-Class erstellen, die das Format "ST_Geometry" verwendet. Diese Objekte und die DBTUNE-Parameter, 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. |
Weitere Informationen zu Konfigurationsparametern finden Sie in DBTUNE-Konfigurationsparameter für Oracle und im folgenden Abschnitt zur LOB-Speicherung.
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-Indextabellenbereichsnamen 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.
Für weitere Beispiele und weitere Informationen zum Erstellen und Verwalten von Oracle LOB-Segmenten suchen Sie im ArcGIS Resource Center nach "LOB-Segment", und filtern Sie nach "Dokumentation > Knowledge Base". So finden Sie technische Artikel zu diesem Thema.