Referência e Guia do Usuário

As representações de shape ESRI

O DB2 Spatial Extender possui várias funções que geram geometrias a partir de representações de shape ESRI. Além da representação bidimensional suportada pela representação do modo binário de GIS aberto, representação de shape ESRI também suporta as coordenadas Z opcionais e medidas. As seguintes funções geram geometria a partir de um shape ESRI:

ST_GeometryFromShape
Cria uma geometria a partir de uma representação de shape de qualquer tipo de geometria.

ST_PointFromShape
Cria um ponto a partir de uma representação de shape.

ST_LineFromShape
Cria uma cadeia de linhas a partir de uma representação de shape.

ST_PolyFromShape
Cria um polígono a partir de uma representação de shape do polígono.

ST_MPointFromShape
Cria um multiponto a partir de uma representação do shape.

ST_MLineFromShape
Cria uma cadeia de linhas múltiplas a partir de uma representação de shape da cadeia de linhas múltiplas.

ST_MPolyFromShape
Cria um multipolígono a partir de uma representação de shape de multipolígono.

A sintaxe geral destas funções é a mesma. O primeiro argumento é a representação de shape fornecida como um tipo de dados do objeto grande do modo binário (BLOB). O segundo argumento é o identificador de referência espacial para atribuir a geometria. A função GeometryFromShape tem a seguinte sintaxe:

db2gse.GeometryFromShape(ShapeGeometry Blob(1M), cr db2gse.coordref)

Como estas funções de shape exigem a definição das estruturas da linguagem de programação C para mapear a representação binária, elas destinam-se ao uso dentro de um programa 3GL e não se adequam a um ambiente 4GL. A função AsShape converte o valor da função em uma representação de shape ESRI.

Um tipo de shape 0 indica um shape nulo, sem dados geométricos para o shape.
Valor Tipo de Shape
0 Shape Nulo
1 Ponto
3* PoliLinha
5 Polígono
8 MultiPonto
11 PontoZ
13 PoliLinhaZ
15 PolígonoZ
18 MultiPontoZ
21 PontoM
23 PoliLinhaM
25 PolígonoM
28 MultiPontoM
Nota:* Os tipos de shapes não especificados acima (2, 4, 6 etc.) são reservados para uso futuro.

Tipos de shapes no espaço XY

Ponto

Um ponto consiste num par de coordenadas de precisão dupla na ordem X, Y.

Tabela 66.
Conteúdo do fluxo de bytes do ponto

Posição

Campo

Valor

Tipo

Número

Solicitar

Byte 0

Tipo de Shape

1

Inteiro

1

Little

Byte 4

X

X

Duplo

1

Little

Byte 12

Y

Y

Duplo

1

Little

MultiPonto

Um MultiPonto consiste numa coleção de pontos. O quadro delimitador é armazenado na ordem Xmin, Ymin, Xmax, Ymax.

Tabela 67.
Conteúdo do fluxo de bytes MultiPonto

Posição

Campo

Valor

Tipo

Número

Solicitar

Byte 0

Tipo de Shape

8

Inteiro

1

Little

Byte 4

Caixa

Caixa

Duplo

4

Little

Byte 36

NumPoints

NumPoints

Inteiro

1

Little

Byte 40

Pontos

Pontos

Ponto

NumPoints

Little

Polilinha

Uma Polilinha é um conjunto ordenado de vértices que consiste em uma ou mais partes. Uma parte é uma seqüência conectada de dois ou mais pontos. Os pontos podem ou não estar conectados entre si. As partes podem ou não fazer interseção entre si.

Como esta especificação não proíbe pontos consecutivos com coordenadas idênticas, os leitores do arquivo de shape deverão manipular tais casos. Por outro lado, as partes degeneradas, de comprimento zero que poderão resultar não são permitidas.

Os campos para uma Polilinha são:

Quadro
O quadro delimitador da Polilinha armazenada na ordem Xmin, Ymin, Xmax, Ymax.

