Mehr

Oracle Spatial gibt unterschiedliche Schnittergebnisse mit definierter SRID zurück

Oracle Spatial gibt unterschiedliche Schnittergebnisse mit definierter SRID zurück


Ich habe eine Reihe von Punkten und eine Reihe von Polygonen, von denen ich eine Schnittmenge durchführe, um zu bestimmen, in welchem ​​Polygon jeder Punkt liegt. Dies wurde zuvor durchgeführt, ohne dass die Projektion entweder in der Metadatentabelle oder in den Geometrie-Features selbst definiert wurde.

Nach der Definition der Projektionen werden andere Ergebnisse als zuvor zurückgegeben. Seltsamerweise ist bei der Anzeige in SQLDeveloper und ArcGIS klar, dass die vorherigen Ergebnisse korrekt waren. Wenn ich die Projektionsdefinition weglasse, bekomme ich die richtige Antwort. Ich habe es mit verschiedenen Projektionsdefinitionen versucht, alle Daten sind im geodätischen Koordinatensystem NAD 1983.

Oracle scheint mehr zu tun, als zu überprüfen, ob die Projektionsdefinitionen übereinstimmen. Weiß jemand, was es tun könnte?

Die Schnittmenge wurde unter Verwendung von: sdo_geom.relate, SDO_TOUCH usw. durchgeführt, die alle das gleiche Ergebnis lieferten. Wenn ich die Entfernung messe, werden die Entfernungen außerdem umgekehrt, sodass der Abstand zu dem Polygon, in dem es sich nicht befindet, Null beträgt.

Ich habe versucht: - Neuaufbau der Indizes - Überprüfung der Geometrie auf Gültigkeit - Änderung der Projektionsdefinitionen

Unten ist die Situation, wenn der Punkt mit einer Projektionsdefinition gegeben ist, erhalte ich einen Wert von 03 und 02 ohne. 02 ist offensichtlich richtig und 03 nicht.

Ich habe den Eindruck, dass während dieses Vorgangs keine Transformationen durchgeführt werden und sich die Werte nativ im gleichen Koordinatenbezugssystem befinden.

Ideen?

Hier ist ein Beispiel ohne gefundene Beziehung:

SELECT sdo_geom.relate( t1.shape , 'determine', mdsys.SDO_GEOMETRY( 2001, 4269, mdsys.SDO_point_type(-163.14667,56.17,NULL), NULL, NULL ) ,0.005 ) FROM ( select MDSYS.SDO_GEOMETRY .( 2003 ,NULL ,MDSYS.SDO_ELEM_INFO_ARRAY(1.1003,1), MDSYS.SDO_ORDINATE_ARRAY(-162,56.1666999980807,-162,57,-164,57,-164,56.1666999980807,-162,56.1666999980807) ) Form von dual) t1;

Dasselbe mit definierter SRID und gefundener Beziehung:

SELECT sdo_geom.relate( t1.shape , 'determine', mdsys.SDO_GEOMETRY( 2001, -- point data null, mdsys.SDO_point_type(-163.14667,56.17,NULL), NULL, NULL ) ,0.005 ) FROM ( select MDSYS.SDO_GEOMETRY ( 2003 ,null ,NULL ,MDSYS.SDO_ELEM_INFO_ARRAY(1.1003,1), MDSYS.SDO_ORDINATE_ARRAY(-162,56.1666999980807,-162,57,-164,57,-164,56.1666999980807,-162,56.1666999980807)) Form von dual) t1;

Der Unterschied ist wahrscheinlich auf den Unterschied zwischen geodätischen und kartesischen Berechnungen zurückzuführen.

Wenn in Ihren Geometrien keine SRID angegeben ist, erfolgt die Berechnung einfach kartesisch.

Wenn Sie (richtig) angeben, dass sich die Geometrien in einem geodätischen Koordinatensystem befinden, sind alle Linien in Ihren Formen Großkreise. Vor allem, was auf Ihrem Bild wie eine einfache "horizontale" Linie aussieht, geht tatsächlich weiter nach Norden: Sie entspricht nicht einer Parallele, sondern einem Großkreis. Wenn Ihr Punkt nahe dieser Linie liegt, erhalten Sie andere Ergebnisse.


6.9 Erstellen eines benutzerdefinierten Koordinatenreferenzsystems

Wenn die von Oracle bereitgestellten Koordinatensysteme für Ihre Anforderungen nicht ausreichen, können Sie benutzerdefinierte Koordinatenreferenzsysteme erstellen.

