DB2 Spatial Extender tiene varias funciones que generan geometrías a partir de representaciones binarias:
La representación de binario conocido es una corriente continua de bytes. Permite intercambiar una geometría entre un cliente ODBC y una base de datos SQL en formato binario. Puesto que estas funciones de geometría necesitan la definición de estructuras de lenguaje de programación C para correlacionar la representación binaria, están destinadas a ser utilizadas dentro de un programa de lenguaje de tercera generación (3GL). No se ajustan a un entorno de lenguaje de cuarta generación (4GL). La función ST_AsBinary convierte un valor de geometría existente en una representación de binario conocido.
La representación de binario conocido correspondiente a la geometría se obtiene serializando una instancia de la geometría como una secuencia de tipos numéricos. Estos tipos se extraen del grupo (entero sin signo, doble), y luego cada tipo numérico se serializa como una secuencia de bytes. Los tipos se serializan utilizando una de las dos representaciones de binario, estándar y bien definido para tipos numéricos (NDR, XDR). Un identificador de un byte que precede los bytes serializados describe la codificación específica de binario (NDR o XDR) utilizada para una corriente de bytes de geometría. La única diferencia entre las dos codificaciones de geometría es el orden de uno de los bytes: la codificación XDR es Big Endian; la codificación NDR es Little Endian.
Un entero sin signo es un tipo de datos de 32 bits (4 bytes) que codifica un entero no negativo dentro del rango [0, 4294967295].
Un doble es un tipo de datos de doble precisión de 64 bits (8 bytes) que codifica un número de doble precisión utilizando el formato de doble precisión IEEE 754.
Estas definiciones son comunes a XDR y a NDR.
La representación XDR de un entero sin signo es Big Endian (primero el byte más significativo).
La representación XDR de un doble es Big Endian (el bit de signo es el primer byte).
La representación NDR de un entero sin signo es Little Endian (primero el byte menos significativo).
La representación NDR de un doble es Little Endian (el bit de signo es el último byte).
La conversión entre los tipos de datos NDR y XDR para enteros sin signo y dobles es una operación sencilla. Se debe invertir el orden de los bytes dentro de cada entero sin signo o doble de la corriente de bytes.
Esta sección describe la representación de binario conocido correspondiente a una geometría. El componente básico es la corriente de bytes correspondiente a un punto, que consta de dos dobles. Las corrientes de bytes de otras geometrías se crean utilizando las corrientes de bytes correspondientes a geometrías que ya están definidas.
// Definiciones de tipo básico // byte : 1 byte // uint32 : entero sin signo de 32 bits (4 bytes) // double : número de doble precisión (8 bytes) // Componentes básicos : 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 siguiente figura muestra una representación NDR.
Figura 39. Representación en formato NDR. (B=1) de tipo polígono (T=3) con 2 lineales (NR=2), cada anillo tiene 3 puntos (NP=3).
![]() |
La representación de binario conocido correspondiente a una geometría está diseñada para representar instancias de los tipos de geometrías descritos en el Modelo de objetos geometría y en la Especificación OpenGIS Abstract.
Estas declaraciones implican lo siguiente para anillos, polígonos y varios polígonos: