Mehr

Wie verwende ich mdsys.sdo_geometry von Oracle Locator mit ArcSDE?

Wie verwende ich mdsys.sdo_geometry von Oracle Locator mit ArcSDE?


Ich verwende den Oracle Locator MDSYS.SDO_Geometry-Typ, um meine räumlichen Informationen zu speichern und dann über ArcSDE darauf zuzugreifen. Ich bin verwirrt darüber, wie die Präzisionskomponente der Metadaten verwendet wird und insbesondere in Bezug auf die GPS-Genauigkeit.

Was ist die maximale Präzision, die ich mit ArcSDE verwenden kann?

Dies ist ein Beispiel meines Codes:

Sequenz für Objekt-ID-Spalte erstellen (oid)

SEQUENZ ERSTELLEN seq_myTable_oid MINVALUE 0 MAXVALUE 99999999 START MIT 1 INKREMENT UM 1 CACHE 20;

Tabelle erstellen

CREATE TABLE myTable ( id INT NOT NULL, geom MDSYS.SDO_GEOMETRY NOT NULL, oid INT NOT NULL ); ALTER TABLE myTable ADD CONSTRAINT pk_myTable PRIMARY KEY (id);

Einfüge-Trigger auf myTable für OID erstellen

TRIGGER myTable_i ERSTELLEN ODER ERSETZEN, BEVOR FÜR JEDE ZEILE EIN EINFÜGEN DECLARE BEGIN SELECT seq_myTable_oid.NEXTVAL INTO :new.oid FROM DUAL; ENDE; /

Geom-Metadaten für myTable einfügen

INSERT INTO USER_SDO_GEOM_METADATA VALUES( 'MYTABLE','GEOM', MDSYS.SDO_DIM_ARRAY( MDSYS.SDO_DIM_ELEMENT('X', -180, 180, 0.00005), MDSYS.SDO_DIM_ELEMENT('Y', -90, MD, .0.00005), .SDO_DIM_ELEMENT('Z', -10000, 100000, 1) ), 4326 );

Räumlichen Index für Tabelle erstellen

INDEX ERSTELLEN sp_idx_myTable_geom ON myTable(geom) INDEXTYPE IS MDSYS.SPATIAL_INDEX;

Tabelle bei SDE registrieren

sdelayer -o register -l myTable,geom -C oid,USER -t SDO_GEOMETRY -P HIGH -e l3 -s ServerName -i Instanz -u Benutzername -p Passwort

Ich bin mir über die verfügbare maximale Präzision in ArcSDE nicht sicher, aber das ist seit Jahren ein wunder Punkt für mich. So wie ich es verstehe, sind die Orakel- und die Arcsde-Präzision zwei völlig unterschiedliche Dinge. ArcSDE-Clients (z. B. Arcmap) lesen nur die Genauigkeit, die in den ArcSDE-Metadaten - und insbesondere in der Tabelle SDE.SPATIAL_REFERENCES, in den Feldern XYUNITS, ZUNITS und MUNITS - definiert ist.

Dies bedeutet zum Beispiel, dass Sie Ihre Daten in Oracle mit 5 oder mehr Dezimalstellen speichern können, aber wenn Ihre XYUNITS auf 1 gesetzt ist, wird Arcmap nur eine ganze Zahl ANZEIGEN (zB im Fenster mit den Skizzeneigenschaften)! Das Problem ist, dass die XYUnits automatisch festgelegt werden, wenn Sie die Oracle-Tabelle oder -Ansicht mit einer Berechnung registrieren, die ich nicht kenne. Falls es jemand anderes tut, würde mich das sehr interessieren! Vor Ewigkeiten habe ich ein Doco gefunden, das erklärt, wie ArcSDE diese Zahl berechnet, aber seitdem nie wieder gefunden ...

Als ich in der Vergangenheit die Genauigkeit ändern wollte, die ArcSDE meldet, habe ich die XY-Einheiten (oder M/Z-Einheiten) einfach auf einen "großen Wert" geändert, der völlig willkürlich ist, aber es schien zu funktionieren


Der Genauigkeitswert (oder Toleranzwert) von Oracle stellt den größtmöglichen Abstand zwischen zwei Punkten dar, damit sie von den räumlichen Operatoren von Oracle als gleich angesehen werden. Sie könnten zwar versuchen, sie basierend auf der Genauigkeit eines GPS-Geräts einzustellen, dies ist jedoch möglicherweise keine gute Vorgehensweise, da Ihre GPS-Genauigkeit je nach den Bedingungen und Geräten variiert, die beim Sammeln der Daten verwendet wurden, aber der Toleranzwert in Ihren Metadaten benötigt für den gesamten Datensatz konsistent sein. Es wäre besser, die Toleranz basierend darauf festzulegen, wie nahe Ihre Datenpunkte voraussichtlich herankommen und dennoch als separate Orte betrachtet werden.

Soweit ich weiß, verwendet ArcSDE keine räumlichen Operatoren von Oracle Spatial (es verwendet nur SDO_GEOMETRY zum Speichern), sodass der Toleranzwert für Sie keine Rolle spielt, es sei denn, Sie planen, die Daten außerhalb von SDE zu bearbeiten. Soweit ich weiß, hat ESRI keine Grenzen für den Toleranzbereich, der mit ArcSDE verwendet werden kann (aber beachten Sie, dass ArcSDE möglicherweise nicht die Oracle-Präzision verwendet, wie Mapoholic erwähnt).


Konvertierung Lambert in WGS84 (Geokodierung + Oracle Locator)

