Geometrieüberprüfung für Tabellen mit "ST_Geometry"-Spalten
Die Geometrieüberprüfung wird vom "ST_Geometry"-Typ über die Bibliotheken "st_shapelib" (Oracle) und "st_geometry" bereitgestellt. Nachdem eine Tabelle erstellt wurde, werden die Daten überprüft, wenn Datensätze eingefügt oder aktualisiert werden.
Es gibt zwei Hauptmöglichkeiten, Daten in räumliche Tabellen einzufügen:
- Verwenden von Accessor-Funktionen und von mit diesen Funktionen erstellten Anwendungen
- Verwenden der ArcGIS-API und von mit dieser API erstellten Anwendungen
Accessor-Funktionen werden jeweils von den einzelnen Implementierungen räumlicher Datentypen definiert und können zum Überprüfen von Geometriedaten verschiedene Methoden verwenden. Die "ST_Geometry"-Accessor-Funktionen und die ArcGIS-API von Esri verwenden zum Überprüfen der Geometriedaten die Esri Shape-Bibliothek. Räumliche Datentypen von Drittanbietern verfügen über eigene Accessor-Funktionen und verwenden eigene Shape-Überprüfungsregeln. Die Shape-Überprüfungsregeln für räumliche Datentypen wie "SDO_Geometry", PostGIS-Geometrie und Microsoft SQL Server-Geometrie oder -Geographie finden Sie daher in der jeweiligen Dokumentation von Oracle, PostGIS oder SQL Server.
Die folgenden Regeln gelten für die Esri Shape-Bibliothek und somit auch für die Esri API und "ST_Geometry"-Accessor-Funktionen.
Überprüfungsregeln für Punkt-Shapes
-
Die Fläche und die Länge von Punkten werden auf 0,0 festgelegt.
-
Der Envelope eines einzelnen Punkts ist gleich den XY-Werten des Punkts.
- Der Envelope eines Multipart-Punkt-Shapes wird auf das kleinste umgebende Rechteck festgelegt.
Überprüfungsregeln für einfache Linien oder Linestrings
- Doppelte sequenzielle Punkte werden gelöscht.
- Jedes Element muss mindestens zwei verschiedene Punkte haben.
- Kein Teil darf sich selbst schneiden. Die Ausgangs- und Endpunkte können gleich sein, aber der sich ergebende Ring wird nicht als Flächen-Shape behandelt.
- Teile dürfen sich an den Endpunkten berühren.
- Die Länge ist die Summe aller Teile.
Überprüfungsregeln für Linien oder Spaghetti-Zeichenfolgen
- Linien dürfen sich schneiden.
- Jedes Element muss mindestens zwei verschiedene Punkte haben.
- Doppelte sequenzielle Punkte werden gelöscht.
- Die Länge ist die Summe aller Teile.
Überprüfungsregeln und Vorgänge für Flächen-Shapes
- Doppelte sequenzielle Vorkommen eines Koordinatenpunkts werden gelöscht.
- Dangles werden gelöscht.
- Für Liniensegmente wird überprüft, ob sie geschlossen sind (Z-Koordinaten an Start- und Endpunkten müssen gleich sein) und sich nicht schneiden.
- Bei Flächen-Shapes mit Löchern müssen sich die Löcher vollständig innerhalb der äußeren Grenze befinden. ArcSDE entfernt alle Löcher, die außerhalb der äußeren Grenze liegen.
- Ein Loch, das eine äußere Grenze an einem einzelnen gemeinsamen Punkt berührt, wird in eine Inversion des Flächen-Shapes konvertiert.
- Mehrere Löcher, die sich an gemeinsamen Punkten berühren, werden zu einem einzelnen Loch kombiniert.
- Multipart-Flächen-Shapes dürfen sich nicht schneiden. Zwei Teile dürfen sich jedoch an einem Punkt berühren.
- Multipart-Flächen-Shapes dürfen keine gemeinsame Grenze haben. Gemeinsame Grenzen werden zusammengeführt.
- Falls zwei Ringe über eine gemeinsame Grenze verfügen, werden sie zu einem Ring zusammengeführt.
- Der gesamte Geometrieumfang, einschließlich der Grenzen aller Löcher in Kreisringpolygonen, wird berechnet und als Länge der Geometrie gespeichert.
- Die Fläche wird berechnet.
- Der Envelope wird berechnet.
- Die Punkte eines Flächen-Shapes werden gegen den Uhrzeigersinn gespeichert, obwohl die ArcSDE-Software Punkte in beiden Richtungen zurückgeben kann. Wenn Sie ein Flächen-Shape erzeugen, das Koordinaten im Uhrzeigersinn enthält, ändert ArcSDE die Rotation, um sicherzustellen, dass die Koordinatenliste eine Richtung gegen den Uhrzeigersinn aufweist.
In diesem Beispiel ist der Startpunkt "a", und die richtige Koordinatenbeschreibung lautet "a,b,c,d,a".
- Ein Flächen-Shape kann Inversionen aufweisen. Dabei handelt es sich um Leerräume im Flächen-Shape, die die äußere Grenze berühren.
- Umgekehrte Flächen-Shapes weisen einen inneren Ring auf, der die äußere Grenze berührt. Diese werden nicht als Kreisringpolygone angesehen.
- Wenn ein Flächen-Shape ein Kreisringloch hat, wird die äußere Grenze zuerst aufgeführt.
Die Punkte der Löcher werden in entgegengesetzter Richtung zur äußeren Grenze gespeichert.
In der folgenden Abbildung wird die äußere Grenze als "a,b,c,d,a" beschrieben, und das Loch wird als "e,f,g,h,e" beschrieben. In der Koordinatenliste wird das Flächen-Shape als "a,b,c,d,a,e,f,g,h,e" gespeichert.
- Wenn sich zwei Löcher an einem Punkt berühren, werden sie als ein Loch behandelt, nicht als zwei.
In diesem Beispiel sind die zwei inneren Flächen ein einzelnes Loch, weil sie den gemeinsamen Punkt "g" aufweisen.
- Die Kombination aus Flächen-Shapes und Flächen-Shapes mit Löchern kann relativ komplex werden. Dies ist in der nächsten Grafik dargestellt. Die äußere Grenze ist ein See mit einer Insel. Die Insel verfügt über einen kleinen See.
Es ist möglich, diese Features als ein, zwei oder drei Shapes darzustellen. Sie können jedes Feature auch getrennt speichern. Der größere See ist ein Kreisringpolygon. Die Grenze des großen Sees ist die äußere Grenze, während die Insel die Grenze des einzelnen Kreisringlochs ist. Die Insel ist ebenfalls ein Kreisringpolygon. Die Grenze der Insel ist die äußere Grenze, und der kleine See ist das Loch. Der kleine See ist ein einzelnes Flächen-Shape.
Werden die Seen als die entscheidenden Features angesehen, steht ein Shape mit einem Loch für den großen See und ein zweites Shape für den kleinen See. Sie können zum Darstellen des Features auch ein Multipart-Flächen-Shape verwenden. Der erste Shape-Teil ist der große See mit einem Kreisringloch, das die Insel darstellt. Der zweite Teil ist der kleine See.
- Leere Shapes fungieren als Platzhalter. Dies ist eine Möglichkeit, eine Attributzeile ohne entsprechende Geometrie zu verwenden. Ein Beispiel, bei dem sich ein leeres Shape ergibt, ist eine Anforderung für den Schnittpunkt von zwei Flächen, die sich nicht schneiden.
Da sich die Flächen A und B nicht berühren, ergibt sich für eine Schnittpunktabfrage eine leere Geometrie.
- Shapes haben Dimensionen. Ein Shape, das nur über XY-Koordinaten verfügt, ist zweidimensional. Ein Shape, das über Z-Koordinaten oder Messwerte verfügt, ist dreidimensional. Außerdem kann ein Shape über einen leeren Messwert verfügen.
Die Raumbezugs-ID
Beim Einfügen eines Werts mit Koordinaten, die außerhalb der Grenzen der angegebenen Raumbezugs-ID (SRID) liegen, mit der die Tabelle erstellt wurde, schlägt die INSERT-Anweisung mit einer der folgenden Meldung fehl:
DBMS | Fehlermeldung |
---|---|
Oracle | ERROR at line 1: ORA-20004: Error generating shape from text (-112) ORA-06512: at "SDE.ST_GEOMETRY_SHAPELIB_PKG", line 42 ORA-06512: at "SDE.ST_POLYGON", line 69 ORA-06512: at line 1 |
PostgreSQL | ERROR: ESRI: error generating shape [-112]: |
Informix | SQL Error (-937): Coordinates out of bounds in ST_PolyFromText. |
DB2 | GSE3416N Coordinate out of bounds |