Wie in Koordinatensystem (Räumliches Referenzsystem) erwähnt, werden die Begriffe Koordinatensystem und Koordinatenreferenzsystem (CRS) oft synonym verwendet, obwohl Koordinatenreferenzsysteme erdbasiert sein müssen.

Die genauen Schritte zum Erstellen eines benutzerdefinierten CRS hängen davon ab, ob es sich um geodätische oder projizierte handelt. Geben Sie in beiden Fällen Informationen zum Koordinatensystem an (Koordinatenachsen, Achsennamen, Maßeinheit usw.). Geben Sie für ein geodätisches CRS Informationen zum Datum (Ellipsoid, Nullmeridian usw.) an, wie in Erstellen eines geodätischen CRS beschrieben. Geben Sie für ein projiziertes CRS Informationen über das (geodätische) Quell-CRS und die Projektion (Operation und Parameter) an, wie in Erstellen eines projizierten CRS beschrieben.

Für jedes benutzerdefinierte Koordinatensystem sollte der SRID-Wert 1.000.000 (1 Million) oder höher sein.


Ein Überblick über die Oracle Spatial-Datenspeicherung

Oracle Spatial stellt einen räumlichen Geometrietyp (MDSYS.SDO_GEOMETRY), ein räumliches Metadatenschema, Indizierungsmethoden, Funktionen und Implementierungsregeln bereit, die unten beschrieben werden.

Oracle Locator ist eine Teilmenge von Oracle Spatial. Oracle Locator enthält den Datentyp SDO_GEOMETRY zusammen mit einigen der mit Oracle Spatial bereitgestellten Funktionen. Oracle Locator kann mit ArcSDE verwendet werden. Eine Erläuterung des Unterschieds zwischen Oracle Spatial und Oracle Locator finden Sie in der Dokumentation von Oracle. In diesem Thema kann "Oracle Locator" anstelle von Verweisen auf "Oracle Spatial" verwendet werden.

Der Oracle Spatial-Geometrietyp SDO_GEOMETRY wird unter Verwendung des erweiterbaren objektrelationalen Typsystems von Oracle implementiert. Der Typ SDO_GEOMETRY speichert Informationen zu einer Geometrie, einschließlich Geometrietyp, Raumbezugs-ID, Interpolationstyp (gerade versus gekrümmt) und Koordinatenwerte. Der Typ SDO_GEOMETRY in ArcSDE-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 der 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 Geometrievalidierungsroutinen von Oracle implementieren nicht genau dieselben Regeln wie die ArcSDE-Geometrievalidierung. ArcSDE ist jedoch darauf ausgelegt, SDO_GEOMETRY zu schreiben, das die Validierungsregeln von Oracle 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 Sicht USER_SDO_GEOM_METADATA bereitgestellt.) Die Software, die SDO_GEOMETRY-Spalten erstellt, muss die Metadaten für diese Spalten einfügen. ArcSDE 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äumliche R-Baum-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. Ausführliche 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.


Ein Überblick über die Oracle Spatial-Datenspeicherung

Oracle Spatial stellt einen räumlichen Geometrietyp (MDSYS.SDO_GEOMETRY), ein räumliches Metadatenschema, Indizierungsmethoden, Funktionen und Implementierungsregeln bereit, die unten beschrieben werden.

Oracle Locator ist eine Teilmenge von Oracle Spatial. Oracle Locator enthält den Datentyp SDO_GEOMETRY zusammen mit einigen der mit Oracle Spatial bereitgestellten Funktionen. Oracle Locator kann mit ArcGIS verwendet werden. Eine Erläuterung des Unterschieds zwischen Oracle Spatial und Oracle Locator finden Sie in der Dokumentation von Oracle. In diesem Thema kann Oracle Locator anstelle von Verweisen auf Oracle Spatial verwendet werden.

Der Oracle Spatial-Geometrietyp SDO_GEOMETRY wird unter Verwendung des erweiterbaren objektrelationalen Typsystems von Oracle implementiert. Der Typ SDO_GEOMETRY speichert Informationen zu einer Geometrie, einschließlich Geometrietyp, Raumbezugs-ID, Interpolationstyp (gerade versus gekrümmt) und Koordinatenwerte. Der Typ SDO_GEOMETRY in Enterprise-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 der 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 Geometrievalidierungsroutinen von Oracle implementieren nicht genau dieselben Regeln wie die ArcGIS-Geometrievalidierung. ArcGIS ist jedoch darauf ausgelegt, SDO_GEOMETRY zu schreiben, das die Validierungsregeln von Oracle 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 Sicht 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äumliche R-Baum-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.