Ich binde gerade an Geokodierungen von Adressen in Österreich. Aus einer bestimmten Postleitzahl und Straße usw. möchte ich automatisch den Breiten- und Längengrad im WGS84-Format finden. Mein erster Ansatz war, einen Webservice wie OpenStreetMaps Nominatim zu verwenden. Tatsächlich liefert dies anständige Ergebnisse.

Trotzdem ist es verpflichtend einen Datenträger mit Adressen (PAC) und ihre jeweilige Geolokalisierung als Ground Truth zu verwenden. Nur wenn ich die Adresse innerhalb dieser Daten nicht zuordnen kann, kann ich den Webservice-Ansatz als Backup-Lösung verwenden.

So viel zum Kontext, jetzt das Problem: Auf dieser Diskette wird die Gelocation als X_LAMBERT und Y_LAMBERT angegeben und ich kann nicht ganz herausfinden, wie man in Breitengrad + Längengrad umwandelt.

Die Daten der diks werden mit Locator in eine Oracle 11g-Datenbank geladen und ich mache Folgendes:

Schritt 1: Erstellung des räumlichen Geometrieobjekts: MDSYS.SDO_GEOMETRY(2003,31287,NULL, MDSYS.SDO_ELEM_INFO_ARRAY(1,1003,1), MDSYS.SDO_ORDINATE_ARRAY(X_LAMBERT,Y_LAMBERT))

Schritt 2: Projektion von WGS84 auf LatLng: SDO_CS.TRANSFORM( GEOMETRY, 4326) in meinem Java-Client erhalte ich Breitengrad, Längengrad aus der Geometrie über oracle.spatial.geometry.JGeometry .

Hinweis: Ich vermute, dass 31287 SRID des Lambert-Formats ist, ich habe 8307 und 3416 ausprobiert, aber letztere liefern noch schlechtere Ergebnisse. Schritt 2 funktioniert gut mit anderen Geometrieobjekten, bei denen ich die richtige SRID mit Sicherheit kenne. Ich vermute also, dass der Fehler irgendwo in Schritt 1 liegt.

Muss ich in USER_SDO_GEOM_METADATA etwas einstellen? Falsche Verwendung des SDO_GEOMETRY-Konstruktors? Verwechsle ich immer noch Datum und Projektion? Vielleicht kannst du mich da auch aufklären.

Das Ergebnis meiner Aktion und Beispiel für die Eingabe sind:

Eingabe: X_LAMBERT 602823, Y_LAMBERT 464397 Resultierende Ausgabe: WGS84 (48.0469757028535, 16.0542604612583) Erwartete Ausgabe: WGS84 (48.546363, 16.085735)


3 Antworten 3

Das Refractoring der Abfrage mit einer inneren Abfrage und einer Union schien Oracle zu zwingen, die Indizes wie erwartet zu verwenden:

"Nebenbei bemerkt, erstellt eine andere DB, auf der Oracle Enterprise Edition läuft, einen Plan, in dem der Index verwendet und die Ergebnisse zusammengeführt werden. Ist das mit der Standard Edition möglich?"

Um die Antwort zu vervollständigen: Enterprise Edition unterstützt Bitmap-Indizierungstechniken. Wenn der Optimierer die Wahl hat, mehrere Indizes (oder hier denselben räumlichen Index für mehrere Prädikate) zu verwenden, verwendet er oft beide.

Dies geschieht, indem die Ergebnisse von jedem Prädikat (einem Satz von ROWIDs) abgerufen und in eine Bitmap umgewandelt werden. Es ist dann eine einfache Sache, diese Bitmaps zu kombinieren (hier mit ODER zu verknüpfen) und das Ergebnis wieder in eine Liste von ROWIDs zu extrahieren, um die tatsächlichen Ergebnisse abzurufen.

Das gibt es in der Standard Edition nicht. Die einzige Option für den Optimierer besteht darin, einen für den Index zu verwenden (für eine Abfrage, die mehrere Prädikate in einer AND-Bedingung kombiniert) oder einfach einen vollständigen Tabellenscan mit einem OR durchzuführen (da eine OR-Bedingung die Abfragebedingung sehr wenig selektiv macht). .

Das Ersetzen der OR-Bedingung durch eine UNION ALL ist der richtige Ansatz: Wir haben jetzt zwei Abfragen, die unabhängig voneinander optimiert werden, und beide verwenden den räumlichen Index.


Wie verwendet ArcSDE Oracle Spatial?

Oracle Spatial zu Ihrem Standard-Geometrieschema machen

Wenn Sie die ArcSDE-Komponente 9.3 zum ersten Mal installieren, ist ST_Geometry der standardmäßige Geometriespeichertyp. Die Standardeinstellungen für ArcSDE-Speicher werden in der DBTUNE-Tabelle durch die Parameter GEOMETRY_STORAGE definiert.

Das Ändern des standardmäßigen ArcSDE-Geometriespeichers zur Verwendung von Oracle Spatial ist einfach. Ändern Sie für das Schlüsselwort DEFAULTS den Parameter GEOMETRY_STORAGE von ST_GEOMETRY in SDO_GEOMETRY. Nachdem die Standardeinstellung von GEOMETRY_STORAGE in SDO_GEOMETRY geändert wurde, erstellt ArcSDE standardmäßig Feature-Classes mit SDO_GEOMETRY-Spalten.

ANMERKUNG: Verwenden Sie den sdedbtune-Verwaltungsbefehl, um die DBTUNE-Einstellungen zu ändern. Ausführliche Informationen zur Verwendung des Befehls sdedbtune finden Sie in der ArcSDE-Verwaltungsbefehlsreferenz, die mit ArcSDE installiert wird.

ArcSDE for Oracle unterstützt eine Reihe verschiedener Geometriespeicherschemas. Diese verschiedenen Schemas können alle zusammen in derselben Datenbank verwendet werden. Während es nur ein Standardgeometrieschema geben kann, können einzelne Tabellen mit unterschiedlichen Geometrieschemas erstellt werden.

Wenn Sie nur einige Ihrer Feature-Classes mit dem Spatial Type for Oracle-Speicher speichern möchten, können Sie beim Erstellen der Feature-Class das Schlüsselwort SDO_GEOMETRY angeben. Wenn Sie dies tun, wird diese bestimmte Feature-Class mit einer SDO_GEOMETRY-Spalte erstellt. In der dbtune-Datei wird das Schlüsselwort SDO_GEOMETRY wie folgt angezeigt:

Was passiert, wenn Sie Feature-Classes mit SDO_GEOMETRY-Geometriespeicher erstellen?

Wenn Sie eine Feature-Class mit SDO_GEOMETRY-Speicher erstellen, geschieht Folgendes:

    Der Business-Tabelle der Feature-Class wird eine SDO_GEOMETRY-Spalte hinzugefügt.

ArcSDE 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 ArcSDE der Business-Tabelle eine SDO_GEOMETRY-Spalte hinzu. In diesem Beispiel verfügt eine Geschäftstabelle mit dem Namen Länder über Namens- und Bevölkerungseigenschaften. Nach dem Hinzufügen einer Geometriespalte verfügt sie auch über eine SDO_GEOMETRY-Spalte mit dem Namen Borders. Bei Bedarf wird eine eindeutige Feature-ID-Spalte (im folgenden Beispiel OBJECTID genannt) hinzugefügt und ausgefüllt.

*NVARCHAR2(32) bei Verwendung von Unicode-Strings

Eine Geometriespalte kann mit ArcCatalog, dem Verwaltungsdienstprogramm sdelayer oder den ArcSDE C- und Java-APIs zur Business-Tabelle hinzugefügt werden.

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 ArcSDE einen R-Baum-Index für eine SDO_GEOMETRY-Spalte. (ArcSDE unterstützt auch das Erstellen von Oracle Spatial Fixed- und Hybrid-Indizes, diese werden jedoch von Oracle nicht mehr allgemein empfohlen.) Alternativ kann ArcSDE Feature-Classes ohne räumlichen Index erstellen, räumliche Abfragen können jedoch erst unterstützt werden, wenn ein räumlicher Index erstellt wurde. SDO_FILTER von Oracle, das von ArcSDE verwendet wird, erfordert das Vorhandensein eines räumlichen Index.

Sie können einen räumlichen Index in ArcCatalog auf verschiedene Weise mit dem Verwaltungsdienstprogramm sdelayer erstellen, indem Sie den Oracle Spatial Index Advisor mit SQL oder programmgesteuert mit den ArcSDE C- und Java-APIs verwenden.

ArcSDE löscht und erstellt von ArcSDE erstellte Oracle Spatial-Indizes automatisch, wenn die Feature-Class zwischen dem LOAD_ONLY_IO- und NORMAL_IO-Modus wechselt. Räumliche Indizes, die von der Oracle Spatial Index Advisor-Anwendung definiert oder mit SQL erstellt wurden, werden nicht gelöscht, wenn ArcSDE die Feature-Class in den LOAD_ONLY_IO-Modus wechselt.

Wenn ArcSDE einer Business-Tabelle eine SDO_GEOMETRY-Spalte hinzufügt, wird auch der erforderliche Oracle Spatial-Metadatensatz zur Ansicht USER_SDO_GEOM_METADATA hinzugefügt. Diese Metadaten umfassen den Tabellennamen, den SDO_GEOMETRY-Spaltennamen, die Raumbezugs-ID und Koordinatendimensionsinformationen.

Wenn eine Drittanbieteranwendung oder SQL zum Erstellen der Tabelle, der räumlichen Spalte und ihrer Metadaten verwendet wird und die Tabelle dann bei ArcSDE registriert wird, löscht ArcSDE die Metadaten nicht, wenn die Registrierung der Tabelle bei ArcSDE aufgehoben wird. ArcSDE löscht jedoch immer die Metadaten beim Löschen der Tabelle, wie dies beim Befehl sdetable -o delete der Fall ist.

Sie können ArcSDE-Geometrie als 2D (x/y), 2D mit Maßen, 3D (x/y/z) oder 3D mit Maßen erstellen. Beim Erstellen neuer Feature-Classes oder beim Hinzufügen einer SDO_GEOMETRY-Spalte zu einer vorhandenen Tabelle platziert ArcSDE die Oracle Spatial-Dimensionsinformationen in der DIMINFO-Spalte der Metadatenansicht.

    Die x-Koordinate ist die erste Dimension.

Oracle Spatial stellt vordefinierte Koordinatenreferenzen in der Tabelle MDSYS.CS_SRS bereit. Wenn Sie ArcSDE zum Erstellen einer neuen Feature-Class verwenden, um eine bestimmte SRID für die SDO_GEOMETRY-Spalte festzulegen, identifizieren Sie die entsprechende Oracle Spatial-Koordinatenreferenzbeschreibung und legen Sie dann den SDO_SRID DBTUNE-Speicherparameter der Feature-Class auf diesen Wert fest. Beispielsweise:

Wenn der Speicherparameter SDO_SRID nicht festgelegt ist, legt ArcSDE die SRID jedes SDO_GEOMETRY-Werts sowie die SRID im entsprechenden Metadatensatz auf NULL fest.

ArcSDE erfordert keine Oracle Spatial SRID. ArcSDE verwaltet die Koordinatenreferenzinformationen für jede Feature-Class in einer eigenen SPATIAL_REFERENCES-Tabelle unabhängig von Oracle Spatial.

Konsultieren Sie Ihre Oracle Spatial Benutzerhandbuch und Referenz für Informationen zu unterstützten Koordinatenreferenzen.

Beim Speichern von Geometrie in der Datenbank füllt ArcSDE den SDO_GEOMETRY-Wert aus einem ArcSDE-API-Objekt namens SE_SHAPE. Das SE_SHAPE-Objekt kann einfache und komplexe Geometrie enthalten, die Höhen, Maße, CAD-Daten, Anmerkungen und Oberflächen-Patches umfassen kann. Der Datentyp SDO_GEOMETRY unterstützt eine Teilmenge dieser geometrischen Eigenschaften. Da es keine Eins-zu-Eins-Zuordnung der Komponenten im SDO_GEOMETRY- und im SE_SHAPE-Objekt gibt, folgt ArcSDE beim Speichern von ArcSDE-Daten in Oracle Spatial-Tabellen einer Reihe von Regeln.

    Erstellen Sie ein vierstelliges SDO_GTYPE basierend auf dem Objekttyp der Geometrie.

HINWEIS: ArcSDE unterstützt keine heterogene Geometriesammlung im SDO_GEOMETRY-Objekt und ArcSDE codiert keine SDO_ETYPE 0-Elemente im SDO_GEOMETRY-Objekt. SDO_ETYPE 0-Elemente sind anwendungsspezifisch. Weitere Informationen finden Sie unten unter "Überlegungen zur Interoperabilität".

Der Typ SDO_GEOMETRY kann nicht alle Typen geometrischer Elemente speichern, die der ArcSDE-Speicher unterstützen muss. Wenn eine Speicherung für diese Elemente erforderlich ist (wie anhand der beim Erstellen der Feature-Class angegebenen Geometrietyp-Flags bestimmt), fügt ArcSDE der Business-Tabelle eine Spalte namens SE_ANNO_CAD_DATA hinzu. Im obigen Beispiel der Counties-Feature-Class würde die Business-Tabelle nun Folgendes enthalten:

*NVARCHAR2(32) bei Verwendung von Unicode-Strings

Immer wenn ArcSDE erkennt, dass die Datenquelle CAD-Daten enthält, schreibt ArcSDE eine einfache geometrische Darstellung der CAD-Daten in den Wert SDO_GEOMETRY und die unveränderten CAD-Daten in den Wert SE_ANNO_CAD_DATA. Wenn die Datenquelle keine CAD-Daten enthält, setzt ArcSDE den Wert SE_ANNO_CAD_DATA auf NULL.

Die Eigenschaft SE_ANNO_CAD_DATA enthält Daten aus zahlreichen ArcGIS-Komponenten:

    AutoCAD- oder MicroStation-Daten vom ArcSDE-CAD-Client

ArcSDE verwendet die Oracle Spatial SDO_FILTER-Funktion, um die primäre räumliche Abfrage auszuführen. ArcSDE führt eine sekundäre Filterung von SDO_GEOMETRY basierend auf der von der Anwendung angeforderten räumlichen Beziehung durch.


Composite Locator kann nicht in ArcGIS Server 10.2.2 veröffentlicht werden

Ich kann keinen zusammengesetzten Locator aus einer 10.0 SP5 ArcSDE Geodatabase (Oracle) in ArcGIS Server 10.2.2 veröffentlichen. Um das Problem einzugrenzen, habe ich einen neuen zusammengesetzten Locator mit nur einem Komponenten-Locator erstellt, um es so einfach wie möglich zu halten. Ich kann den Komponenten-Locator erfolgreich veröffentlichen, aber nicht den Verbund.

Beim Veröffentlichen ist die Verpackung erfolgreich und ganz am Ende des Prozesses erhalte ich die Meldung "Dienst konnte nicht veröffentlicht werden". In den ArcGIS Server-Protokollen erhalte ich die folgenden Fehler:

Ich kann jedoch die .sd-Datei erstellen. Wenn ich versuche, es mit dem GP-Tool zum Hochladen von Servicedefinitionen auf den Server hochzuladen, erhalte ich die gleiche Fehlermeldung wie oben.

Ich veröffentliche den Dienst über die "Besitzer" -Verbindung zu SDE, daher sollten die Berechtigungen kein Problem darstellen. Außerdem wird der Komponenten-Locator im Verbund ebenfalls über die Eigentümerverbindung referenziert.

Ich habe die SDE-Datenquelle korrekt registriert und erhalte während des Analyseschritts keine verdächtigen Meldungen. Die einzige Nachricht ist, dass der zusammengesetzte Locator auf den Server kopiert wird, was normal ist, da sie immer auf den Server kopiert werden.

Ich kann denselben zusammengesetzten Locator mit einer Kopie der Daten aus einer 10.2-File-Geodatabase veröffentlichen, sodass es sich nur um ein SDE/ArcGIS 10.2.2-Problem handelt.

Ich habe die gleiche Frage auch auf GIS StackExchange gepostet, damit Sie sie dort beantworten können, wenn Sie es vorziehen.


Composite Locator kann nicht in ArcGIS Server 10.2.2 veröffentlicht werden

