Guía y consulta del usuario

Las representaciones de binario conocido (WKB) de OGC

DB2 Spatial Extender tiene varias funciones que generan geometrías a partir de representaciones binarias:

ST_GeomFromWKB
Crea una geometría a partir de una representación WKB de cualquier tipo de geometría.

ST_PointFromWKB
Crea un punto a partir de una representación WKB de punto.

ST_LineFromWKB
Crea una serie lineal a partir de una representación WKB de serie lineal.

ST_PolyFromWKB
Crea un polígono a partir de una representación WKB de polígono.

ST_MPointFromWKB
Crea una geometría varios puntos a partir de una representación WKB de varios puntos.

ST_MLineFromWKB
Crea una geometría varias series lineales a partir de una representación WKB de varias series lineales.

ST_MPolyFromWKB
Crea una geometría varios polígonos a partir de una representación WKB de varios polígonos.

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.

Definiciones de tipos numéricos

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.

Codificación XDR (Big Endian) de tipos numéricos

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).

Codificación NDR (Little Endian) de tipos numéricos

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).

Conversión entre NDR y XDR

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.

Descripción de las corrientes de bytes WKBGeometry

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).


[Figura]

Declaraciones sobre la representación WKB

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:

Anillos lineales
Los anillos son sencillos y cerrados, lo que significa que los anillos lineales no pueden formar intersección con ellos mismos.

Polígonos
En el límite de un polígono no puede haber dos anillos lineales que se crucen entre sí. Los anillos lineales del límite de un polígono pueden formar intersección como máximo en un punto, pero sólo como una tangente.

Varios polígonos
Los interiores de dos polígonos que son elementos de una geometría varios polígonos no pueden formar intersección. Los límites de dos polígonos que son elementos de una geometría varios polígonos pueden tocarse sólo en un número finito de puntos.


[ Principio de página | Página anterior | Página siguiente | Contenido | Índice ]