So laden Sie SDO_GEOMETRY-Daten – WKB und SRID – in Oracle

Um sowohl WKB- als auch SRID-Daten aus einer SDO_GEOMETRY-Spalte in Oracle zu laden, müssen wir die Daten in zwei separaten Spalten AUSWÄHLEN.

In unserem Beispiel haben wir eine Tabelle namens GEOTABLE mit zwei Spalten: „ID“ int – das ist unser Primärschlüssel und „GEO“ SDO_GEOMETRY.

Um die ID sowie die WKB- und SRID-Daten aus der Spalte GEO auszuwählen, können wir die folgende Abfrage in Oracle eingeben:

Bitte beachten Sie den Tabellenalias „t“. Um auf die SDO_SRID-Eigenschaft zugreifen zu können, muss in Oracle ein Tabellenalias angegeben werden.

Hier das Ergebnis der Abfrage:

Die erste Zeile verwendet das SRID 4326, das World Geodetic System (WGS84), und die zweite Zeile verwendet das SRID 4283, das das geozentrische Datum von Australien (GDA94) ist. Je nach geographischer Lage sind viele andere Werte möglich, z.B. SRID 25832 bedeutet die UTM-Zone 32N des European Terrestrial Reference Systems (ETRS89), die in Karten von Dänemark und Deutschland weit verbreitet ist.


Überlegungen zur Interoperabilität

Ein weit verbreitetes Missverständnis ist, dass Anwendungen einfach deshalb zusammenarbeiten können, weil sie denselben zugrunde liegenden Geometrietyp unterstützen. Der Geometrietyp ist jedoch nur ein Aspekt der Geodatabase sowie anderer GIS-Datenbankschemas. Ein gemeinsames Verständnis von Regeln, Einschränkungen, Schema und Implementierung ist ebenfalls erforderlich. Folgende Punkte sollten Sie bei der Verwendung von Oracle Spatial mit ArcSDE und ArcSDE-Clients beachten:

ArcSDE und ArcGIS unterstützen nicht mehrere Geometriespalten in einer Tabelle.

Auf Tabellen mit mehreren SDO_GEOMETRY-Spalten sollte über Ansichten 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 Ansicht. Diese Ansicht sollte nur eine räumliche Spalte enthalten. Registrieren Sie als Nächstes die räumliche Ansicht bei ArcSDE mithilfe von sdelayer –o register.

Informationen zum Erstellen und Registrieren einer Ansicht mit nur einer SDO_GEOMETRY-Spalte finden Sie im Knowledge Base-Artikel Erstellen einer Oracle-Ansicht eines Oracle Spatial-Layers (mit mehreren Geometriespalten) und der Registrierung bei ArcSDE.

ArcSDE und ArcGIS unterstützen nur einen einzelnen Geometrietyp in einer SDO_GEOMETRY-Spalte.

Wenn eine einzelne SDO_GEOMETRY-Spalte in einer Tabelle mehrere Geometrietypen enthält (z. B. sind einige Datensätze Punkte und andere Polygone), kann die Tabelle nicht bei ArcSDE oder der Geodatabase registriert werden, in der die Feature-Class als einen Geometrietyp enthaltend registriert werden muss.

Oracle Spatial erzwingt nicht unbedingt Geometrietypeinschränkungen für eine SDO_GEOMETRY-Spalte. Ohne diese Erzwingung möchte eine Anwendung möglicherweise eine einzelne Geometrietyp-Einschränkung erzwingen, eine andere Anwendung könnte jedoch andere Geometrietypen einfügen. Beginnend mit Oracle9ich, haben Sie die Möglichkeit, den Geometrietyp beim Einfügen in eine Tabelle mit einem Erstellungsparameter für den räumlichen Index einzuschränken. Für frühere Oracle-Versionen besteht eine weitere Option zum Erzwingen von Geometrietypeinschränkungen darin, einen Einfüge-Aktualisierungs-Trigger zu erstellen, der die SDO_GEOMETRY GTYPE-Eigenschaft überprüft, um Geometrietypen zu erzwingen.

Oracle Spatial erzwingt die Geometrievalidierung beim Einfügen oder Aktualisieren eines SDO_GEOMETRY-Werts nicht automatisch.

ArcSDE validiert Geometrie beim Einfügen oder Aktualisieren von Geometrien. Oracle Spatial selbst erzwingt jedoch nicht automatisch die Geometrievalidierung beim Einfügen oder Aktualisieren eines SDO_GEOMETRY-Werts, wenn Sie Geometrien mit anderen Methoden als ArcSDE-Clients einfügen oder aktualisieren, z. B. SQL.

