DB2 Spatial Extender dispone di varie funzioni che generano geometrie dalle rappresentazioni in formato binario:
La rappresentazione WKB rappresenta un flusso di byte contiguo. Tale rappresentazione consente lo scambio tra un client ODBC e un database SQL in formato binario. Poiché queste funzioni della geometria richiedono che la definizione delle strutture di linguaggio di programmazione C corrispondano alla rappresentazione binaria, sono state progettate per l'utilizzo in un programma (3GL). Inoltre non sono adatte per un ambiente (4GL). La funzione ST_AsBinary converte un valore della geometria esistente in una rappresentazione WKB.
La rappresentazione WKB per la geometria si ottiene mediante la serializzazione di un'istanza geometrica in una sequenza di tipi numerici. Questi tipi si rilevano dal gruppo (unsigned integer, double), quindi ciascun tipo numerico è disposto in serie come sequenza di byte. I tipi vengono serializzati utilizzando una delle due rappresentazioni binarie standard definite per i tipi numerici (NDR, XDR). Una tag a un byte che precede i byte serializzati descrive la codifica binaria specifica (NDR o XDR) utilizzata per un flusso di byte della geometria. L'unica differenza tra le due codifiche di geometria è uno degli ordinamenti byte: la codifica XDR è Big Endian; la codifica NDR è Little Endian.
Un unsigned integer è un tipo di dati a 32 bit (4 byte) che codifica un valore integer non negativo nell'intervallo [0, 4294967295].
Un double è un tipo di dati di precisione doppia a 64 bit (8 byte) che codifica un numero di precisione doppia utilizzando il formato di precisione doppia IEEE 754.
Queste definizioni sono comuni per XDR e NDR.
La rappresentazione XDR di un unsigned integer è Big Endian (prima il byte più rilevante).
La rappresentazione XDR di un double è Big Endian (il bit di segno è il primo byte).
La rappresentazione NDR di un unsigned integer è Little Endian (prima i byte minori).
La rappresentazione NDR di un double è Little Endian (il bit di segno è l'ultimo byte).
La conversione tra i tipi di dati NDR e XDR per gli unsigned integer e i double è un'operazione semplice. Tale operazione comprende l'inversione dell'ordine di byte all'interno di ciascun unsigned integer o double del flusso di byte.
Questa sezione descrive la rappresentazione WKB per la geometria. Il blocco di creazione di base è il flusso di byte relativo a un punto che comprende due double. I flussi di byte per le altre geometrie vengono creati utilizzando i flussi di byte delle geometrie già definite.
// Basic Type definitions // byte : 1 byte // uint32 : 32 bit unsigned integer (4 bytes) // double : double precision number (8 bytes) // 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; } };
La seguente figura illustra una rappresentazione NDR.
Figura 39. Rappresentazione nel formato NDR. (B=1) di tipo poligono (T=3) con 2 lineari (NR=2), ciascun anello con 3 punti (NP=3).
![]() |
La rappresentazione WKB della geometria è progettata per rappresentare le istanze dei tipi di geometria descritti in Geometry Object Model e in OpenGIS Abstract Specification.
Queste asserzioni fanno riferimento agli anelli, i poligoni e i multipoligoni: