Das Well-known Binary-Format von OGC für Geometrie
Das Well-known Binary-Format für Geometrie ist Teil der Simple Features-Spezifikation des Open Geospatial Consortium (OGC). Diese implementiert ein einfaches Speichermodell für Punkt-, Linien- und Polygon-Features mit X/Y-Koordinaten. Es bietet eine übertragbare Darstellung eines Geometriewertes in Form eines zusammenhängenden Datenstroms. Auf diese Weise können Geometriewerte zwischen einem ODBC-Client und einer Datenbank im Binärformat ausgetauscht werden. Sie werden dabei nicht komprimiert.
Der Well-known Binary-Speichertyp für Geometrie von OGC ist eine zweckgebundene Spezifikation, die nicht nur sehr schnell angenommen, sondern von vielen Nutzern zudem erweitert wurde, u. a. auch von Esri im Rahmen der Geodatabase-Unterstützung mit ArcGIS- und ArcSDE-Software.
Erzeugt wird der Well-known Binary-Speichertyp für Geometrie von OGC durch Serialisierung einer Geometrieinstanz als eine Folge numerischer Typen aus dem Satz {Unsigned Integer, Double} und durch Serialisierung jedes numerischen Typs als eine Folge von Byte mit einer von zwei sorgfältig definierten, standardmäßigen Binärdarstellungen für numerische Typen (NDR oder XDR).
![Detailinformationen Detailinformationen](rsrc/divein.png)
XDR steht für eXtended Data Representation. XDR ist ein IETF-Standard des Repräsentations-Layers im OSI-Modell. Mithilfe von XDR können Daten unabhängig übertragen werden, sodass eine Datenübertragung zwischen verschiedenen Computersystemen ermöglicht wird. NDR steht für Network Data Representation. Es handelt sich hierbei um eine Implementierung des Repräsentations-Layers im OSI-Modell.
Die spezifische Binärkodierung, die von einem Geometriedatenstrom verwendet wird, wird durch einen 1-Byte-Tag vor den serialisierten Bytes beschrieben. Der einzige Unterschied zwischen den beiden Geometriekodierungen ist die Bytereihenfolge. Die XDR-Kodierung ist ein Big-Endian, während die NDR-Kodierung ein Little-Endian ist. Dies bedeutet, dass die Repräsentation einer Ganzzahl ohne Vorzeichen (ein 32-Bit-Datentyp (4 Byte), der eine nicht negative Ganzzahl im Bereich [0, 4294967295] kodiert) in der XDR-Kodierung ein Big-Endian ist, ebenso wie die XDR-Kodierungsrepräsentation eines Double-Wertes (ein 64-Bit-Datentyp mit doppelter Genauigkeit (8 Byte), der eine Zahl mit doppelter Genauigkeit im Format IEEE 754 für doppelte Genauigkeit kodiert). Im Gegensatz dazu ist die NDR-Repräsentation einer Ganzzahl ohne Vorzeichen ein Little-Endian (das am wenigsten wichtige Byte steht vorne), ebenso wie die NDR-Repräsentation eines Double-Wertes.
Ganzzahlen ohne Vorzeichen und Double-Werte können problemlos zwischen den Datentypen NDR und XDR konvertiert werden, indem die Bytes in jeder Ganzzahl ohne Vorzeichen bzw. in jedem Double-Wert des Datenstroms umgekehrt werden.
Dieser Geometriespeichertyp kann für Geodatabases in Oracle oder SQL Server verwendet werden, um zweidimensionale Geometrie zu speichern. Im Well-known Binary-Format von OGC gespeicherte Feature-Classes bestehen ebenfalls aus drei Tabellen: Business-Tabelle, Feature-Tabelle und räumliche Indextabelle. Dies sind die gleichen Tabellen, die auch für Feature-Classes im ArcSDE Compressed Binary-Format verwendet werden.
Die Business-Tabelle enthält Attribute und eine räumliche Spalte. Die räumliche Spalte dient als Schlüssel für die Feature-Tabelle und die räumliche Indextabelle.
Die Beziehung zwischen der Business-Tabelle und der Feature-Tabelle wird durch die räumliche Spalte und die FID-Spalte (Feature-ID) gesteuert. Dieser Schlüssel, der von ArcGIS verwaltet wird, ist eindeutig.
Wenn Sie einen Großteil der Feature-Class-Daten im Well-known Binary-Format von OGC speichern möchten, sollten Sie den Wert des Parameters GEOMETRY_STORAGE im Konfigurationsschlüsselwort DEFAULTS der DBTUNE-Tabelle in OGCWKB ändern. Möchten Sie hingegen nur einige wenige Feature-Classes im Well-known Binary-Format von OGC speichern, können Sie beim Erstellen dieser Feature-Classes stattdessen das Konfigurationsschlüsselwort WKB_GEOMETRY angeben.
Eine Beschreibung des Datenstroms von Well-known Binary-Geometrie (WKB)
Der Grundbaustein des Well-known Binary-Formats für Geometrie ist der Datenstrom für einen Punkt, der aus zwei Double-Werten besteht. Der Datenstrom für andere Geometrien wird mithilfe der Datenströme für bereits definierte Geometrien erstellt. Im Folgenden finden Sie eine Definition des Datenstroms:
Definition der Basistypen
byte: 1 Byte
uint32: 32-Bit-Ganzzahl ohne Vorzeichen (4 Byte)
double: Zahl mit doppelter Genauigkeit (8 Byte)
Building Blocks: Point, LinearRing
Point {
double x;
double y;
};
LinearRing {
uint32 numPoints;
Point points[numPoints];
}
enum wkbGeometryType {
wkbPoint = 1,
wkbLineString = 2,
wkbPolygon = 3,
wkbMultiPoint = 4,
wkbMultiLineString = 5,
wkbMultiPolygon = 6,
wkbGeometryCollection = 7
};
enum wkbByteOrder {
wkbXDR = 0, Big Endian
wkbNDR = 1 Little Endian
};
WKBPoint {
byte byteOrder;
uint32 wkbType; 1
Point point;
}
WKBLineString {
byte byteOrder;
uint32 wkbType; 2
uint32 numPoints;
Point points[numPoints];
}
WKBPolygon {
byte byteOrder;
uint32 wkbType; 3
uint32 numRings;
LinearRing rings[numRings];
}
WKBMultiPoint {
byte byteOrder;
uint32 wkbType; 4
uint32 num_wkbPoints;
WKBPoint WKBPoints[num_wkbPoints];
}
WKBMultiLineString {
byte byteOrder;
uint32 wkbType; 5
uint32 num_wkbLineStrings;
WKBLineString WKBLineStrings[num_wkbLineStrings];
}
wkbMultiPolygon {
byte byteOrder;
uint32 wkbType; 6
uint32 num_wkbPolygons;
WKBPolygon wkbPolygons[num_wkbPolygons];
}
WKBGeometry {
union {
WKBPoint point;
WKBLineString linestring;
WKBPolygon polygon;
WKBGeometryCollection collection;
WKBMultiPoint mpoint;
WKBMultiLineString mlinestring;
WKBMultiPolygon mpolygon;
}
};
WKBGeometryCollection {
byte byte_order;
uint32 wkbType; 7
uint32 num_wkbGeometries;
WKBGeometry wkbGeometries[num_wkbGeometries]
}
Merkmale des Well-known Binary-Formats für Geometrie
Das Well-known Binary-Format für Geometrie dient zur Darstellung von Instanzen der im Geometrieobjektmodell und in der Open Geospatial Abstract Specification beschriebenen Geometrietypen.
Diese Merkmale wirken sich auf Ringe, Polygone und Multipolygone wie folgt aus:
- Lineare Ringe: Ringe sind einfache, geschlossene Formen, d. h. lineare Ringe können sich nicht selbst schneiden.
- Polygone: Zwei lineare Ringe innerhalb der Grenzen eines Polygons dürfen einander nicht kreuzen. Die linearen Ringe innerhalb der Polygongrenzen dürfen sich maximal an einem Punkt schneiden, jedoch nicht in Form einer Tangente.
- Multipolygone: Die Innenflächen von zwei Polygonen, die Teil eines Multipolygons sind, dürfen sich nicht schneiden. Die Grenzen von zwei Polygonen, die Teil eines Multipolygons sind, dürfen sich nur an einer endlichen Anzahl von Punkten berühren.