Probleme würden auftreten, wenn unzulässige oder schlecht geformte Geometriewerte an ArcSDE-Clientanwendungen übergeben würden. Um das Auftreten dieser potenziellen Probleme zu reduzieren, sollten Sie alle Geometrien validieren, die mit einer anderen Methode als einer ArcSDE-Clientanwendung erstellt oder geändert wurden.

HINWEIS: Ab ArcSDE 9.1 validiert ArcSDE SDO_GEOMETRY-Features nicht mehr, wenn sie aus der Datenbank abgerufen werden. Diese Änderung wurde vorgenommen, um die Abrufleistung zu verbessern.

Es stehen zwei Werkzeuge zur Überprüfung der Geometrie zur Verfügung. VALIDATE_GEOMETRY_WITH_CONTEXT von Oracle prüft Geometrien mit den Formvalidierungsregeln von Oracle und sdelayer –o feature_info prüft sie mit den Regeln von ArcSDE. Die Operation feature_info enthält optional als Teil ihrer Ausgabe Informationen darüber, ob die Geometrie einer Form für ArcSDE gültig ist oder nicht. Ausführliche Informationen zur Verwendung dieses Vorgangs finden Sie in der Dokumentation zur Administrationsbefehlsreferenz, die Ihrer ArcSDE-Installation beiliegt.

Die ArcSDE-Geometrievalidierung ist nicht mit der Oracle Spatial-Geometrievalidierung identisch. Obwohl es wichtig ist, dass Geometrien die Oracle Spatial-Validierung bestehen, garantiert die erfolgreiche Validierung von Geometrien mit den Validierungsroutinen von Oracle nicht, dass die Geometrien von ArcSDE validiert werden.

Sie können einen Insert-Update-Trigger erstellen, um die SDO_VALIDATE-Funktion auszulösen, um die Validierung von SDO_GEOMETRY-Typen zu erzwingen.

Die ArcSDE C-API kann verwendet werden, um eine Anwendung zu schreiben, die Features abruft, auch wenn diese die ArcSDE-Shape-Validierung nicht bestehen. Es liegt dann jedoch an der Client-Anwendung, die Eignung der Geometrie zu bestimmen oder zu beheben.

ArcSDE unterstützt keine heterogenen Geometriesammlungen in einem SDO_GEOMETRY-Objekt.

Die meisten Anwendungen, die SDO_GEOMETRY-Objekte lesen, wissen nicht, wie sie SDO_ETYPE 0-Daten interpretieren sollen, die von anderen Anwendungen erstellt wurden.

Oracle Spatial ermöglicht es Anwendungen, anwendungsspezifische Daten in ein SDO_GEOMETRY-Objekt einzufügen. Anwendungen tun dies, indem sie ihre Daten mit einem SDO_ETYPE-Wert von 0 einbetten. Dies ermöglicht Anwendungen eine große Flexibilität, viele Arten unkonventioneller Geometrie und anderer Daten zu speichern. Die Bedeutung der anwendungsspezifischen Daten ist jedoch nur der Anwendung bekannt, die dieses 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, wissen wahrscheinlich nicht, wie sie SDO_ETYPE 0-Daten interpretieren sollen, die von anderen Anwendungen erstellt wurden. Anwendungen, die SDO_GEOMETRY-Objekte aktualisieren, wissen nicht, wie die SDO_ETYPE 0-Daten bearbeitet oder beibehalten werden.

Beim Lesen von SDO_GEOMETRY-Objekten mit SDO_ETYPE 0-Elementen ignoriert ArcSDE die SDO_ETYPE 0-Daten und übergibt nur die von ihm unterstützten Simple-Feature-Geometrieelemente an die Anwendung.

Beim Aktualisieren von SDO_GEOMETRY-Objekten, die SDO_ETYPE 0-Elemente enthalten, behält ArcSDE die SDO_ETYPE 0-Daten nicht bei. Daher sollten Anwendungen, die sicherstellen müssen, dass SDO_ETYPE 0-Daten beibehalten werden, sicherstellen, dass Benutzer keinen UPDATE-Zugriff auf die Tabelle haben.

ArcSDE erfordert, dass sich alle SDO_GEOMETRY-Werte in einer Spalte im selben Koordinatenreferenzsystem befinden.

Wenn die Koordinatenreferenz nicht definiert ist, sollte der SRID-Wert NULL lauten, wie im Oracle Spatial User's Guide and Reference definiert.

Vor Oracle9ich, Oracle Spatial erzwingt die Überprüfung der Raumbezugs-ID beim Einfügen oder Aktualisieren eines SDO_GEOMETRY-Werts nicht automatisch. Um die Validierung von SDO_GEOMETRY-Typen auf diesen älteren Oracle-Instanzen zu erzwingen, können Sie einen Insert-Update-Trigger erstellen, um die SDO_VALIDATE-Funktion auszulösen. Ab Oracle9i erfordert Oracle Spatial, dass die SRID in jeder Geometrie und die SRID in den räumlichen Metadaten übereinstimmen, auch wenn sie NULL ist.

Oracle Spatial und ArcSDE gehen beide davon aus, dass die erste und die zweite Dimension von SDO_GEOMETRY x bzw. y sind.

Wenn ein SDO_GEOMETRY-Objekt drei Dimensionen hat, geht ArcSDE davon aus, dass die dritte Dimension eine Kennzahl ist, wenn der Dimensionsname (in den räumlichen Metadaten) mit einem M beginnt. Andernfalls wird die dritte Dimension als Höhe angenommen. Sie können steuern, wie ArcSDE die dritte Dimension interpretiert, indem Sie das Entity-Flag der Feature-Class auf Höhen oder Maße festlegen.

Oracle9ich Release 2 hat das SDO_GTYPE-Member des SDO_GEOMETRY-Typs erweitert, um die Codierung jeder Dimension zu ermöglichen, die eine Kennzahl-Ordinate enthält. Die zweite Ziffer des vierstelligen SDO_GTYPE kann 0, 3 oder 4 sein. Wenn es 3 oder 4 ist, zeigt dies an, welche Dimension die Maß-Ordinate enthält. ArcSDE 9.0 und höher erkennt diese Codierung. Andernfalls, wenn das SDO_GEOMETRY-Objekt vier Dimensionen hat, wird erwartet, dass die Kennzahl die letzte Ordinate ist.

In diesem Beispiel legt sdelayer den Entitätstyp einer Feature-Class fest, um Linienfolgen und Höhen zu speichern:

In diesem Beispiel legt sdelayer den Entitätstyp einer Feature-Class fest, um Linienfolgen und Maße zu speichern:

Oracle Spatial (aber nicht Oracle Locator) bietet Funktionen für Berechnungen des linearen Referenzsystems (LRS) unter Verwendung von Kennzahlen.

Oracle Spatial LRS-Funktionen erfordern, dass alle Maßwerte in einer Geometrie ohne NaN-Werte monoton aufsteigend oder absteigend sind. Oracle Spatial LRS beschränkt auch Kennzahlwerte auf Linienfolgen.

ArcSDE ermöglicht Measures und LRS-Berechnungen für alle geometrischen Typen mit Unterstützung für beliebig geordnete Measurewerte und NaN-Werte.

Wenn Sie Oracle Spatial LRS-Funktionen verwenden möchten, müssen Sie Ihre Anwendung und Datenbank so entwerfen, dass sie innerhalb der Oracle Spatial LRS-Einschränkungen funktionieren.

ArcSDE benötigt eine eindeutige Feature-ID in der räumlichen Tabelle, um räumliche Abfragen, Protokolldateiabfragen, Einzelzeilenvorgänge und Datenbankvorgänge mit mehreren Versionen durchzuführen.

Beim komprimierten Binärschema von ArcSDE kann die Geometriespalte diesem Zweck dienen, da sie ein Fremdschlüssel für die Feature-Tabelle ist und als eindeutiger ganzzahliger Wert ungleich NULL definiert ist. SDO_GEOMETRY enthält keinen eindeutigen Identifizierungswert. Wenn ArcSDE also die Spalte SDO_GEOMETRY zu einer vorhandenen Tabelle hinzufügt, wird möglicherweise auch eine eindeutige Identifizierungsspalte hinzugefügt. Eine solche Spalte wird als registrierte Zeilen-ID-Spalte bezeichnet. Diese Spalte wird oft als OBJECTID bezeichnet, kann aber auch einen anderen Namen haben. 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 Zeilen-ID-Spalten, die von ArcSDE verwaltet werden, müssen NUMBER(38) UNIQUE NOT NULL sein.

Eine registrierte Zeilen-ID-Spalte kann mit dem sdetable-Verwaltungsbefehl oder der ArcCatalog-Anwendung hinzugefügt werden. Viele Anwendungen wie ArcGIS erfordern eine registrierte Zeilen-ID-Spalte in jeder Tabelle oder Feature-Class. Jede Anwendung hat ihre eigenen Anforderungen und Einschränkungen.

Für den SQL-Zugriff auf die multiversionierte Datenbank sind Ansichten mit mehreren Versionen verfügbar.