Ich kann keinen zusammengesetzten Locator aus einer 10.0 SP5 ArcSDE Geodatabase (Oracle) in ArcGIS Server 10.2.2 veröffentlichen. Um das Problem einzugrenzen, habe ich einen neuen zusammengesetzten Locator mit nur einem Komponenten-Locator erstellt, um es so einfach wie möglich zu halten. Ich kann den Komponenten-Locator erfolgreich veröffentlichen, aber nicht den Verbund.

Beim Veröffentlichen ist die Verpackung erfolgreich und ganz am Ende des Prozesses erhalte ich die Meldung "Dienst konnte nicht veröffentlicht werden". In den ArcGIS Server-Protokollen erhalte ich die folgenden Fehler:

Ich kann jedoch die .sd-Datei erstellen. Wenn ich versuche, es mit dem GP-Tool zum Hochladen von Servicedefinitionen auf den Server hochzuladen, erhalte ich die gleiche Fehlermeldung wie oben.

Ich veröffentliche den Dienst über die "Besitzer" -Verbindung zu SDE, daher sollten die Berechtigungen kein Problem darstellen. Außerdem wird der Komponenten-Locator im Verbund ebenfalls über die Eigentümerverbindung referenziert.

Ich habe die SDE-Datenquelle korrekt registriert und erhalte während des Analyseschritts keine verdächtigen Meldungen. Die einzige Nachricht ist, dass der zusammengesetzte Locator auf den Server kopiert wird, was normal ist, da sie immer auf den Server kopiert werden.

Ich kann denselben zusammengesetzten Locator mit einer Kopie der Daten aus einer 10.2-File-Geodatabase veröffentlichen, sodass es sich nur um ein SDE/ArcGIS 10.2.2-Problem handelt.

Ich habe die gleiche Frage auch auf GIS StackExchange gepostet, damit Sie sie dort beantworten können, wenn Sie es vorziehen.


SDO_CS.CONVERT_XML_TO_NTV2

Konvertiert eine Oracle Spatial XML-Darstellung eines NTv2-Rasters (National Transformation Version 2) in das NTv2-ASCII-Format.

XML-Dokument, das die Oracle Spatial XML-Darstellung des NTv2-Grids enthält.

Ausgabe-CLOB-Objekt, das die Werte für das NTv2-Gitter enthält.

Um ein NTv2-Grid im ASCII-Format in eine Oracle Spatial XML-Darstellung zu konvertieren, verwenden Sie die Prozedur SDO_CS.CONVERT_NTV2_TO_XML.

Im folgenden Beispiel wird ein NTv2-Raster im ASCII-Format in eine Oracle Spatial XML-Darstellung konvertiert, die resultierende XML-Darstellung zurück in eine NTv2-ASCII-Darstellung konvertiert und die resultierende ASCII-Darstellung angezeigt. (Es wird nur ein Teil der Ausgabe angezeigt.)


Gewusst wie: Optimieren des räumlichen Index des mehrstufigen Rasters

Ein räumlicher Index wird verwendet, um schnelle geografische Suchen nach Features in einer Feature-Class durchzuführen. ArcSDE verwendet einen mehrstufigen räumlichen Rasterindex für Feature-Classes in mehreren Geometriespeichertypen, einschließlich komprimierter Binärdatei (LOB, LONG RAW oder BINARY) OGC-WKB, DB2 Spatial Extender und Spatial Type for Oracle. Das Optimieren der Gittergröße des räumlichen Index kann die Leistung räumlicher Abfragen verbessern. Dieser Artikel bietet einige Hintergrundinformationen zum räumlichen Index des mehrstufigen Rasters und enthält außerdem Tipps zu seiner Optimierung.

Der räumliche Index des mehrstufigen Gitters definiert ein imaginäres X/Y-Gitter. Pro Feature-Class können ein, zwei oder drei imaginäre Raster, auch als Rasterebenen bezeichnet, definiert sein. Die meisten Feature-Classes benötigen nur eine Rasterebene, es können jedoch weitere Ebenen erforderlich sein, wenn die durchschnittlichen Größen der Feature-Hüllkurven stark variieren. Jedes Feature wird mit nur einer der Rasterebenen indiziert: kleine Features auf der ersten Ebene und größere Features auf der zweiten oder dritten Ebene, falls vorhanden. ArcSDE platziert einen Eintrag oder eine Zeile im räumlichen Index für jede Instanz, bei der ein einzelnes Feature eine einzelne Zelle in der für dieses Feature verwendeten Rasterebene schneidet.

Während des primären Filtervorgangs einer räumlichen Abfrage findet ArcSDE die X/Y-Hüllkurve der räumlichen Filterform und bestimmt, welche Gitterzelle des räumlichen Index diese Hüllkurve schneidet. Als Nächstes führt ArcSDE eine Abfrage durch, um alle Features zurückzugeben, deren Hüllkurven diese Gitterzellen ebenfalls schneiden. Die Ergebnisse dieser primären Filteroperation sind die Kandidatenmerkmale. Später reduziert die sekundäre Filterung die Ergebnismenge auf nur die Kandidaten-Features, die die genauen Bedingungen der räumlichen Abfrage erfüllen, z. B. 'intersects', 'crosses' oder 'within'.

Das Abstimmen des räumlichen Index bedeutet, die Selektivität der primären Filteroperation gegenüber der Reduzierung der Anzahl von Einträgen im räumlichen Index auszugleichen. Die Kosten pro Feature des primären Filters sind viel niedriger als die des sekundären Filters, da der sekundäre Filter detaillierte Berechnungen durchführt, während der primäre Filter eine einfache Abfrage der räumlichen Indextabelle ist. Das Ergebnis der Angabe einer kleineren Gitterzellengröße sind normalerweise mehr Einträge in der räumlichen Indextabelle und eine feinere Selektivität durch die primäre Filteroperation. Das bedeutet, dass der sekundäre Raumfilter weniger Features untersuchen muss. Mehr Einträge im räumlichen Index erhöhen jedoch auch die Größe des räumlichen Index, wodurch der primäre Filtervorgang verlangsamt und mehr Speicherplatz in der Datenbank verbraucht wird.