NumParts
O número de partes na Polilinha.

NumPoints
O número total de pontos para todas as partes.

Partes
Uma matriz do comprimento NumParts. Cada Polilinha armazena o índice de seu primeiro ponto na matriz de pontos. Os índices matriciais são relativos a 0.

Pontos
Uma matriz do comprimento NumPoints. Os pontos de cada parte na Polilinha são armazenados de ponto a ponto. Os pontos para a parte 2 seguem os pontos da parte 1 etc. A matriz das partes mantém o índice matricial do ponto inicial para cada parte. Não existe delimitador na matriz de pontos entre as partes.

Tabela 68.
Conteúdo do fluxo de bytes Polilinha

Posição

Campo

Valor

Tipo

Número

Solicitar

Byte 0

Tipo de Shape

3

Inteiro

1

Little

Byte 4

Caixa

Caixa

Duplo

4

Little

Byte 36

NumParts

NumParts

Inteiro

1

Little

Byte 40

NumPoints

NumPoints

Inteiro

1

Little

Byte 44

Partes

Partes

Inteiro

NumParts

Little

Byte X

Pontos

Pontos

Ponto

NumPoints

Little

Nota:X = 44 + 4 * NumParts.

Polígono

Um polígono consiste num ou mais anéis. Um anel é uma seqüência conectada de quatro ou mais pontos que forma um loop fechado, sem auto-interseção. Um polígono pode conter vários anéis externos. A ordem dos vértices ou orientação de um anel indica qual lado do anel é o interior do polígono. A área à direita do observador que caminha pelo anel na ordem do vértice é a área dentro do polígono. Os vértices de anéis que definem os orifícios nos polígonos estão no sentido anti-horário. Os vértices de um único polígono de anel, portanto, estão sempre no sentido horário. Os anéis de um polígono são denominados partes.

Como esta especificação não proíbe pontos consecutivos com coordenadas idênticas, os leitores do arquivo de shape deverão manipular tais casos. Por outro lado, as partes degeneradas, de comprimento zero ou de área zero que poderão resultar não são permitidas.

Os campos para um polígono são:

Quadro
O quadro delimitador do polígono armazenado na ordem Xmin, Ymin, Xmax, Ymax.

NumParts
O número de anéis no polígono.

NumPoints
O número total de pontos para todos os anéis.

Partes
Uma matriz do comprimento NumParts. Para cada anel, armazena o índice de seu primeiro ponto na matriz de pontos. Os índices matriciais são relativos a 0.

Pontos
Uma matriz do comprimento NumPoints. Os pontos de cada anel no polígono são armazenados de ponto a ponto. Os pontos do Anel 2 seguem os pontos do Anel 1 etc. A matriz das partes mantém o índice matricial do ponto inicial para cada anel. Não existe delimitador na matriz de pontos entre anéis.

Avisos importantes sobres os shapes do polígono:

Um Exemplo de Instância de Polígono

Figura 40. Um polígono com um orifício e oito vértices


top

Figura 41. Conteúdo do fluxo de bytes do polígono. NumParts igual a 2 e NumPoints igual a 10. Observe que a ordem dos pontos para o polígono (orifício) do donut é inversa.


top


Tabela 69.
Conteúdo do fluxo de dados do polígono

Posição

Campo

Valor

Tipo

Número

Solicitar

Byte 0

Tipo de Shape

5

Inteiro

1

Little

Byte 4

Caixa

Caixa

Duplo

4

Little

Byte 36

NumParts

NumParts

Inteiro

1

Little

Byte 40

NumPoints

NumPoints

Inteiro

1

Little

Byte 44

Partes

Partes

Inteiro

NumParts

Little

Byte X

Pontos

Pontos

Ponto

NumPoints

Little

Nota:X = 44 + 4 * NumParts.

Tipos de shapes medidos no espaço XY

PointM

Um PointM consiste num par de coordenadas de precisão dupla na ordem X, Y, mais uma medida M.