ArcGIS verwendet eine Datenbank mit mehreren Versionen, die über ArcSDE für Bearbeitungsvorgänge implementiert wird. Die Datenbank mit mehreren Versionen bietet lange Transaktionsunterstützung für mehrere gleichzeitige Entwurfsalternativen.

Für den SQL-Zugriff auf die Datenbank mit mehreren Versionen sind Ansichten mit mehreren Versionen verfügbar, einschließlich als versioniert registrierter Oracle Spatial-Tabellen. Weitere Informationen finden Sie unter Verwenden von Datenbankansichten.

Die Änderung von Oracle Spatial-Feature-Classes, die an Netzwerken oder Topologien teilnehmen, sollte auf ArcGIS-Anwendungen beschränkt sein.

ArcGIS kann Netzwerke und integrierte topologische Feature-Classes aus einfachen Feature-Classes erstellen und verwalten, die den Typ SDO_GEOMETRY verwenden. 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 widergespiegelt.

Die Änderung von Oracle Spatial-Feature-Classes, die an diesen Netzwerken oder Topologien teilnehmen, sollte auf ArcGIS-Anwendungen beschränkt werden. Andere Anwendungen können die Daten frei lesen, aber von ihnen vorgenommene Änderungen spiegeln sich nicht in den Netzwerken oder Topologien wider.

Die Änderung von Oracle Spatial-Feature-Classes, die an Beziehungen und Einschränkungen beteiligt sind, sollte auf ArcGIS-Anwendungen beschränkt sein.

ArcGIS erzwingt Beziehungen und Einschränkungen in vielen verschiedenen Datenquellen. Feature-Classes, die einen SDO_GEOMETRY-Typ enthalten, können in Beziehungen eingeschlossen sein und für sie definierte Einschränkungen aufweisen.

Die Änderung von Oracle Spatial-Feature-Classes, die an Beziehungen und Einschränkungen beteiligt sind, sollte auf ArcGIS-Anwendungen beschränkt sein. Andere Anwendungen können die Daten frei lesen, aber ihre Bearbeitungen werden nicht richtig behandelt.


Raster-Datentypen

Sie können BLOB, Long Raw, ST_Raster oder SDO_GeoRaster für die Raster-Spalten von Raster-Datasets, Raster-Katalogen oder Mosaik-Datasets verwenden.

Informationen zu BLOBs in Oracle finden Sie im Abschnitt BLOB dieses Themas.

Oracle hat den Long Raw-Datentyp veraltet. Sie sollten diesen Typ vermeiden, um sich darauf vorzubereiten, dass er nicht mehr unterstützt wird. Obwohl Long Raw immer noch funktioniert, ist es am besten, es nicht zu verwenden. Wenn Sie Long Raw verwenden, müssen Sie es eventuell auf einen anderen Speichertyp migrieren.

In den nächsten beiden Unterabschnitten werden die verbleibenden Raster-Datentypen beschrieben.

ST_Raster

ST_Raster ist ein benutzerdefinierter Datentyp, den Sie in Enterprise-Geodatabases installieren können, um SQL-Zugriff auf Raster-Daten bereitzustellen.

Um ST_Raster zu verwenden, müssen Sie es in der Datenbank konfigurieren. Siehe Installieren von ST_Raster in Oracle.

Ausführliche Informationen zur Definition des Objekttyps ST_Raster finden Sie unter Der Datentyp ST_Raster.

SDO_GeoRaster

Der Oracle Spatial-Raster-Datentyp SDO_GeoRaster wird unter Verwendung des erweiterbaren objektrelationalen Typsystems von Oracle implementiert. Der Typ SDO_GeoRaster speichert Informationen zu einem Raster, einschließlich Pixeltyp, Raumbezugs-ID und Pixelwerten.

Der Typ SDO_GeoRaster unterstützt alle Esri-Pixeltypen: 1 Bit bis 64 Bit, Vorzeichen, Vorzeichen und Gleitkomma. ArcGIS unterstützt den SDO_GeoRaster-Datentyp von Oracle Spatial als Option zum Speichern von Raster-Daten.

Anwendungsprogramme sind für das ordnungsgemäße Einfügen, Aktualisieren und Abrufen der Inhalte des SDO_GeoRaster-Typs unter Verwendung einer objektrelationalen strukturierten Abfragesprache (SQL)-Schnittstelle von Oracle verantwortlich. Die Anwendungen sind auch dafür verantwortlich, sicherzustellen, dass der Inhalt jedes Rasters den in der Oracle-Dokumentation definierten Regeln entspricht.