Glücklicherweise bietet ArcSDE Statistiken zum räumlichen Index, die zusammen mit Leistungstests den Optimierungsprozess erleichtern können. Der Befehl 'sdelayer -o si_stats' ist das primäre Werkzeug zum Melden von Gitterstatistiken für den räumlichen Index, die zum Optimieren des räumlichen Index verwendet werden. Hier ist ein Beispiel für die Ausgabe dieses Befehls:


Geometriedatentypen

Wie in der Tabelle angegeben, erstellt ArcGIS drei Geometriedatentypen in Oracle und kann damit arbeiten: Esri ST_Geometry, Oracle SDO_Geometry und komprimierte Binärdatei. Komprimierter binärer Geometriespeicher kann nur in Geodatabases verwendet werden.

ST_Geometrie

Im Folgenden finden Sie eine allgemeine Beschreibung des räumlichen Datentyps ST_Geometry. Spezifische Informationen zur Oracle-Implementierung finden Sie unter ST_Geometry in Oracle.

Der Datentyp ST_Geometry implementiert die SQL 3-Spezifikation benutzerdefinierter Datentypen (UDTs), sodass Sie Spalten erstellen können, die räumliche Daten speichern können, z. B. die Position eines Wahrzeichens, einer Straße oder eines Grundstücks. Es bietet Zugriff auf die Geodatabase und die Datenbank, die mit der International Organization for Standards (ISO) und dem Open Geospatial Consortium, Inc. (OGC) kompatibel ist. Dieser Speicher erweitert die Fähigkeiten der Datenbank, indem er Speicher für Objekte (Punkte, Linien und Polygone) bereitstellt, die geografische Merkmale darstellen. Es wurde entwickelt, um Datenbankressourcen effizient zu nutzen, mit Datenbankfunktionen wie Replikation und Partitionierung kompatibel zu sein und einen schnellen Zugriff auf räumliche Daten zu ermöglichen.

Obwohl Sie eine Spalte als Typ ST_Geometry definieren können, fügen Sie keine ST_Geometry-Werte in die Spalte ein, da sie nicht instanziiert werden kann. Stattdessen fügen Sie die Unterklassenwerte ein.

ST_Geometry selbst ist eine abstrakte, nicht instanziierte Superklasse. Seine Unterklassen können jedoch instanziiert werden. Ein instanziierter Datentyp ist ein Datentyp, der als Tabellenspalte definiert werden kann und in den Werte seines Typs eingefügt werden.

Das folgende Diagramm zeigt die Hierarchie des Datentyps ST_Geometry und seiner Unterklassen.

Die Unterklassen von ST_Geometry sind in zwei Kategorien unterteilt: die Unterklassen der Basisgeometrie und die Unterklassen der homogenen Sammlung. Die Basisgeometrien umfassen ST_Point, ST_LineString und ST_Polygon, während die homogenen Sammlungen ST_MultiPoint, ST_MultiLineString und ST_MultiPolygon umfassen. Wie die Namen andeuten, handelt es sich bei den homogenen Sammlungen um Sammlungen von Basisgeometrien. Neben der gemeinsamen Nutzung von Basisgeometrieeigenschaften verfügen homogene Sammlungen über einige ihrer eigenen Eigenschaften.

Jede Unterklasse speichert beispielsweise den durch ihren Namen implizierten Geometrietyp, ST_MultiPoint speichert Multipoints. Eine Liste der Unterklassen und deren Beschreibungen finden Sie in der folgenden Tabelle:

  • Eine nulldimensionale Geometrie, die eine einzelne Position im Koordinatenraum einnimmt.
  • Hat einen einzelnen XY-Koordinatenwert, ist immer einfach und hat eine NULL-Grenze.
  • Ein eindimensionales Objekt, das als Folge von Punkten gespeichert ist, die einen linearen interpolierten Pfad definieren.
  • ST_LineStrings haben eine Länge.
  • Der ST_LineString ist einfach, wenn er sein Inneres nicht schneidet.
  • Die Endpunkte (die Grenze) eines geschlossenen ST_LineString nehmen denselben Punkt im Raum ein.
  • Ein ST_LineString ist ein Ring, wenn er sowohl geschlossen als auch einfach ist.
  • Die Endpunkte bilden normalerweise die Grenze eines ST_LineString, es sei denn, der ST_LineString ist geschlossen, in diesem Fall ist die Grenze NULL.
  • Das Innere eines ST_LineString ist der verbundene Pfad, der zwischen den Endpunkten liegt, es sei denn, er ist geschlossen.
  • Eine zweidimensionale Oberfläche, die als Folge von Punkten gespeichert ist, die ihren äußeren Begrenzungsring und null oder mehr innere Ringe definieren.
  • ST_Polygon hat Fläche und ist immer einfach.
  • Der äußere und alle inneren Ringe definieren die Grenze eines ST_Polygons, und der zwischen den Ringen eingeschlossene Raum definiert das Innere des ST_Polygons.
  • Die Ringe eines ST_Polygons können sich an einem Tangentenpunkt schneiden, aber niemals kreuzen.
  • Eine Sammlung von ST_Points.
  • Hat eine Dimension von 0.
  • Ein ST_MultiPoint ist einfach, wenn keines seiner Elemente denselben Koordinatenraum belegt.
  • Die Grenze eines ST_MultiPoint ist NULL.
  • Eine Sammlung von ST_LineStrings.
  • ST_MultiLineStrings haben eine Länge.
  • ST_MultiLineStrings sind einfach, wenn sie sich nur an den Endpunkten der ST_LineString-Elemente schneiden.
  • ST_MultiLineStrings sind nicht einfach, wenn sich die Innenräume der ST_LineString-Elemente überschneiden.
  • Die Grenze eines ST_MultiLineString sind die nicht geschnittenen Endpunkte der ST_LineString-Elemente.
  • Der ST_MultiLineString ist geschlossen, wenn alle seine ST_LineString-Elemente geschlossen sind.
  • Die Grenze eines ST_MultiLineString ist NULL, wenn alle Endpunkte aller Elemente geschnitten werden.
  • Eine Sammlung von Polygonen.
  • ST_MultiPolygons haben Fläche.
  • Die Grenze eines ST_MultiPolygon ist die kumulative Länge der äußeren und inneren Ringe seiner Elemente.
  • Das Innere eines ST_MultiPolygon ist definiert als das kumulative Innere seines Elements ST_Polygons.
  • Die Begrenzung der Elemente eines ST_MultiPolygon kann sich nur an einem Tangentenpunkt schneiden.

