Referência e Manual do Usuário

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

Spatial Extender possui várias funções que geram figuras geométricas a partir de representações do modo binário:

ST_GeomFromWKB
Cria uma figura geométrica a partir de uma representação WKB de qualquer tipo de figura geométrica.

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 reconhecida é um fluxo contíguo de bytes. Ela permite que a figura geométrica sejam trocada entre um cliente ODBC e um banco de dados SQL no modo binário. Como estas funções de figura geométrica 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 figura geométrica existente numa representação do modo binário reconhecida.

A representação do modo binário reconhecido para figura geométrica é obtida pela serialização de uma instância da figura geométrica 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 figura geométrica. A única diferença entre as duas codificações da figura geométrica é 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 de 32 bits (4 bytes) que codifica um inteiro não negativo no intervalo [1, 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 de XDR de um duplo é Big Endian (bit de sinal é o primeiro bit).

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 figura geométrica. 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 figuras geométricas são construídos através de fluxos de bytes para figuras geométricas 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 figura geométrica foi projetada para representar as instâncias dos tipos de figura geométrica descritos no Modelo do Objeto de figura geométrica 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 ]