Tabela 70.
Conteúdo do fluxo de bytes do pontoM

Posição

Campo

Valor

Tipo

Número

Solicitar

Byte 0

Tipo de Shape

21

Inteiro

1

Little

Byte 4

X

X

Duplo

1

Little

Byte 12

Y

Y

Duplo

1

Little

Byte 20

M

M

Duplo

1

Little

MultiPontoM

Os campos para um MultiPontoM são:

Quadro
O quadro delimitador do MultipontoM armazenado na ordem Xmin, Ymin, Xmax, Ymax.

NumPoints
O número de pontos.

Pontos
Uma matriz de Pontos do comprimento NumPoints.

NumMs
O número de Medidas que seguem. NumMs pode ter somente dois valores zero se nenhuma Medida seguir este campo; ou igual a NumPoints se Medidas estiverem presentes.

Faixa M
As medidas mínimas e máximas para o MultipontoM armazenado na ordem Mmin, Mmax.

Matriz M
Uma matriz de Medidas do comprimento NumPoints.

Tabela 71.
Conteúdo do fluxo de bytes do MultipontoM

Posição

Campo

Valor

Tipo

Número

Solicitar

Byte 0

Tipo de Shape

28

Inteiro

1

Little

Byte 4

Caixa

Caixa

Duplo

4

Little

Byte 36

NumPoints

NumPoints

Inteiro

1

Little

Byte 40

Pontos

Pontos

Ponto

NumPoints

Little

Byte X

NumMs

NumMs

Inteiro

1

Little

Byte X+4*

Mmin

Mmin

Duplo

1

Little

Byte X+12*

Mmax

Mmax

Duplo

1

Little

Byte X+20*

Marray

Marray

Duplo

NumPoints

Little

Notas:

  1. X = 40 + (16 * NumPoints)

  2. * opcional

PolilinhaM

Um arquivo de shape PolilinhaM consiste em uma ou mais partes. Uma parte é uma seqüência conectada de dois ou mais pontos. As partes podem ou não estar conectadas entre si. As partes podem ou não fazer interseção entre si.

Os campos para uma PolilinhaM são:

Quadro
O quadro delimitador da PolilinhaM armazenado na ordem Xmin, Ymin, Xmax, Ymax.

NumParts
O número de partes na PolilinhaM.

NumPoints
O número total de pontos para todas as partes.

Partes
Uma matriz do comprimento NumParts. Para cada parte, armazena o índice de seu primeiro ponto na matriz de pontos. Os índices matriciais são relativos a 0.

Pontos
Uma matriz do comprimento NumPoints. Os pontos de cada parte na PolilinhaM são armazenados de ponto a ponto. Os pontos para a parte 2 seguem os pontos da parte 1 etc. A matriz das partes mantém o índice matricial do ponto inicial para cada parte. Não existe delimitador na matriz de pontos entre as partes.

NumMs
O número de Medidas que seguem. NumMs pode ter somente dois valores zero se nenhuma Medida seguir este campo; ou igual a NumPoints se Medidas estiverem presentes.

Faixa M
As medidas mínimas e máximas para a PolilinhaM armazenada na ordem Mmin, Mmax.

Matriz M
Uma matriz do comprimento NumPoints. As medidas de cada parte na PolilinhaM são armazenadas de ponto a ponto. As medidas para a parte 2 seguem as medidas da parte 1 etc. A matriz das partes mantém o índice matricial do ponto inicial para cada parte. Não existe delimitador na matriz de medida entre as partes.

Tabela 72.
Conteúdo do fluxo de bytes da PolilinhaM

Posição

Campo

Valor

Tipo

Número

Solicitar

Byte 0

Tipo de Shape

13

Inteiro

1

Little

Byte 4

Caixa

Caixa

Duplo

4

Little

Byte 36

NumParts

NumParts

Inteiro

1

Little

Byte 40

NumPoints

NumPoints

Inteiro

1

Little

Byte 44

Partes

Partes

Inteiro

NumParts

Little

Byte X

Pontos

Pontos

Ponto

NumPoints

Little

Byte Y

NumMs

NumMs

Inteiro

1

Little

Byte Y+4*

Mmin

Mmin

Duplo

1

Little

Byte Y+12*

Mmax

Mmax

Duplo

1

Little

Byte Y+20*

Marray

Marray

Duplo

NumPoints

Little

Notas:

  1. X = 44 + (4 * NumParts), Y = X + (16 * NumPoints).

  2. * opcional

PolígonoM

Um PolígonoM consiste num número de anéis. Um anel é um loop fechado, sem auto-interseção. Observe que interseções são calculadas no espaço XY, não no espaço XYM. Um PolígonoM pode conter vários anéis externos. Os anéis de um PolígonoM são denominados partes.

Os campos para um PolígonoM são:

Quadro
O quadro delimitador do PolígonoM armazenado na ordem Xmin, Ymin, Xmax, Ymax.

NumParts
O número de anéis no PolígonoM.

NumPoints
O número total de pontos para todos os anéis.

Partes
Uma matriz do comprimento NumParts. Para cada anel, armazena o índice de seu primeiro ponto na matriz de pontos. Os índices matriciais são relativos a 0.

Pontos
Uma matriz do comprimento NumPoints. Os pontos de cada anel no PolígonoM são armazenados de ponto a ponto. Os pontos do Anel 2 seguem os pontos do Anel 1 etc. A matriz das partes mantém o índice matricial do ponto inicial para cada anel. Não existe delimitador na matriz de pontos entre anéis.

NumMs
O número de Medidas que seguem. NumMs pode ter somente dois valores zero se nenhuma Medida seguir este campo, ou igual a NumPoints se Medidas estiverem presentes.

Faixa M
As medidas mínimas e máximas para o PolígonoM armazenado na ordem Mmin, Mmax.

Matriz M
Uma matriz do comprimento NumPoints. As medidas de cada anel no PolígonoM são armazenados de ponto a ponto. As medidas do Anel 2 seguem os pontos do Anel 1 etc. A matriz das partes mantém o índice matricial da medida inicial para cada anel. Não existe delimitador na matriz de medida entre os anéis.

Avisos importantes sobre os shapes do PolígonoM:

Tabela 73.
Conteúdo do fluxo de bytes do PolígonoM

Posição

Campo

Valor

Tipo

Número

Solicitar

Byte 0

Tipo de Shape

15

Inteiro

1

Little

Byte 4

Caixa

Caixa

Duplo

4

Little

Byte 36

NumParts

NumParts

Inteiro

1

Little

Byte 40

NumPoints

NumPoints

Inteiro

1

Little

Byte 44

Partes

Partes

Inteiro

NumParts

Little

Byte X

Pontos

Pontos

Ponto

NumPoints

Little

Byte Y

NumMs

NumMs

Inteiro

1

Little

Byte Y+4*

Mmin

Mmin

Duplo

1

Little

Byte Y+12*

Mmax

Mmax

Duplo

1

Little

Byte Y+20*

Marray

Marray

Duplo

NumPoints

Little

Notas:

  1. X = 44 + (4 * NumParts), Y = X + (16 * NumPoints).

  2. * opcional

Tipos de shapes no espaço XYZ

PontoZ

Um PontoZ consiste em coordenadas triplas e duplas na ordem de X, Y, Z mais uma medida.

Tabela 74.
Conteúdo do fluxo de bytes do PontoZ

Posição

Campo

Valor

Tipo

Número

Solicitar

Byte 0

Tipo de Shape

11

Inteiro

1

Little

Byte 4

X

X

Duplo

1

Little

Byte 12

Y

Y

Duplo

1

Little

Byte 20

Z

Z

Duplo

1

Little

Byte 28

Medida

M

Duplo

1

Little

MultipontoZ

