DB2 Spatial Extender hat verschiedene Funktionen, die Geometrien aus Binärdarstellungen generieren:
Die bekannte Binärdarstellung ist ein fortlaufender Byte-Datenstrom. Sie ermöglicht den Austausch der Geometrie zwischen einem ODBC-Client und einer SQL-Datenbank in binärer Form. Da diese Geometriefunktionen die Definition von C-Programmstrukturen für die Zuordnung der Binärdarstellung erfordert, sind diese Funktionen für Sprachen der dritten Generation (3GL) konzipiert. Für Umgebungen mit Sprachen der vierten Generation (4GL) sind diese Funktionen nicht geeignet. Die Funktion ST_AsBinary setzt eine vorhandene Geometrie um in eine Binärdarstellung.
Die bekannte Binärdarstellung für die Geometrie ergibt sich durch die Serialisierung eines Geometrieexemplars als Folge numerischer Typen. Diese Typen werden aus der Gruppe (unsigned integer, double) gezogen, und jeder numerische Typ wird als Folge von Bytes serialisiert. Die Typen werden mit einer der beiden rein definierten binären Standarddarstellungen für numerische Typen (NDR, XDR) serialisiert. Ein den serialisierten Bytes vorangestellter Ein-Byte-Befehl beschreibt die spezifische Binärcodierung (NDR oder XDR) für einen Geometrie-Bytestrom. Der einzige Unterschied zwischen den beiden Codierungen der Geometrie ist die Byteanordnung: Die XDR-Codierung entspricht Big Endian; die NDR-Codierung entspricht Little Endian.
Ein unsigned integer (ganze Zahl ohne Vorzeichen) ist ein 32-Bit-Datentyp (4 Byte), der eine nicht negative Ganzzahl im Bereich [0, 4294967295] codiert.
Ein double (Gleitkommazahl mit doppelter Genauigkeit) ist ein 64-Bit-Datentyp (8 Byte) mit doppelter Genauigkeit, der eine Zahl mit doppelter Genauigkeit mit dem IEEE 754 Double Precision Format codiert.
Diese Definitionen gelten sowohl für XDR als auch für NDR.
Die XDR-Darstellung eines unsigned integer ist Big Endian (das erste Byte ist das signifikanteste Byte).
Die XDR-Darstellung eines double ist Big Endian (das erste Bit ist das Vorzeichenbit).
Die XDR-Darstellung eines unsigned integer ist Little Endian (das erste Byte ist das am wenigsten signifikante Byte).
Die XDR-Darstellung eines double ist Little Endian (das letzte Bit ist das Vorzeichenbit).
Die Umsetzung zwischen den Datentypen NDR und XDR für unsigned integers und doubles ist eine einfache Operation. Sie umfaßt die Umkehrung der Byteanordnung innerhalb jedes unsigned integer oder double im Bytestrom.
Dieser Abschnitt beschreibt die bekannte Binärdarstellung für die Geometrie. Der Grundbaustein ist der Bytestrom für einen Punkt, der aus zwei doubles besteht. Die Byteströme für andere Geometrien werden mit den Byteströmen für bereits definierte Geometrien erstellt.
// Basic Type definitions // byte : 1 byte // uint32 : 32 bit unsigned integer (4 bytes) // double : double precision number (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, }; 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; WKBMultiPoint mpoint; WKBMultiLineString mlinestring; WKBMultiPolygon mpolygon; } };
Die folgende Abbildung zeigt eine NDR-Darstellung.
Abbildung 39. Darstellung im NDR-Format. (B=1) des Typs Polygon (T=3) mit 2 linears (NR=2), jeder Ring hat 3 Punkte (NP=3).
Die bekannte Binärdarstellung für die Geometrie ist für die Darstellung der Exemplare der Geometrietypen konzipiert; dies wird im Geometrie-Objektmodell und in der OpenGIS Abstract-Spezifikation beschrieben.
Diese Aussagen haben folgende Implikation für Ringe, Polygone und Multipolygone: