Referência e Guia do Usuário

As representações (WKB) do modo binário reconhecidas

DB2 Spatial Extender possui várias funções que geram geometrias a partir de representações do modo binário:

ST_GeomFromWKB
Cria uma geometria a partir de uma representação WKB de qualquer tipo de geometria.

ST_PointFromWKB
Cria um ponto a partir de uma representação de WKB.

ST_LineFromWKB
Cria uma cadeia de linhas a partir de uma representação de WKB.

ST_PolyFromWKB
Cria um polígono a partir de uma representação de WKB do polígono.

ST_MPointFromWKB
Cria um multiponto a partir de uma representação de WKB.

ST_MLineFromWKB
Cria uma cadeia de linhas múltiplas a partir de uma representação de WKB de cadeia de linhas múltiplas.

ST_MPolyFromWKB
Cria um multipolígono a partir de uma representação de WKB de multipolígono.

A representação do modo binário reconhecido é um fluxo contíguo de bytes. Ela permite que a geometria sejam trocada entre um cliente ODBC e um banco de dados SQL no modo binário. Como estas funções de geometria exigem a definição das estruturas da linguagem de programação para mapear a representação do modo binário, elas destinam-se ao uso dentro de um programa da linguagem de terceira geração (3GL). Elas não se adaptam ao ambiente da linguagem de quarta geração (4GL). A função ST_AsBinary converte um valor de geometria existente numa representação do modo binário reconhecida.

A representação do modo binário reconhecido para geometria é obtida pela serialização de uma instância da geometria como uma seqüência de tipos numéricos. Estes tipos são retirados do conjunto (inteiro não-assinado, duplo) e, cada tipo numérico é serializado como uma seqüência de bytes. Os tipos são serializados através de uma das representações padrão, do modo binário, bem-definidas para tipos numéricos (NDR, XDR). Uma tag de um byte que precede os bytes serializados descreve a codificação binária específica (NDR ou XDR) usada para um fluxo de bytes de geometria. A única diferença entre as duas codificações da geometria é uma da ordem de bytes: A codificação XDR é Big Endian; a codificação NDR é Little Endian.

Definições do tipo numérico

Um inteiro não-assinado é um tipo de dados (4 bytes) de 32 bits que codifica um inteiro não-negativo no intervalo [0, 4294967295].

Um duplo é um tipo de dados de precisão dupla de (8 bytes) e 64 bits que codifica um número de precisão dupla através do formato de precisão dupla 754 do IEEE.

Estas definições são comuns para XDR e NDR.

XDR (Big Endian) codificação de tipos numéricos

A representação XDR de um inteiro não-assinado é Big Endian (byte mais significativo primeiro).

A representação XDR de um duplo é Big Endian (bit de sinal é o primeiro byte).

NDR (Little Endian) codificação de tipos numéricos

A representação NDR de um inteiro não-assinado é Little Endian (byte menos significativo primeiro).

A representação NDR de um duplo é Little Endian (bit de sinal é o último byte).

Conversão entre NDR e XDR

A conversão entre os tipos de dados NDR e XDR para inteiros não-assinados e duplos é uma operação simples. Ela envolve a inversão da ordem de bytes dentro de cada inteiro não-assinado ou duplo no fluxo de bytes.

Descrição dos fluxos de bytes WKBGeometry

Esta seção descreve a representação do modo binário reconhecida para geometria. O bloco de construção básica é o fluxo de bytes para um ponto, que consiste em dois duplos. Os fluxos de bytes para outras geometrias são construídos através de fluxos de bytes para geometrias que já estejam definidas.

// Definições do tipo básico
// byte : 1 byte
// uint32 : inteiro não-assinado de 32 bits (4 bytes)
// double : número de precisão dupla (8 bytes)
 
// Construindo Blocos : Ponto, Anel Linear
 
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
  Ponto    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;
  }
};
 

A figura a seguir mostra uma representação NDR.

Figura 39. Representação no formato NDR. (B=1) do tipo polígono (T=3) com 2 lineares (NR=2), cada anel tendo 3 pontos (NP=3).


[Figura]

Assertivas para a representação WKB

A representação do modo binário reconhecida para geometria foi projetada para representar as instâncias dos tipos de geometria descritos no Modelo do Objeto de Geometria e Especificação do Abstrato da OpenGIS.

Estas assertiva implicam o seguinte para anéis, polígonos e multipolígonos:

Anéis lineares
Os anéis são simples e fechados, significando que os anéis lineares não podem fazer interseção entre si.

Polígonos
Dois anéis lineares no limite de um polígono não podem se cruzarem. Os anéis lineares no limite de um polígono podem fazer interseção no máximo em um único ponto, mas somente como tangente.

Multipolígonos
Os interiores de dois polígonos que são elementos de um multipolígono não podem fazer interseção. Os limites de qualquer polígono que seja elemento de um multipolígono podem tocar somente um número finito de pontos.


[ Início da Página | Página Anterior | Próxima Página | Índice | Índice Remissivo ]