So verwenden Geodatabases Oracle-Spatial
ArcGIS unterstützt Oracle Spatial oder Oracle Locator zum Speichern und Verwalten von Geometrie in einer Geodatabase in Oracle. Um es in einer Geodatabase zu verwenden, müssen Sie SDO_GEOMETRY für den Parameter GEOMETRY_STORAGE von einem der Konfigurationsschlüsselwörter angeben. Wenn Sie die meiste Zeit Oracle Spatial-Geometriespeicherung verwenden möchten, geben Sie SDO_GEOMETRY für den Parameter GEOMETRY_STORAGE im Konfigurationsschlüsselwort DEFAULTS an. Wenn Sie es für nur einige Datasets verwenden möchten, verwenden Sie das Schlüsselwort SDO_GEOMETRY, wenn Sie jedes einzelne Dataset erstellen.
Verwenden von Oracle Spatial in einer Geodatabase
Wenn Sie eine Geodatabase erstmals in Oracle erstellen, ist ST_Geometry der Standard-Geometriespeichertyp. Die Standardeinstellungen für die Speicherung werden in der DBTUNE-Tabelle durch die GEOMETRY_STORAGE-Parameter definiert.
Wenn Sie nur einige der Feature-Classes mit SDO_GEOMETRY-Speicher speichern möchten, können Sie beim Erstellen der Feature-Class das Schlüsselwort SDO_GEOMETRY angeben. Wenn Sie dies tun, wird die jeweilige Feature-Class mit einer SDO_GEOMETRY-Spalte erstellt. In der dbtune-Datei wird das Schlüsselwort SDO_GEOMETRY wie folgt angezeigt:
##SDO_GEOMETRY GEOMETRY_STORAGE "SDO_GEOMETRY" ATTRIBUTE_BINARY "BLOB" RASTER_STORAGE "SDO_GEORASTER" SDO_COMMIT_INTERVAL 1000 UI_TEXT "User Interface text description for SDO_GEOMETRY" COMMENT "Any general comment for SDO_GEOMETRY keyword" END
Wenn Sie planen, den Speichertyp SDO_GEOMETRY für die meisten der Feature-Classes zu verwenden, können Sie GEOMETRY_STORAGE unter dem Schlüsselwort DEFAULTS in der Tabelle DBTUNE in SDO_GEOMETRY ändern.
Um einen Standard-Geometriespeicher zu ändern, verwenden Sie den Verwaltungsbefehl "sdedbtune" und die Änderungsoperation, um den Parameter GEOMETRY_STORAGE unter dem Schlüsselwort DBTUNE DEFAULTS in SDO_GEOMETRY zu ändern. Nachdem die Standardeinstellung für GEOMETRY_STORAGE in SDO_GEOMETRY geändert wurde, werden Feature-Classes standardmäßig mit SDO_GEOMETRY-Spalten erstellt. Beispiel:
sdedbtune -o alter -k DEFAULTS -P GEOMETRY_STORAGE
-v "SDO_GEOMETRY" -u sde
Weitere Informationen zur Verwendung des Befehls "sdedbtune" finden Sie in der ArcSDE Administration Command Reference, die zusammen mit dem ArcSDE-Anwendungsserver installiert wird.
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-Geometrietyp geben kann, können einzelne Tabellen mit verschiedenen Geometrietypen erstellt werden.
Voraussetzungen zum Verwenden von vorhandenen Oracle Spatial-Tabellen mit einer Geodatabase
ArcGIS kann Tabellen, die SDO_GEOMETRY-Spalten enthalten, die extern von anderen Anwendungen erstellt wurden oder SQL verwenden (manchmal als Tabellen von Drittanbietern bezeichnet), erfolgreich verwenden, solange die Tabellen bestimmte Voraussetzungen erfüllen:
- Der Benutzer, von dem die Tabellen registriert werden, muss der Besitzer sein.
- Sie müssen eine einzelne SDO_GEOMETRY-Spalte enthalten.
- Sie dürfen keine weiteren benutzerdefinierten Spalten aufweisen.
- Sie müssen einen gültigen Eintrag in der Sicht USER_SDO_GEOM_METADATA haben.
- Sie dürfen nur einen Geometrietyp aufweisen (Punkte, Linien oder Polygone). Multipart-Geometrien können verwendet werden.
- Sie müssen eine eindeutige Spalte vom Typ "Ganzzahl" ohne Nullwerte (NOT NULL) als registrierte Zeilen-ID-Spalte aufweisen.
- Sie sollten einen räumlichen Index haben.
- Sie sollten die Geometrieüberprüfungstests von Oracle bestehen; andernfalls entstehen beim Zugreifen auf diese Geometrien möglicherweise unerwartete Ergebnisse.
- Alle räumlichen Datensätze müssen über gültige Nicht-NULL-Zahlenwerte im SDO_ORDINATES-Array verfügen.
Interoperabilitätsüberlegungen
Eine allgemeine falsche Auffassung ist, dass Anwendungen einfach zusammenwirken können, da sie den gleichen zugrunde liegenden Geometrietyp unterstützen. Der Geometrietyp ist jedoch nur ein Aspekt der Geodatabase sowie anderer GIS-Datenbankschemas. Das allgemeine Verständnis von Regeln, Einschränkungen, Schema und Implementierung ist ebenfalls erforderlich. Einige Dinge, die Sie beachten sollten, wenn Sie Oracle Spatial mit einer Geodatabase oder ArcGIS verwenden, sind Folgende:
ArcGIS unterstützt nicht mehrere Geometrie-Spalten in einer Tabelle.
Auf Tabellen mit mehreren SDO_GEOMETRY-Spalten sollte über Sichten zugegriffen werden, die nur eine SDO_GEOMETRY-Spalte enthalten.
Um Daten in einer Oracle Spatial-Tabelle zu verwenden, die mehrere räumliche Spalten enthält, erstellen Sie mit SQL eine räumliche Sicht. Diese Sicht sollte nur eine räumliche Spalte enthalten. Siehe Erstellen einer Datenbanksicht in ArcGIS for Desktop.
ArcGIS unterstützt nur einen einzelnen Geometrietyp in einer SDO_GEOMETRY-Spalte.
Wenn eine einzelne SDO_GEOMETRY-Spalte in einer Tabelle mehrere Geometrietypen enthält (einige Datensätze sind z. B. Punkte und einige sind Polygone), kann die Tabelle nicht bei der Geodatabase registriert werden; die Feature-Class muss mit einem enthaltenen Geometrietyp registriert werden.
Oracle Spatial setzt nicht notwendigerweise Geometrietypeinschränkungen für eine SDO_GEOMETRY-Spalte durch. Ohne diese Umsetzung könnte eine Anwendung versuchen, eine einzelne Geometrietypeinschränkung aufrechtzuerhalten, aber eine andere Anwendung andere Geometrietypen einfügen. Ab Oracle9-i haben Sie die Option, bei Einfügungen in eine Tabelle mit einem räumlichen Indexerstellungsparameter den Geometrietyp einzuschränken. In früheren Oracle-Versionen ist eine andere Option, um Geometrietypeinschränkungen durchzusetzen, das Erstellen eines Triggers für Einfügungen und Aktualisierungen, der die SDO_GEOMETRY GTYPE-Eigenschaft überprüft.
Die Geometrieüberprüfung ist zwischen ArcGIS und SDO_GEOMETRY nicht identisch.
ArcGIS überprüft die Geometrie, wenn Geometrien eingefügt oder aktualisiert werden. In Oracle 10g erzwingt Oracle Spatial nicht automatisch eine Geometrieüberprüfung bei Einfügung oder Aktualisierung eines SDO_GEOMETRY-Wertes, wenn Sie Geometrien mit anderen Methoden als ArcGIS-Clients, z. B. SQL, einfügen oder aktualisieren. In Oracle 11g validiert Oracle Spatial Geometrien bei Indexeinfügungen.
Probleme können auftreten, wenn ungültige oder falsch gebildete Geometriewerte an ArcGIS-Client-Anwendungen übergeben werden. Um das Auftreten dieser potenziellen Probleme zu reduzieren, sollten Sie alle Geometrien überprüfen, die von einer anderen Methode als einer ArcGIS-Anwendung erstellt oder geändert wurden.
Für das Überprüfen von Geometrie sind zwei Werkzeuge verfügbar. Mit VALIDATE_GEOMETRY_WITH_CONTEXT von Oracle werden Geometrien mit den Shape-Validierungsregeln von Oracle überprüft, und "sdelayer –o feature_info" überprüft sie mit ArcGIS-Regeln. Der feature_info-Vorgang schließt als Teil seiner Ausgabe optional Informationen darüber ein, ob die Geometrie eines Shapes für ArcGIS gültig ist. Ausführliche Informationen zur Verwendung dieses Vorgangs finden Sie in der Administration Command Reference, die in der ArcSDE-Anwendungsserverinstallation enthalten ist.
Die ArcGIS-Geometrieüberprüfung ist nicht identisch mit der Oracle Spatial-Geometrieüberprüfung. Obwohl es wichtig ist, dass Geometrien Oracle Spatial-Validierung übergeben, garantiert eine erfolgreiche Überprüfung der Geometrien mit den Validierungsroutinen von Oracle nicht, dass die Geometrien von ArcGIS validiert werden.
Sie können einen Trigger für Einfügungen und Aktualisierungen erstellen, um die Funktion SDO_VALIDATE auszulösen, die die Überprüfung von SDO_GEOMETRY-Typen durchsetzt.
Die ArcSDE-C-API kann verwendet werden, um eine Anwendung zu schreiben, die Features abruft, auch wenn sie die ArcGIS-Shape-Validierung nicht bestehen. Es obliegt dann jedoch der Client-Anwendung, die Eignung der Geometrie oder Korrekturmöglichkeiten zu bestimmen.
Die meisten Anwendungen, die SDO_GEOMETRY-Objekte lesen, wären nicht in der Lage, von anderen Anwendungen erstellte SDO_ETYPE 0-Daten zu interpretieren.
Oracle Spatial ermöglicht es Anwendungen, anwendungsspezifische Daten in ein SDO_GEOMETRY-Objekt einzufügen. Anwendungen machen dies, indem sie ihre Daten unter Verwendung eines SDO_ETYPE-Wertes von 0 einbetten. Dies ermöglicht Anwendungen große Flexibilität, um viele Typen von unkonventioneller Geometrie und anderen Daten zu speichern. Die Bedeutung der anwendungsspezifischen Daten ist jedoch nur für die Anwendung wichtig, die das spezielle SDO_GEOMETRY-Objekt generiert hat. Solche anwendungsspezifischen Daten können in einer interoperablen Umgebung nicht zuverlässig unterstützt werden. Anwendungen, die SDO_GEOMETRY-Objekte lesen, wären wahrscheinlich nicht in der Lage, von anderen Anwendungen erstellte SDO_ETYPE 0-Daten zu interpretieren. Anwendungen, die SDO_GEOMETRY-Objekte aktualisieren, könnten die SDO_ETYPE 0-Daten nicht bearbeiten oder beibehalten.
Beim Lesen von SDO_GEOMETRY-Objekten, die SDO_ETYPE 0-Elemente enthalten, ignoriert ArcGIS die SDO_ETYPE 0-Daten und übergibt nur die einfachen Feature-Geometrieelemente, die es unterstützt, an die Anwendung.
Beim Aktualisieren von SDO_GEOMETRY-Objekten, die SDO_ETYPE 0-Elemente enthalten, behält ArcGIS die SDO_ETYPE 0-Daten nicht bei. Daher sollten Anwendungen, die die Beibehaltung von SDO_ETYPE 0-Daten erfordern, verhindern, dass Benutzer UPDATE-Zugriff auf die Tabelle haben.
ArcGIS erfordert, dass alle SDO_GEOMETRY-Werte in einer Spalte das gleiche Koordinatenbezugssystem aufweisen.
Wenn der Koordinatenbezug nicht definiert ist, sollte der SRID-Wert NULL sein, wie im "Oracle Spatial User's Guide and Reference" beschrieben ist.
Vor Oracle9-i setzte Oracle Spatial nicht automatisch bei Einfügung oder Aktualisierung eines SDO_GEOMETRY-Wertes eine Raumbezugs-ID-Validierung durch. Um die Validierung von SDO_GEOMETRY-Typen in diesen älteren Oracle-Instanzen zu erzwingen, können Sie einen Trigger für Einfügungen und Aktualisierungen erstellen, um die Funktion SDO_VALIDATE auszulösen. Oracle Spatial erfordert, dass die SRID in jeder Geometrie untereinander und mit der SRID in den räumlichen Metadaten übereinstimmt, auch wenn sie NULL ist.
Oracle Spatial und ArcGIS nehmen beide an, dass die erste und zweite Dimension von SDO_GEOMETRY X und Y sind.
Wenn ein SDO_GEOMETRY-Objekt über drei Dimensionen verfügt, interpretiert ArcGIS die dritte Dimension als Messwert, wenn der Dimensionsname (in den räumlichen Metadaten) mit dem Buchstaben "m" beginnt; andernfalls wird die dritte Dimension als Höhe angenommen. Sie können steuern, wie ArcGIS die dritte Dimension interpretiert, indem Sie mit dem Entitäts-Flag der Feature-Class festlegen, ob es sich um Höhen oder Messwerte handelt.
Oracle ermöglicht eine Verschlüsselung, deren Dimension einen Messwertordinatenwert enthält. Die zweite Ziffer des vierstelligen SDO_GTYPE kann 0, 3 oder 4 sein. Wenn sie 3 oder 4 ist, gibt dies an, welche Dimension die Messwertordinate enthält. ArcGIS liest die Verschlüsselung. Andernfalls, wenn das SDO_GEOMETRY-Objekt über vier Dimensionen verfügt, wird der Messwert als letzter Ordinatenwert interpretiert.
Oracle Spatial (jedoch nicht Oracle Locator) stellt unter Verwendung von Messwerten Funktionen für die Berechnungen des linearen Bezugssystems (LRS) bereit.
Die Oracle Spatial LRS-Funktionen erfordern, dass alle Messwerte in einer Geometrie ohne NaN-Werte monoton aufsteigen oder absteigen. Oracle Spatial LRS schränkt auch Messwerte zu Linestrings ein.
ArcGIS ermöglicht Messwert- und LRS-Berechnungen für alle geometrischen Typen, mit Unterstützung von willkürlich geordneten Messwerten und NaN-Werten.
Wenn Sie beabsichtigen, Oracle Spatial LRS-Funktionen zu verwenden, vergewissern Sie sich, dass Sie die Anwendung und die Datenbank innerhalb der Oracle Spatial LRS-Einschränkungen entwerfen.
ArcGIS benötigt eine eindeutige Feature-Kennung in der räumlichen Tabelle, um räumliche Abfragen, Abfragen der Protokolldateien, Operationen für einzelne Zeilen und versionierte Datenbankoperationen durchzuführen.
Mit dem komprimierten ArcSDE-Binärschema kann die Geometriespalte diesem Zweck dienen, da sie ein Fremdschlüssel für die Feature-Tabelle ist und als eindeutiger Nicht-NULL-Ganzzahlwert definiert wird. SDO_GEOMETRY schließt keinen eindeutigen identifizierenden Wert ein, wenn also ArcGIS die Spalte SDO_GEOMETRY einer vorhandenen Tabelle hinzufügt, kann es auch eine eindeutige identifizierende Spalte hinzufügen. So eine Spalte ist die registrierte Zeilen-ID-Spalte. Diese Spalte hat oftmals den Namen OBJECTID, kann jedoch auch anders benannt werden. Oder eine vorhandene Spalte kann für die registrierte Zeilen-ID-Spalte verwendet werden, solange sie indiziert ist und eine Ganzzahl, UNIQUE und NOT NULL ist. Registrierte, von ArcGIS verwaltete Zeilen-ID-Spalten müssen NUMBER (38) UNIQUE NOT NULL sein.
Eine registrierte Zeilen-ID-Spalte kann mit dem administrativen sdetable-Befehl oder der ArcCatalog-Anwendung hinzugefügt werden. Für viele Anwendungen, z. B. ArcGIS, ist eine registrierte Zeilen-ID-Spalte in jeder Tabelle oder jeder Feature-Class erforderlich. Jede Anwendung hat eigene Anforderungen und Einschränkungen.
Änderungen von Oracle Spatial-Feature-Classes, die an Netzwerken, Topologien, Beziehungen oder Einschränkungen beteiligt sind, sollten auf ArcGIS-Anwendungen eingeschränkt werden.
ArcGIS kann Netzwerke und integrierte topologische Feature-Classes von Simple-Feature-Classes erstellen und beibehalten, die den Typ SDO_GEOMETRY verwenden. ArcGIS erzwingt Beziehungen und Einschränkungen in vielen verschiedenen Datenquellen. ArcGIS verwaltet die Beziehungen und behält die topologische Integrität der Daten bei; Änderungen an den zugrunde liegenden Features durch ArcGIS werden in diesen integrierten Netzwerken, Topologien und Beziehungen reflektiert.
Änderungen von Oracle Spatial-Feature-Classes, die an Netzwerken, Topologien, Beziehungen und Einschränkungen beteiligt sind, sollten auf ArcGIS-Anwendungen beschränkt werden. Andere Anwendungen können die Daten frei lesen, aber ihre Bearbeitungen werden nicht ordnungsgemäß in der Geodatabase reflektiert.