ST_Geometry in Oracle

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.

Hinweis:

Der Typ "ST_Geometry" wird nicht für Oracle XA-Transaktionen unterstützt.

Um eine Geodatabase zu erstellen und den Typ "ST_Geometry" sowie den Domänenindex im Oracle-Datenbankmanagementsystem 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 Typ "ST_Geometry" 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 OGC 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:

NameTyp

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_Length" 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 Typ "ST_Geometry" für Oracle und Metadatentabellen sind im Besitz des SDE-Schemas. 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 der SDE-Benutzer der Besitzer der Definitionen für "ST_Geometry" ist, löschen Sie niemals den SDE-Benutzer aus der Datenbank, wenn diese Tabellen mit ST_Geometry-Spalten enthält. Das würde dazu führen, dass auf diese Tabellen nicht zugegriffen werden kann.

Wie im Oracle Application Developer's Guide erwähnt, ist eine der Löschanweisungen, die ausgeführt werden, wenn ein Benutzer aus der Datenbank gelöscht wird, "DROP TYPE" mit der Option "FORCE". 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.

Detailinformationen:

Außerdem werden die folgenden Datenbankobjekte erstellt, um ST_Geometry-Metadaten zu verwalten:

  • ein SDE-Datenbankbenutzer
  • ein Standard-Tablespace für den SDE-Benutzer
  • ST_Geometry-Funktionen
  • ST_Geometry-Ansichten
    • ALL_ST_GEOMETRY_COLUMNS_V
    • USER_ST_GEOMETRY_COLUMNS_V
    • USER_ST_GEOM_INDEX_V
  • ST_Geometry-Trigger
    • DB_EV_DROP_ST_METADATA
    • DB_EV_ALTER_ST_METADATA
    • DB_EV_RENAME_ST_METADATA
    • TG_ST_SPATIAL_REF_SRID
    • TG_ST_CREF_SYS
    • TG_GCOL_NAME
    • TG_ST_GEOMINDEX_NAME
  • ein SPX_UTIL-Paket- und -Paketkörper
  • ein SDEXMLTOTEXT-Operator
  • ST_Geometry-Typen
    • BLOB_ARRAY_TAB
    • INT_ARRAY_TAB
    • FLT_ARRAY_TAB
    • BND_ROWID_TAB
    • 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.

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 verschiedene Geometriespeichertypen, und verschiedene Typen können zusammen in der gleichen Datenbank verwendet werden. Obwohl es nur einen Standard-Geometriespeichertyp geben kann, können einzelne Tabellen mit verschiedenen Geometriespeichertypen 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:

DatenbankobjekteSpeicherparameter

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.