SDO_Geometrie

SDO_Geometry wird mit dem erweiterbaren objektrelationalen Typsystem von Oracle implementiert. Der Typ SDO_Geometry wird von Oracle mit zwei primären Optionen angeboten:

  • Oracle Spatial ist eine optionale Funktion der Oracle Database Enterprise Edition. Neben dem SDO_Geometry-Typ bietet Oracle Spatial eine Reihe zusätzlicher Geodatenfunktionen.
  • Oracle Locator bietet eine Teilmenge der Oracle Spatial-Funktionen. Es ist als Standardfunktion der Oracle Database Standard- und Enterprise-Editionen enthalten. Neben anderen Funktionen bietet es den Oracle Spatial-Geometrietyp (als SDO_Geometry bezeichnet) und eine SQL-API für diesen Inhalt.

ArcGIS unterstützt SDO_Geometry als optionale Methode zum Speichern räumlicher Daten. Insbesondere kann Oracle Spatial- oder Locator-Geometrie verwendet werden, um die Feature- und Raster-Inhalte von Datasets in Enterprise-Geodatabases oder Oracle-Datenbanken zu speichern und zu verwalten.

SDO_Geometry speichert Informationen zu einer Geometrie, einschließlich Geometrietyp, Raumbezugs-ID, Interpolationstyp (gerade versus gekrümmt) und Koordinatenwerte. Der Typ SDO_Geometry in Geodatabases unterstützt Single- und Multipart-Punkt-, Linien- und Flächengeometrie. Geometrien können so beschrieben werden, dass sie eine lineare Interpolation zwischen Koordinaten aufweisen, wie in der OpenGIS Simple Feature Specification definiert. Geometrien können auch aus Kreiskurven oder einer Kombination beider Interpolationsmethoden konstruiert werden. Anwendungsprogramme sind für das ordnungsgemäße Einfügen, Aktualisieren und Abrufen des Inhalts des SDO_Geometry-Typs unter Verwendung einer objektrelationalen SQL-Schnittstelle von Oracle verantwortlich. Die Anwendungen sind auch dafür verantwortlich, sicherzustellen, dass der Inhalt jeder Geometrie den in der Oracle Spatial-Dokumentation definierten Regeln entspricht. Oracle stellt Geometrievalidierungsroutinen bereit, die nach dem Einfügen von Geometrien ausgeführt werden können. Darüber hinaus wird ab Oracle 11.1.0.7 Geometrie auf Index-Einfügungen validiert.

Die Oracle-Geometrievalidierungsroutinen implementieren nicht genau dieselben Regeln wie die ArcGIS-Geometrievalidierung. ArcGIS ist jedoch darauf ausgelegt, SDO_Geometry zu schreiben, die die Oracle-Validierungsregeln erfüllt.

Informationen zu jeder SDO_Geometry-Spalte sollten im Oracle Spatial-Metadatenschema aufgezeichnet werden, obwohl Oracle Spatial dies nicht automatisch tut. (Das Oracle Spatial-Metadatenschema wird für jedes Schema als die Ansicht USER_SDO_GEOM_METADATA bereitgestellt.) Die Software, die SDO_Geometry-Spalten erstellt, muss die Metadaten für diese Spalten einfügen. ArcGIS führt dies für alle SDO_Geometry-Feature-Classes durch, die es erstellt. Die Metadaten enthalten den Namen der räumlichen Spalte, den Namen der Tabelle, in der sie sich befindet, und ihren Besitzer, den Oracle Spatial Reference Identifier (SRID), die Anzahl der Dimensionen, den Bereich jeder Dimension und ihre Koordinatentoleranz.

Räumliche Indizes bieten schnellen Zugriff auf Features basierend auf der Position ihrer Geometrie. Für SDO_Geometry sind R-Baum-Räumliche Indizes im Allgemeinen am effizientesten und am einfachsten zu erstellen, und Oracle empfiehlt ihre Verwendung in den meisten Situationen. Oracle Spatial stellt das Dienstprogramm Spatial Index Advisor bereit, das Sie bei der Bestimmung des besten räumlichen Indextyps für eine bestimmte Tabelle unterstützt. Detaillierte Informationen zu unterstützten räumlichen Indextypen, deren Erstellung und den Kompromissen der verschiedenen räumlichen Indexmethoden finden Sie außerdem in Ihrem Oracle Spatial-Benutzerhandbuch und -Referenz.

