Was geschieht, wenn Sie Feature-Classes mit SDO_GEOMETRY-Geometriespeicherung erstellen?
Wenn Sie eine Feature-Class mit SDO_GEOMETRY-Speicherung erstellen, geschieht Folgendes:
Der Business-Tabelle der Feature-Class wird eine SDO_GEOMETRY-Spalte hinzugefügt.
ArcGIS erstellt eine Feature-Class, indem es der angegebenen Business-Tabelle eine Geometriespalte hinzufügt. Wenn der Parameter "GEOMETRY_STORAGE" auf "SDO_GEOMETRY" festgelegt ist, fügt ArcGIS der Business-Tabelle eine SDO_GEOMETRY-Spalte hinzu.
Im folgenden Beispiel hat die Business-Tabelle Namens- und Bevölkerungseigenschaften. Nachdem ihr eine Geometriespalte hinzugefügt wurde, weist sie außerdem eine SDO_GEOMETRY-Spalte mit dem Namen "Borders" auf. Falls erforderlich, wird eine eindeutige Feature-Kennungsspalte (OBJECTID in diesem Beispiel) hinzugefügt und ausgefüllt.
Name |
Datentyp |
NULL? |
---|---|---|
NAME |
VARCHAR2(32)* |
|
POPULATION |
NUMBER(11) |
|
BORDERS |
MDSYS.SDO_GEOMETRY |
|
OBJECTID |
NUMBER(38) |
NOT NULL |
*NVARCHAR2(32) wird statt VARCHAR2(32) verwendet, wenn Sie Unicode-Zeichenfolgen verwenden.
Der Business-Tabelle kann eine Geometriespalte mit ArcCatalog, dem sdelayer-Verwaltungsdienstprogramm oder ArcSDE C- und Java-APIs hinzugefügt werden.
Für die Spalte "SDO_GEOMETRY" wird ein räumlicher Index erstellt.
Wenn einer Business-Tabelle eine SDO_GEOMETRY-Spalte hinzugefügt wird, wird normalerweise ein räumlicher Index für diese Geometriespalte erstellt. Standardmäßig erstellt ArcGIS für eine SDO_GEOMETRY-Spalte einen R-Baum-Index.
Alternativ kann ArcGIS Feature-Classes ohne räumlichen Index erstellen; räumliche Abfragen können jedoch erst unterstützt werden, wenn ein räumlicher Index erstellt wird. Für die Funktion "SDO_FILTER" von Oracle, die von ArcGIS verwendet wird, ist das Vorhandensein eines räumlichen Indexes erforderlich.
Sie können einen räumlichen Index mit mehreren Methoden erstellen – in ArcCatalog, mit dem sdelayer-Verwaltungsdienstprogramm, mit Oracle Spatial Index Advisor, mit SQL oder durch Programmierung mit ArcSDE C- und Java-APIs.
ArcGIS löscht automatisch die von ArcGIS erstellten Oracle Spatial-Indizes und erstellt neue, wenn die Feature-Class zwischen den Modi "LOAD_ONLY_IO" und "NORMAL_IO" wechselt. Räumliche Indizes, die von der Oracle Spatial Index Advisor-Anwendung definiert oder mit SQL erstellt wurden, werden nicht gelöscht, wenn ArcGIS die Feature-Class in den LOAD_ONLY_IO-Modus umschaltet.
Der Oracle Spatial-Metadatensicht wird ein Datensatz hinzugefügt.
Wenn ArcGIS einer Business-Tabelle eine SDO_GEOMETRY-Spalte hinzufügt, fügt es auch der USER_SDO_GEOM_METADATA-Sicht den erforderlichen Oracle Spatial-Metadatensatz hinzu. Diese Metadaten enthalten den Tabellennamen, den SDO_GEOMETRY-Spaltennamen, die Raumbezugs-ID und Informationen zur Koordinatendimension.
Wenn eine Anwendung eines Drittanbieters oder SQL verwendet wird, um die Tabelle, die räumliche Spalte und ihre Metadaten zu erstellen, und die Tabelle dann mit dem Befehlszeilenwerkzeug "sdelayer" bei ArcSDE registriert wird, löscht ArcSDE die Metadaten beim Entfernen der Registrierung der Tabelle aus ArcSDE nicht. Beim Löschen der Tabelle löscht ArcSDE jedoch immer die Metadaten, auf die gleiche Weise wie mit dem Befehl "sdetable -o delete".
Eine Koordinatendimension wird angegeben.
Sie können ArcGIS-Geometrie als 2D (X,Y), 2D mit Messwerten, 3D (X,Y,Z) oder 3D mit Messwerten erstellen. Beim Erstellen neuer Feature-Classes oder beim Hinzufügen einer vorhandenen Tabelle zu einer SDO_GEOMETRY-Spalte fügt ArcGIS die Oracle Spatial-Dimensionsinformationen in die Spalte "DIMINFO" der Metadatensicht ein.
- Die X-Koordinate ist die erste Dimension.
- Die Y-Koordinate ist die zweite Dimension.
- Die Z-Koordinate ist die dritte Dimension, wenn die Feature-Class mit Höhen definiert ist.
- Die M-Koordinate ist die letzte Dimension (dritte oder vierte, abhängig vom Vorhandensein oder der Abwesenheit einer Z-Koordinate), wenn die Feature-Class mit Messwerten definiert ist.
Die SRID von jedem SDO_GEOMETRY-Wert wird auf Grundlage des Koordinatenbezugs festgelegt.
Oracle Spatial stellt vordefinierte Koordinatenbezüge in der Tabelle "MDSYS.CS_SRS" bereit. Wenn Sie mithilfe von ArcGIS eine neue Feature-Class erstellen, um eine bestimmte SRID für die Spalte "SDO_GEOMETRY" festzulegen, identifizieren Sie die entsprechende Oracle Spatial-Koordinatenbezugsbeschreibung, und legen Sie dann den SDO_SRID DBTUNE-Speicherparameter der Feature-Class auf diesen Wert fest.
Beispiel:
#MY_SDO_KEYWORD GEOMETRY_STORAGE SDO_GEOMETRY SDO_SRID 8307 UI_TEXT "MY_SDO_KEYWORD" END
Wenn der Speicherparameter "SDO_SRID" nicht festgelegt wird, legt ArcGIS die SRID von jedem SDO_GEOMETRY-Wert und die SRID im entsprechenden Metadatensatz auf NULL fest.
ArcGIS erfordert keine Oracle Spatial SRID. ArcGIS verwaltet die Koordinatenbezugsinformationen für jede Feature-Class in einer eigenen SPATIAL_REFERENCES-Tabelle unabhängig von Oracle Spatial. Informationen zu unterstützten Koordinatenbezügen finden Sie im Handbuch Oracle Spatial User's Guide and Reference.
Die Spalte "SDO_GEOMETRY" wird ausgefüllt.
Beim Speichern von Geometrie in der Geodatabase füllt ArcGIS den SDO_GEOMETRY-Wert aus einem ArcSDE-API-Objekt mit dem Namen "SE_SHAPE" auf. Das SE_SHAPE-Objekt kann einfache und komplexe Geometrie enthalten, die Höhen, Messwerte, CAD-Daten, Annotations- und Oberflächenmuster umfassen kann. Der Datentyp "SDO_GEOMETRY" unterstützt eine Teilmenge dieser geometrischen Eigenschaften. Da es keine 1:1-Zuordnung der Komponenten im SDO_GEOMETRY- und im SE_SHAPE-Objekt gibt, folgt ArcGIS beim Speichern von Daten in Oracle Spatial-Tabellen einem Satz von Regeln:
- Einen vierstelligen SDO_GTYPE auf Grundlage des Entitätstyps der Geometrie erstellen.
- SDO_SRID auf NULL festlegen, wenn kein Oracle Spatial-Koordinatenbezug in einem DBTUNE-Parameter bereitgestellt wird.
- Koordinatenwerte in das entsprechende Koordinatenbezugssystem schreiben.
- Koordinaten in der Reihenfolge X, Y, Z und M schreiben, Höhen- und Messwertkoordinaten nur definieren, wenn sie im Quell-SE_SHAPE-Objekt vorhanden sind.
- Wenn Höhen und/oder Messwertkoordinaten im Quell-SE_SHAPE-Objekt vorhanden sind, alle Koordinaten mit einer Höhe und/oder einer Messwertkoordinate speichern.
- Höhen und Messwertkoordinaten auf NaN (keine Zahl) festlegen, wenn bestimmte Koordinaten in der Geometrie nicht definierte Höhen- oder Messwerte enthalten.
- Messwerte in jedem Geometrietyp, nicht nur Linestrings, zulassen. Die ersten und letzten Koordinaten müssen keine Messwerte enthalten.
- Messwerte nicht auf aufsteigende oder absteigende Reihenfolge einschränken.
- Kreisförmige Kurven in den Typ "SDO_GEOMETRY" schreiben, wenn die Feature-Class bei der CAD-Entitätsmaske (c) registriert ist; andernfalls Kurven in verdichtete Linestrings mit geraden Kanten konvertieren.
- Nicht kreisförmige Bogen (z. B. kubische Splines oder Bézier) in Linestrings mit geraden Kanten konvertieren. Wenn die Feature-Class bei der CAD-Entitätsmaske (c) registriert ist, außerdem die geschwungene Repräsentation in "SE_ANNO_CAD_DATA" speichern.
- Alle Features vor dem Schreiben in die Datenbank überprüfen. Die Validierungsregeln werden in der ArcSDE-Entwicklerhilfe beschrieben, für die das ArcSDE-Client-Software-Developer Kit (SDK) bereitgestellt wird.
- SDO_POINT verwenden, um einen Singlepart-X,Y- oder -X,Y,Z-Punkt im SDO_GEOMETRY-Objekt zu speichern. Punktstützpunkte für andere Typen von Point-Feature-Classes in "SDO_ORDINATE_ARRAY" speichern.
ArcGIS unterstützt keine heterogene Geometriesammlung im SDO_GEOMETRY-Objekt, und ArcGIS codiert keine SDO_ETYPE 0-Elemente im SDO_GEOMETRY-Objekt. SDO_ETYPE 0-Elemente sind anwendungsspezifisch.
Der Business-Tabelle wird eine weitere Spalte hinzugefügt, wenn Sie CAD- und Annotationseigenschaften speichern.
Der Typ "SDO_GEOMETRY" kann nicht alle Typen von geometrischen Elementen speichern, die die ArcGIS-Speicherung unterstützen muss. Wenn die Speicherung dieser Elemente (wie von den Geometrietyp-Flags bestimmt, die beim Erstellen der Feature-Class angegeben wurden) erforderlich ist, fügt ArcGIS der Business-Tabelle eine Spalte mit dem Namen "SE_ANNO_CAD_DATA" hinzu. Anhand des Feature-Class-Beispiels im ersten Abschnitt in diesem Thema würde die Business-Tabelle jetzt Folgendes enthalten:
Name |
Datentyp |
NULL? |
---|---|---|
NAME |
VARCHAR2(32)* |
|
POPULATION |
NUMBER(11) |
|
BORDERS |
MDSYS.SDO_GEOMETRY |
|
SE_ANNO_CAD_DATA |
BLOB |
|
OBJECTID |
NUMBER(38) |
NOT NULL |
*NVARCHAR2(32) wird statt VARCHAR2(32) verwendet, wenn Sie Unicode-Zeichenfolgen verwenden.
Jedes Mal, wenn ArcGIS erkennt, dass die Datenquelle CAD-Daten aufweist, schreibt ArcGIS eine einfache geometrische Repräsentation der CAD-Daten in den SDO_GEOMETRY-Wert und schreibt die unveränderten CAD-Daten in den SE_ANNO_CAD_DATA-Wert. Wenn die Datenquelle keine CAD-Daten enthält, legt ArcGIS den SE_ANNO_CAD_DATA-Wert auf NULL fest. Die Eigenschaft "SE_ANNO_CAD_DATA" enthält Daten aus zahlreichen ArcGIS-Komponenten:
- AutoCAD- oder MicroStation-Daten aus ArcSDE CAD Client
- Parametrische Objekte, z. B. kubische Splines und Bézierkurven aus ArcMap
- Oberflächenmuster aus der Erweiterung "ArcGIS Spatial Analyst"
Räumliche Abfragen zur Feature-Class werden mit Oracle Spatial-Filterfunktionen ausgeführt.
ArcGIS verwendet die Oracle Spatial-Funktion "SDO_FILTER", um die primäre räumliche Abfrage auszuführen. ArcGIS führt eine sekundäre Filterung von "SDO_GEOMETRY" auf Grundlage der von der Anwendung angeforderten räumlichen Beziehung aus.
Anwendungen schließen möglicherweise auch primäre und sekundäre Filterfunktionen aus Oracle Spatial in die an ArcGIS übergebene SQL-WHERE-Klausel ein. Mit räumlichen Filtern in der WHERE-Klausel können Anwendungen die räumliche Abfrage an den Datenbankserver, den ArcSDE-Anwendungsserver und die Anwendung selbst verteilen.