Beim Erstellen einer Tabelle mit einer Oracle SDO_GeoRaster-Spalte füllt ArcGIS das erforderliche Oracle-Metadatenschema. Es liegt in der Verantwortung von Anwendungen wie ArcGIS, diese Aufgabe auszuführen, da sie nicht automatisch von Oracle ausgeführt wird. Wenn Sie eine Tabelle registrieren, die eine Oracle-SDO_GEORASTER-Spalte enthält, die von einem Drittanbieterprodukt erstellt wurde, liegt es in der Verantwortung dieses Produkts, das Oracle-Metadatenschema für die SDO_GeoRaster-Spalte ordnungsgemäß zu füllen.

Bekannte Einschränkungen bei der Verwendung von SDO_GeoRaster mit einer Geodatabase

Im Folgenden finden Sie eine Liste mit Grenzwerten, die Sie beim Speichern von Raster-Daten in Ihrer Enterprise-Geodatabase als SDO_GeoRaster beachten sollten.

  • Oracle unterstützt keine stückweisen Aktualisierungen für SDO_GeoRaster. Daher ist es nicht möglich, Bilddateien mit einem vorhandenen Raster-Dataset zu mosaikieren, das als SDO_GeoRaster gespeichert ist.
  • Beim Einfügen von Daten können keine Pyramiden konstruiert werden. Nach dem Einfügen von Bilddaten in ein SDO_GeoRaster ist ein separater Aktualisierungsschritt erforderlich, um die Pyramide zu erstellen. Aus diesem Grund sollten Sie immer das Kontrollkästchen Pyramide erstellen im Dialogfeld eines der ArcGIS-Geoverarbeitungswerkzeuge deaktivieren, die Raster-Datasets oder Raster-Kataloge erstellen.
  • Die Bilddaten können derzeit nicht in einem komprimierten Format in SDO_GeoRaster gespeichert werden, wenn Sie Oracle 10 verwendeng Lassen Sie 1 (R1) los. Oracle hat dem SDO_GeoRaster-Typ in Oracle 10 die Bildkomprimierung hinzugefügtg Lassen Sie 2 (R2) los. Wenn Sie Oracle 10 verwendeng R1 sollten Sie den Komprimierungstyp im Dialogfeld aller ArcGIS-Geoverarbeitungswerkzeuge immer auf NONE setzen, wenn Sie diese zum Erstellen von Raster-Datasets oder Raster-Katalogen verwenden.
  • Sie können den SDO_GeoRaster-Speicher nicht in einem Oracle 11 verwendeng R2-Datenbank als Ergebnis des Oracle-Bugs 12537431. Wenn Sie SDO_GeoRaster-Speicher verwenden möchten, verwenden Sie Oracle 11g R1 oder spätere Versionen.
  • Oracle implementiert SDO_GeoRaster als bandintegrierte Architektur. Daher ist es nicht möglich, einzelne Bänder eines Raster-Datasets hinzuzufügen und zu löschen.
  • ArcGIS unterstützt nicht mehrere Raster-Spalten in einer Tabelle. Auf Tabellen mit mehreren SDO_GeoRaster-Spalten sollte über Ansichten zugegriffen werden, die nur eine SDO_GeoRaster-Spalte enthalten. Erstellen Sie eine Ansicht der Tabelle und nehmen Sie nur eine SDO_GeoRaster-Spalte in die Ansichtsdefinition auf.
  • Bei Verwendung des SDO_GeoRaster-Speichers in einer Geodatabase wird keine Nodata-Bitmaske unterstützt. Daher ist es nicht möglich, eine Pyramide auf nicht quadratischen regulären Daten zu erstellen.

So überprüfen Sie die SRID meiner Tabelle - ORACLE

Die Antwort von Littlefoot ist richtig, zeigt Ihnen jedoch die SRID von nur einer Zeile. Es gibt keine Garantie dafür, dass alle Zeilen dieselbe SRID haben (dies müssen Sie erzwingen).
Also würde ich die Klausel "where rownum = 1" fallen lassen und group by verwenden:

Wenn diese Tabelle eine Spalte mit dem Datentyp SDO_GEOMETRY enthält:

Achten Sie auf den Alias ​​der Tabelle, ohne den es nicht funktioniert:


Lat, Long mit SQL-Abfrage zurückgeben (Oracle)

von BlakeTerhune