Um MultipontoZ representa um conjunto de PontosZ, da seguinte forma:


Tabela 75.
Conteúdo do fluxo de bytes do MultipontoZ

Posição

Campo

Valor

Tipo

Número

Solicitar

Byte 0

Tipo de Shape

18

Inteiro

1

Little

Byte 4

Caixa

Caixa

Duplo

4

Little

Byte 36

NumPoints

NumPoints

Inteiro

1

Little

Byte 40

Pontos

Pontos

Ponto

NumPoints

Little

Byte X

Zmin

Zmin

Duplo

1

Little

Byte X+8

Zmax

Zmax

Duplo

1

Little

Byte X+16

Zarray

Zarray

Duplo

NumPoints

Little

Byte Y

NumMs

NumMs

Inteiro

1

Little

Byte Y+4*

Mmin

Mmin

Duplo

1

Little

Byte Y+12*

Mmax

Mmax

Duplo

1

Little

Byte Y+20*

Marray

Marray

Duplo

NumPoints

Little

Notas:

  1. X = 40 + (16 * NumPoints); Y = X + 16 + (8 * NumPoints)

  2. * opcional

PolilinhaZ

Uma PolilinhaZ consiste em uma ou mais partes. Uma parte é uma seqüência conectada de dois ou mais pontos. As partes podem ou não estar conectadas entre si. As partes podem ou não fazer interseção entre si.

Os campos para uma PolilinhaZ são:

Quadro
O quadro delimitador da PolilinhaZ armazenado na ordem Xmin, Ymin, Xmax, Ymax.

NumParts
O número de partes na PolilinhaZ.

NumPoints
O número total de pontos para todas as partes.

Partes
Uma matriz do comprimento NumParts. Para cada parte, armazena o índice de seu primeiro ponto na matriz de pontos. Os índices matriciais são relativos a 0.

Pontos
Uma matriz do comprimento NumPoints. Os pontos de cada parte na PolilinhaZ são armazenados de ponto a ponto. Os pontos para a parte 2 seguem os pontos da parte 1 etc. A matriz das partes mantém o índice matricial do ponto inicial para cada parte. Não existe delimitador na matriz de pontos entre as partes.

Faixa Z
Os valores mínimos e máximo de Z para a PolilinhaZ armazenada na ordem Zmin, Zmax.

Matriz Z
Uma matriz do comprimento NumPoints. Os valores de Z para cada parte na PolilinhaZ são armazenados de ponto a ponto. Os valores de Z para a parte 2 seguem os valores de Z para a parte 1 e assim por diante. A matriz das partes mantém o índice matricial do ponto inicial para cada parte. Não existe delimitador na matriz Z entre as partes.

NumMs
O número de Medidas que seguem. NumMs pode ter somente dois valores zero se nenhuma Medida seguir este campo; ou igual a NumPoints se Medidas estiverem presentes.

Faixa M
As medidas mínimas e máximas para a PolilinhaZ armazenada na ordem Mmin, Mmax.

Matriz M
Uma matriz do comprimento NumPoints. As medidas para cada parte na PolilinhaZ são armazenados de ponto a ponto. As medidas para a parte 2 seguem as medidas da parte 1 etc. A matriz das partes mantém o índice matricial da medida inicial para cada parte. Não existe delimitador na matriz de medida entre as partes.

Tabela 76.
Conteúdo do fluxo de bytes da PolilinhaZ

Posição

Campo

Valor

Tipo

Número

Solicitar

Byte 0

Tipo de Shape

13

Inteiro

1

Little

Byte 4

Caixa

Caixa

Duplo

4

Little

Byte 36

NumParts

NumParts

Inteiro

1

Little

Byte 40

NumPoints

NumPoints

Inteiro

1

Little

Byte 44

Partes

Partes

Inteiro

NumParts

Little

Byte X

Pontos

Pontos

Ponto

NumPoints

Little

Byte Y

Zmin

Zmin