Oracle Spatial erweitert SQL um räumliche Suchfunktionen für die primäre und sekundäre Filterung. Das Einschließen der SDO_FILTER-Funktion in eine SQL-Abfrage führt eine primäre räumliche Suche unter Verwendung des räumlichen Indexes durch. Räumliche Prädikate wie SDO_RELATE und SDO_CONTAINS geben sekundäre Beziehungen zwischen Paaren von SDO_Geometry-Objekten zurück. Oracle Spatial verfügt über räumliche Transformationsfunktionen, die die Form eines SDO_Geometry-Werts ändern. Die Funktion SDO_BUFFER berechnet beispielsweise die Koordinaten eines neuen SDO_Geometry-Objekts als Pufferpolygon in einem bestimmten Abstand um die ursprüngliche Geometrie herum. Andere räumliche Transformationsfunktionen umfassen SDO_DIFFERENCE und SDO_INTERSECTION.

Oracle Spatial bietet mithilfe eines SRID-Werts Zugriff auf eine Reihe vordefinierter Koordinatenreferenzsysteme. Der im SDO_Geometry-Objekt gespeicherte SRID-Wert gibt die Koordinatenreferenz für die in diesem Objekt gespeicherte Geometrie an. Wenn sie nicht NULL ist, ist die SRID im SDO_Geometry-Objekt ein Fremdschlüssel für eine Tabelle mit Details zu jeder SRID. Diese Tabelle ist MDSYS.CS_SRS. Die Funktion SDO_TRANSFORM verwendet die Raumbezugs-ID, um Koordinatenbezugstransformationen einzurichten. ArcGIS verwendet diese Informationen auch, um Raumbezüge zu erstellen.

Komprimierte Binärdatei

Der komprimierte binäre Speichertyp von Esri verwendet einen binären Speichermechanismus zum Speichern von Feature-Geometrie. Eine komprimierte binäre Feature-Class besteht aus drei Tabellen: der Business-Tabelle, der Feature-Tabelle und der räumlichen Indextabelle.

Nach der Überprüfung der Geometrie komprimiert die Client-Anwendung sie und sendet sie an die Geodatabase, wo sie im komprimierten Binärformat in einer Feature-Tabelle oder F-Tabelle gespeichert wird. Das Komprimieren der Geometrie auf dem Client entlädt die Aufgabe vom Datenbankserver und reduziert die Übertragungszeit zum Senden der Geometrie. Es bietet auch eine effiziente Speicherung und Abfrage von Geodaten, indem es den für die Datenspeicherung erforderlichen Speicherplatz um bis zu 40 Prozent reduziert.

Die Business-Tabelle enthält Attribute und eine räumliche Spalte. Die räumliche Spalte ist ein Schlüssel zu den Feature- und räumlichen Indextabellen.

Die Beziehung zwischen der Business-Tabelle und der Feature-Tabelle wird über die räumliche Spalte und die Feature-ID (FID)-Spalte verwaltet. Dieser von ArcGIS verwaltete Schlüssel ist eindeutig.


Warum sollte ich Daten migrieren?

  • So greifen Sie mit einer strukturierten Abfragesprache (SQL) auf Ihre räumlichen oder Rasterdaten zu
  • So wechseln Sie von einem Datentyp, der in Zukunft möglicherweise nicht mehr unterstützt wird, zu einem, der unterstützt wird

Zugriff auf Daten mit SQL

Durch den Zugriff auf die Informationen in einer Geodatabase über SQL können externe Anwendungen (die nicht in einer ArcObjects-Umgebung entwickelt wurden) mit den von der Geodatabase verwalteten Tabellendaten arbeiten. Wenn diese Anwendungen auf räumliche oder Raster-Daten in der Geodatabase zugreifen müssen, müssen Sie Ihre räumlichen oder Raster-Daten in Datentypen speichern, die SQL-Zugriff zulassen. For example, using the ST_Raster storage type allows you to access your raster data with SQL, something that you cannot do easily if your raster data is stored in a BLOB, LONG RAW, IMAGE, BINARY, or BYTEA field.

Move from types that may not be supported in future releases

Oracle is recommending the use of BLOB or BFILE data types instead of LONG RAW data types in its databases. Although LONG RAW columns are still supported, if you have LONG RAW attribute, geometry, or raster fields in your current geodatabase in Oracle, you should migrate them to a different format in preparation for when they are not supported.

The storage for the attribute, geometry, and raster columns in a geodatabase is controlled by the DBTUNE parameters ATTRIBUTE_BINARY, GEOMETRY_STORAGE, and RASTER_STORAGE, respectively. The defaults for these parameters under the DBTUNE DEFAULTS configuration keyword are different depending on which release of ArcGIS you were using when you created your geodatabase. The following table shows the default setting under the DEFAULTS keyword in the DBTUNE table of geodatabases in Oracle.

Data created in new (not upgraded) 9.3 or later release geodatabases using the default parameter settings do not use the LONG RAW storage type. However, any existing data created with any or all of these parameters set to LONG RAW or any new data in upgraded geodatabases that have these parameters set to LONG RAW will still contain LONG RAW columns. To change the data types for these columns, you must alter your DBTUNE settings and migrate the data.

Beginning with ArcGIS 10.1, feature classes created in geodatabases in SQL Server use the Microsoft geometry type be default. To move your existing feature classes to the geometry storage type, use the Migrate Storage geoprocessing tool or a Python script.


Schau das Video: Installation of ArcSDE 9 3 1 on oracle part 1