In unserer Oracle 11g SDE (10.0) gibt es eine Point-Feature-Class mit einem Shape-Feld vom Typ ST_Geometry. Es hat auch ein Northing- und Easting-Feld, das von GPS-Personal bevölkert wird. Ich muss in der Lage sein, GCS_WGS_1984 (SRID 0) Breite und Länge (Dezimalgrad) von den Punkten zu erhalten, die sich in NAD_1983_HARN_StatePlane_Arizona_Central_FIPS_0202 (SRID 48) befinden. Ich bin mir sicher, dass es eine Möglichkeit gibt, dies mit ST_Transform und/oder ST_AsText zu tun, aber ich konnte nicht herausfinden, dass ST_AsText immer nur (HUGE CLOB) durchkommt. Was ist die richtige Oracle SQL-Syntax, um dies zu erhalten?

von BlakeTerhune

Doh! Ja, ST_X und ST_Y funktionieren.

Ich werde mich darum kümmern, unsere durchgeknallte Raumbezugstabelle zu reparieren. Danke Josua!

von BlakeTerhune

Nachdem ich mit dem Esri-Support zusammengearbeitet habe (danke Jing!) habe ich noch einige weitere Informationen zu teilen.

  1. Die gewünschte SRID ist beispielsweise 4152. Sie können "select * from ST_COORDINATE_SYSTEMS in Oracle ausführen. Das zurückgegebene Feld "Typ" ist Geographic. Wenn wir also das Koordinatensystem für unsere neue Feature-Class auswählen, wechseln Sie zu Geographic Coordinate Systems Beschreibung Colum wird uns einen Hinweis geben, wo dieses Koordinatensystem zu finden ist.
  2. Klicken Sie in ArcCatalog mit der rechten Maustaste auf die Datenbankverbindung > Neu > Feature-Class > Name angeben, klicken Sie dann auf Weiter > Geografische Koordinatensysteme erweitern, dann Nordamerika, wählen Sie NAD 1983 HARN aus, klicken Sie dann auf Weiter > Weiter > Wählen Sie Standard als Konfigurationsschlüsselwort, klicken Sie auf Nächstes > Fertigstellen
  3. Überprüfen Sie die Tabelle ST_SPATIAL_REFERENCE. Dort wird ein neuer Datensatz angezeigt.
  4. Sie können die Feature-Class gerne löschen. Wenn Sie die Feature-Class löschen, wird der Datensatz in der Tabelle ST_SPATIAL_REFERENCE nicht gelöscht

Dies funktionierte in ArcSDE 10.0, aber ich habe nichts anderes getestet. Ich gehe davon aus, dass es genauso funktioniert, wenn ich mir die Dokumentation ansehe. Beachten Sie hierbei, dass SRID nur eine beliebige Zahl für diese Zeile in der Tabelle ST_Spatial_References ist. Es bedeutet nichts außerhalb dieser Tabelle. Die SRID muss nicht mit der CS_ID übereinstimmen. Wenn wir also auf 10.2.2 aktualisieren, müssen wir daran denken, die SRIDs in der Tabelle zu überprüfen, um zu sehen, ob sie sich geändert haben, und unsere SQL-Ansichten entsprechend ändern.

Ich habe die Schritte zum Erstellen einer neuen Feature-Class in SDE mit dem gewünschten Koordinatensystem befolgt (GCS_North_American_1983_HARN - 4152). Unser endgültiges SQL für 10.0 verwendet 57 für SRID, was nur für unsere spezielle SDE-Datenbank gilt.


1 Antwort 1

Es hört sich so an, als ob Sie nach einer Nearest Neighbor-Implementierung suchen - Oracle bietet den Spatial-Operator SDO_NN .

Dies bringt Sie nur so weit, dass es den nächsten Punkt zu einem Polygon findet, aber es garantiert nicht, dass sich keine Polygone zwischen Ihrem Punkt und Ihrem Zielpolygon befinden. Ich vermute, wenn Sie dies sicherstellen wollen, müssen Sie kreativ werden.

  1. Verwenden Sie SDO_NN, um den oder die nächsten Punkte zu erhalten
  2. Verwenden Sie SDO_GEOM.SDO_CENTROID, um den Schwerpunkt des Polygons zu finden
  3. Erstellen Sie eine In-Query/In-Memory-SDO_GEOMETRY-Linie, die die beiden Punkte verbindet
  4. Verwenden Sie dies als Grundlage einer NOT EXISTS-Klausel, um Punkte auszuschließen, an denen ein Polygon diese Linie schneidet

Etwa das folgende ungetestete / nicht ganz fertige Beispiel, vielleicht:

Abhängig von Ihrem Datensatz/Ihrer Leistung möchten Sie dies möglicherweise in PL/SQL mithilfe von Sammlungen oder Schleifen tun.