Duplo

1

Little

Byte Y+8

Zmax

Zmax

Duplo

1

Little

Byte Y+16

Zarray

Zarray

Duplo

NumPoints

Little

Byte Z

NumMs

NumMs

Inteiro

1

Little

Byte Z+4*

Mmin

Mmin

Duplo

1

Little

Byte Z+12*

Mmax

Mmax

Duplo

1

Little

Byte Z+20*

Marray

Marray

Duplo

NumPoints

Little

Notas:

  1. X = 44 + (4 * NumParts), Y = X + (16 * NumPoints), Z = Y + 16 + (8 * NumPoints)

  2. * opcional

PolígonoZ

Um PolígonoZ consiste num número de anéis. Um anel é um loop fechado, sem auto-interseção. Um PolígonoZ pode conter vários anéis externos. Os anéis de um PolígonoZ são denominados partes.

Os campos para um PolígonoZ são:

Quadro
O quadro delimitador do PolígonoM armazenado na ordem Xmin, Ymin, Xmax, Ymax.

NumParts
O número de anéis no PolígonoZ.

NumPoints
O número total de pontos para todos os anéis.

Partes
Uma matriz do comprimento NumParts. Para cada anel, armazena o índice de seu primeiro ponto na matriz de pontos. Os índices matriciais são relativos a 0.

Pontos
Uma matriz do comprimento NumPoints. Os pontos de cada anel no PolígonoZ são armazenados de ponto a ponto. Os pontos do Anel 2 seguem os pontos do Anel 1 etc. A matriz das partes mantém o índice matricial do ponto inicial para cada anel. Não existe delimitador na matriz de pontos entre anéis.

Faixa Z
Os valores mínimos e máximo de Z para o arco armazenado na ordem Zmin, Zmax.

Matriz Z
Uma matriz do comprimento NumPoints. Os valores de Z para cada anel no PolígonoZ são armazenados de ponto a ponto. Os valores de Z para o Anel 2 seguem os valores de Z para o Anel 1 e assim por diante. A matriz das partes mantém o índice matricial do valor Z inicial para cada anel. Não existe delimitador na matriz do valor Z entre os anéis.

NumMs
O número de Medidas que seguem. NumMs pode ter somente dois valores zero se nenhuma Medida seguir este campo; ou igual a NumPoints se Medidas estiverem presentes.

Faixa M
As medidas mínimas e máximas para o PolígonoZ armazenado na ordem Mmin, Mmax.

Matriz M
Uma matriz do comprimento NumPoints. As medidas para cada anel no PolígonoZ são armazenados de ponto a ponto. As medidas do Anel 2 seguem os pontos do Anel 1 etc. A matriz das partes mantém o índice matricial da medida inicial para cada anel. Não existe delimitador na matriz de medida entre os anéis.

Avisos importantes sobre os shapes do PolígonoZ:

Tabela 77.
Conteúdo do fluxo de bytes do PolígonoZ

Posição

Campo

Valor

Tipo

Número

Solicitar

Byte 0

Tipo de Shape

15

Inteiro

1

Little

Byte 4

Caixa

Caixa

Duplo

4

Little

Byte 36

NumParts

NumParts

Inteiro

1

Little

Byte 40

NumPoints

NumPoints

Inteiro

1

Little

Byte 44

Partes

Partes

Inteiro

NumParts

Little

Byte X

Pontos

Pontos

Ponto

NumPoints

Little

Byte Y

Zmin

Zmin

Duplo

1

Little

Byte Y+8

Zmax

Zmax

Duplo

1

Little

Byte Y+16

Zarray

Zarray

Duplo

NumPoints

Little

Byte Z

NumMs

NumMs

Inteiro

1

Little

Byte Z+4*

Mmin

Mmin

Duplo

1

Little

Byte Z+12*

Mmax

Mmax

Duplo

1

Little

Byte Z+20*

Marray

Marray

Duplo

NumPoints

Little


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