Oracle Toleranz

Aus ProfilGlossar
Wechseln zu: Navigation, Suche
Für diese Seite gibt es Sicherheitseinschränkungen.

Im folgenden Artikel wird genauer erläutert, wie das Datenbankmanagementsystem Oracle mithilfe des Toleranzwertes Geometrien validiert und räumliche Abfragen durchführt.

Inhaltsverzeichnis

Oracle Toleranz und geometrische Genauigkeit

Oracle arbeitet bei räumlichen Funktionen mit Abstandkreisen, die um die jeweiligen Stützpunkte erstellt werden. Die Toleranz gibt in diesem Fall an, mit welchem Radius der Kreis um den Stützpunkt gebildet werden soll (Abbildung Oracle Toleranz).

Im Gegensatz dazu wird in profil c/s eine geometrischen Genauigkeit genutzt, deshalb werden die Sützpunkte entsprechend in der Mitte der Quadrate positioniert (Abbildung geometrische Genauigkeit).

Aufgrund des Unterschiedes muss die Oracle-Toleranz an die geometrische Genauigkeit angepasst werden. Um zu gewährleisten, das Geometrien, die in profil c/s valide sind, auch in Oracle als valide gewertet werden, muss der Toleranzkreis den Inkreis des Quadrates der geometrischen Genauigkeit bilden (Abbildung Zusammenhang Toleranz - Genauigkeit).

Aus diesem Grund muss die Toleranz immer die Hälfte der jeweils genutzten geometrischen Genauigkeit sein.

Toleranz = Geometrische Genauigkeit / 2

Vorlage:Absatz

Validierung von Geometrien

Eine Geometrie ist in profil c/s valide, wenn sie SFA konfrom ist und die entsprechenden Kriterien aus dem DK geometrischem Flächenmodell ab 2017 erfüllt.

Eine Geometrie ist in Oracle valide, wenn sie SFA konform ist und folgende Kriterien erfüllt:

  • Koordinatenangaben müssen in korrekter Reihenfolge angegeben sein
    • äußerer Ring entgegen des Uhrzeigersinns
    • innere Ringe im Uhrzeigersinn
  • die Distanz zwischen einer Linie und einem Stützpunkt, der kein Endpunkt dieser Linie ist, beträgt mehr als die angegebene Toleranz.

Beispielvalidierung an der engsten Stelle im Polygon

In den folgenden Abbildungen ist ein Beispielpolyon dargestellt, was eine enge Stelle im mittleren Bereich enthält. Diese Stelle wird in den anderen Bildern näher dargestellt. Zusätzlich werden entsprechende Fallbesipeiel dargestellt, denn wenn die nicht zum Stützpunkt gehörende Linie in Konstellation 1, 2 oder 3 entlanggeht, werden unterschieldiche Validierungsergebnisse entstehen. In beiden Fällen ist der Toleranzkreis von Oracle und das Raster der geometrischen Genauigkeit dargestellt. Die Unterschiede zwischen den Bildern sind nur die farblich hinterlegten Bereiche, jenachdem wo profil c/s und Oracle das Polygon als valide (grün) oder nicht valide (rot) bewerten.

Fallbeispiel profil c/s Oracle
1 nicht valide nicht valide
2 nicht valide valide
3 valide valide

Aus der Tabelle ist zu entnehmen, das mit dem richtigen Toleranzwert gewährleistet ist, das jede valide Geometrie in profil c/s auch in Oracle als valide angesehen wird.

Anmerkung: Dies gilt nicht umgekehrt, d.h. ein Polygon, welches in Oracle als valide gilt, wird nicht garantiert, dass dieses auch in profil c/s als valide betrachtet wird.

Räumliche Operatoren (Spatial Operators)

Die folgenden grundlegenden Operatoren werden in ihrem Aufbau und ihrer Funktionsweise erklärt. Zusätzlich wird der Bezug zum Toleranzwert dargestellt.

Wichtige Vorabinformationen

Um in Oracle die Verwendung von Entitäten mit räumlichen Eigenschaften zu gewährleisten, sind folgende Punkte zu beachten:

  1. Es wird eine entsprechende Geometriespalte mit dem Datentyp "SDO_GEOMETRY" benötigt.
  2. Ein räumlicher Index muss für die Tabelle vorhanden sein, welche mit der Geometriespalte gekoppelt ist.
  3. In der Metadatentabelle (USER_SDO_GEOM_METADATA) der Datenbank muss ein entsprechender Eintrag mit folgenden Informationen für die Tabelle vorhanden sein.
    • Tabellenname
    • Name der Geometriespalte
    • DIMINFO mit Informationen über Wertebereiche in Rechtswert/x und Hocherwert/y zuzüglich des jeweiligen Toleranzwertes
    • SRID mit dem Code für das zu nutzende Koordinatensystem


SDO_FILTER

<syntaxhighlight lang="sql">SDO_FILTER(geometry1, geometry2, param);</syntaxhighlight>

Erläuterung

Mit diesem Operator wird eine Bounding Box (BBOX) um die jeweilige Geometrie erzeugt, unabhängig von der angegebenen Toleranz. Mithilfe der BBOX wird getestet, ob die Geometrien sich schneiden oder berühren. Diese Operation wird auch als primärer Filter bezeichnet.

In der Abbildung sind drei mögliche Fälle dargestellt. Die obere Konstellation zeigt zwei sich schneidende BBOX, in der rechten Konstellation berühren sich die BBOX, nur in der linken Konstellation ist keine Berührung oder Schnittflächen zu erkennen. In den ersten zwei Fällen wäre der Rückgabewert "TRUE" und im letzten Fall "FALSE".

Folgende Schlüsselwörter können für den Parameter "param" genutzt werden:

optionale Schlüsselwörter mögliche Werte Beschreibung
min_resolution 0.1, 2, 5, ... Es werden nur Geometrien betrachtet, bei denen mindestens einer Seite der BBOX die Mindestseitenlänge besitzt.
max_resolution 0.1, 2, 5, ... Es werden nur Geometrien betrachtet, bei denen keine Seite der Bounding BBOX größer als der Maximalwert ist.

Nutzungsbeispiele

GeometrieMenge bedeuten in den folgenden Beispielen, dass es entweder eine einzige Geometrie oder eine Menge von Geometrien ist, d.h. gezielt eine Geometrie, eine Spalte oder einen Teil aus der Datenbank wählen.

  • Einfaches Beispiel ohne Paramter: SDO_FILTER(GeometrieMenge1, GeometrieMenge2);
  • Beispiel mit Parameter: SDO_FILTER(GeometrieMenge1, GeometrieMenge2, 'min_resolution=2');
  • Beispiel mit mehreren Parametern: SDO_FILTER(GeometrieMenge1, GeometrieMenge2, 'min_resolution=2.5 max_resolution=10');


in SELECT (gezieltes Testen von 2 Geometrien, Ausgabewert TRUE oder FALSE):

<syntaxhighlight lang="sql"> SELECT SDO_FILTER( t1.GEOMETRIE, t2.GEOMETRIE ) FROM tabelle1 t1 , tabelle1 t2 WHERE t1.id = 1 and t2.id = 2; </syntaxhighlight>

in WHERE (Testen von einer Geometrie mit einer Menge von Geometrien):

<syntaxhighlight lang="sql"> SELECT t.id, t.name FROM tabelle1 t, tabelle1 t1 WHERE t1.id = 5 AND SDO_FILTER( t.geometrie, t1.geometrie) = 'TRUE'; SELECT t.id, t.name FROM tabelle1 t, tabelle1 t1 WHERE t1.id = 5 AND SDO_FILTER( t.geometrie, t1.geometrie, 'min_resolution=3' ) = 'TRUE'; </syntaxhighlight>

SDO_RELATE

<syntaxhighlight lang="sql">SDO_RELATE(geometry1, geometry2, param);</syntaxhighlight>

Erläuterung

Bei der Nutzung dieses Operators wird vorab der SDO_FILTER Operator durchgeführt, deshalb wird SDO_RELATE als sekundärer Filter bezeichnet. Diese interne Kombination führt zu Laufzeitoptimieung, da schon einige Geometrien vorab aussortiert werden.

In dieser Funktion wird Rücksicht auf die angegebene Toleranz genommen. Ähnlich wie unter Punkt "Oracle Toleranz und geometrische Genauigkeit" beschrieben, werden entsprechende Toleranzkreise um die Punkte der jeweiligen Geometrien erzeugt (siehe Abbildung rechts). Damit werden entsprechende Schnittpunkte mit Rand der jeweils anderen Geometrie gesucht und für entsprechende Analysen verwendet, wenn diese zu nah sind.

In der Abbildung rechts sind die Toleranzkreise deutlich zu erkennen. Bei der oberen Konstellation wird keine Berührung festgestellt. Im Gegensatz dazu wird in der unteren Konstellation eine Berührung der Ränder aufgrund des fett dargestellten Toleranzkreises festgestellt. Deshalb ist im oberen Beispiel als Rückgabewert FALSE und im unteren TRUE zu erwarten.

Folgende Schlüsselwörter können für den Parameter "param" genutzt werden:

obligatorisches Schlüsselwort mögliche Werte Beschreibung
mask touch Die Ränder der Geometrien schneiden sich.
overlapbdydisjoint Das Innere einer Geometrie scheidet das Innere und den Rand einer anderen Geometrie.
overlapbdyintersect Der Rand und das Innere der Geometrien schneiden sich.
equal Räumlich identische Geometrien, wo der Rand und das Innere gleich sind.
inside Der Rand und das Innere liegen vollständig im Inneren einer anderen Geometrie.
coveredby Der Rand und das Innere liegt im Inneren einer anderen Geometrie, wobei sich Teile die Ränder sich schneiden können.
contains Im Inneren liegt vollständig der Rand und das Innere einer anderen Geometrie.
covers Im Inneren liegt der Rand und das Innere einer anderen Geometrie, wobei sich Teile der Ränder schneiden können.
anyinteract Die Geometrien sind nicht disjunkt.
on Der Rand und das Innere liegen auf dem Rand einer anderen Geometrie
optionale Schlüsselwörter mögliche Werte Beschreibung
min_resolution 0.1, 2, 5, ... Es werden nur Geometrien betrachtet, bei denen mindestens einer Seite der BBOX die Mindestseitenlänge besitzt.
max_resolution 0.1, 2, 5, ... Es werden nur Geometrien betrachtet, bei denen keine Seite der BBOX größer als der Maximalwert ist.

Nutzungsbeispiele

  • Einfaches Beispiel: SDO_RELATE(GeometrieMenge1, GeometrieMengeNr2, 'mask=touch');
  • Beispiel mit Parameter: SDO_RELATE(GeometrieMenge1, GeometrieMenge2, 'mask=inside max_resolution=3');
  • Beispiel mit mehreren Parametern: SDO_RELATE(GeometrieMenge1, GeometrieMenge2, 'mask=inside+touch min_resolution=1.5 max_resolution=20');

GeometrieMenge bedeuten in den Beispielen, dass es entweder eine einzige Geometrie oder eine Menge von Geometrien ist, d.h. gezielt eine Geometrie, eine Spalte oder Teile aus der Datenbank wählen.


in SELECT (gezieltes Testen von 2 Geometrien, Ausgabewert TRUE oder FALSE):

<syntaxhighlight lang="sql"> SELECT SDO_RELATE( t1.GEOMETRIE, t2.GEOMETRIE, 'mask=on' ) FROM tabelle1 t1 , tabelle1 t2 WHERE t1.id = 1 and t2.id = 2; </syntaxhighlight>

in WHERE (Testen von einer Geometrie mit einer Menge von Geometrien):

<syntaxhighlight lang="sql"> SELECT t.id, t.name FROM tabelle1 t, tabelle1 t1 WHERE t1.id = 5 AND SDO_RELATE( t.geometrie, t1.geometrie, 'mask=anyinteract') = 'TRUE'; SELECT t.id, t.name FROM tabelle1 t, tabelle1 t1 WHERE t1.id = 8 AND SDO_RELATE( t.geometrie, t1.geometrie, 'mask=touch min_resolution=1' ) = 'TRUE'; </syntaxhighlight>