Especificaciones del formato VEC

A continuación mostraremos las especificaciones del formato propietario Vec.

Creación de un Vec

Los archivos “vec” pueden ser creados a través de tres formas:

·         Creando el archivo con los datos geoespaciales usando el producto de SGRIN S.A LatinoGIS.

·         Programando usando la librería de clases de SGRIN S.A Latino Objects.

·         Escribir directamente las especificaciones de un “vec” escribiendo un programa.

Organización del archivo “vec”

El archivo “vec” consta de un encabezado de archivo y un cuerpo de archivo donde se encuentran todos los elementos, lo cuales a su vez cuentan con un encabezado de elemento. Como se puede ver en la Tabla 2.8.2, el encabezado del archivo tiene como longitud 103 bytes.

Encabezado de archivo

 

Encabezado de elemento

Lista de atributos

Contenido del elemento

Encabezado de elemento

Lista de atributos

Contenido del elemento

Encabezado de elemento

Lista de atributos

Contenido del elemento

Encabezado de elemento

Lista de atributos

Contenido del elemento

Tabla 2.8.1. Organización del archivo vec.

 

El tamaño del encabezado del elemento es de tamaño fijo en cada archivo. Su tamaño varía en las distintas versiones del archivo “vec”. El tamaño del contenido del elemento varía en dependencia del tipo de elemento y del contenido del mismo.

En las versiones que soportan atributos, primeramente aparecerá el valor que representa el número de atributos y posteriormente los mismos.

Encabezado del archivo

La organización del encabezado del archivo “vec” lo podemos observar en la siguiente tabla. La columna “Posición” de la tabla indica el byte del archivo donde se encuentra un determinado campo, posteriormente encontraremos la descripción del campo y por último la cantidad de bytes de ocupa dicho campo.

Posición (Byte)

Campo

Tamaño (Bytes)

0

Versión

1

1

Sub-Versión

1

2

Longitud de la cadena que identifica al creador del archivo

1

3

Cadena que representa al creador del archivo

100

Tabla 2.8.2. Encabezado del archivo vec.

 

Las versiones existentes en los archivos “vec” son las 2, 3, 4, 5 y 10. En caso de que el número de la versión sea la 0 se asume que la versión es la 4. Estos valores se representan con el valor entero de un byte (8 bits).

Seguidamente aparece el campo sub-versión, campo que en estos momentos no tiene ningún significado, pero que se preserva por un problema histórico.

Posteriormente nos encontramos con un byte que representa la longitud en bytes de la cadena de caracteres que indica al creador del archivo. Para esta cadena están reservado los siguientes 100 bytes.

Encabezado de los elementos

El encabezado de los elementos varía en dependencia de la versión del archivo “vec”. Por ese motivo por cada versión se mostrará una tabla describiendo el encabezado de los elementos para cada versión. La posición que se indica en las tablas se refiere a la posición relativa a los datos del elemento en el archivo, no a la posición en el archivo.

Versión 2, 3 y 4

Posición (Byte)

Campo

Tamaño (Bytes)

0

Tipo del elemento

1

1

Selección

1

2

Capa a la que pertenece el elemento

2

4

Identificador del elemento

4

Tabla 2.8.3. Encabezado de los elementos (versiones 2, 3 y 4)

 

Versión 5

La versión 5 es similar a las anteriores. La diferencia existe al final del cuerpo del elemento, donde en esta versión aparece un  byte que indica la cantidad de bytes siguientes que representan a los atributos de elemento.

Versión 10

Posición (Byte)

Campo

Tamaño (Bytes)

0

Tipo del elemento

1

1

Capa a la que pertenece el elemento

2

3

Identificador del elemento

4

7

Cantidad de atributos del elemento

4

11

Tipo del 1er atributo

4

15

Información del 1er atributo

4

19

Tipo del 2do atributo

4

23

Información del 2do atributo

4

-

Tipo del enésimo atributo

4

-

Información del enésimo atributo

4

Tabla 2.8.4. Encabezado de los elementos (versión 10)

 

Tipo del elemento

Este valor nos indica el tipo del elemento. Los diferentes tipos de elementos soportados por cada versión se muestran en la siguiente tabla. Al final se muestra el valor de cada tipo en el archivo.

Versión del “vec”

Polilínea

Área

Texto

Célula

Icono

Texto flotante

Texto flotante y dinámico

2

X

X

X

X

 

 

 

3

X

X

X

X

 

 

 

0,4

X

X

X

X

X

 

 

5

X

X

X

X

X

 

 

10

X

X

X

X

X

X

X

Valor en el archivo

1

2

3

4

5

6

8

Tabla 2.8.5. Tipos de elementos por versión.

 

Selección

Indica si el elemento está seleccionado o no.

Capa a la cual pertenece el elemento

Este campo indica a que capa pertenecerá el elemento.

Identificador del elemento

Esta propiedad, entero de 32 bits, nos indica el valor de enlace del elemento con una tabla perteneciente a una base de datos.

Atributos de elemento

Como se puede observar, los atributos aparecen en los elementos a partir de versión 5. En dicha versión, al final del grupo de bytes que identifican al cuerpo del elemento, aparece un valor (byte) que indica la cantidad de bytes a continuación que representan los elementos del atributo.

En la versión 10 los atributos aparecen de manera distinta. Después del flujo de bytes que representa al Id del elemento, aparecen 4 bytes que nos indicarán la cantidad de atributos que vendrán a continuación.

En esta versión el atributo esta compuesto por dos componentes enteras de 32 bits. La primera nos indica el tipo del atributo, y la segunda la información que nos ofrece dicho atributo.  Estos atributos se encuentran uno a continuación del otro con tamaño de 8 bytes.

Contenido de los elementos

A continuación les mostraremos la estructura del formato en que se encuentra guardado el contenido de los elementos. Existen distintas formas de almacenar un elemento en dependencia de la versión del archivo “vec”, en los casos en que esto ocurra se describirán los distintos formatos.

Los datos pertenecientes al cuerpo de los elementos se empezarán a leer inmediatamente después de haber terminado de leer la cabecera del elemento.

Es importante aclarar que las coordenadas en las versiones anteriores a la 10 se guardan en cms. y son representadas por un valor entero de 32 bits (4 bytes). Ya a partir de la versión 10, estas comenzaron a guardarse en mms. cambiando el número de bytes a 64 bits (8 bytes).

Polilíneas

Una polilínea consiste en un conjunto de vértices, unidos uno a continuación del otro, formando la polilínea, la cual puede ser abierta o no. En el caso de que la polilínea sea cerrada, el interior de la figura formada no pertenece al objeto.

Figura 2.8.1. Polilínea cerrada y Polilínea abierta.

 

Versiones 2, 3, 4 y 5

En las versiones 2, 3, 4 y 5 las polilíneas se guardan de la manera que se muestra en la siguiente tabla.

 

Posición (Byte)

Campo

Tamaño (Bytes)

0

Cantidad de vértices de la polilínea

2

2

1er vértice de la polilínea

12

14

2do vértice de la polilínea

12

-

Enésimo vértice de la polilínea

12

Tabla 2.8.6. Estructura de almacenamiento de una polilínea (versiones 2, 3, 4 y 5)

 

Como se puede observar en la tabla los dos primeros bytes resultan un valor entero el cual representa a la cantidad de vértices que posee la polilínea en cuestión.

Posteriormente vienen los vértices que se encuentran uno a continuación del otro en tiras de 12 bytes, donde los primeros 4 bytes representa la coordenada X del vértice, los próximos 4 la coordenada Y, y los últimos 4 la coordenada Z. En la siguiente tabla se puede observar lo antes explicado.

Posición (Byte)

Campo

Tamaño (Bytes)

0

Coordenada X del punto

4

4

Coordenada Y del punto

4

8

Coordenada Z del punto

4

Tabla 2.8.7. Almacenamiento de un punto (versiones 2, 3, 4 y 5)

 

Versión 10

En la versión 10 se introducen algunos cambios de gran significación con el objetivo de lograr una mayor compresión de los datos.

En los primeros bytes se almacena el número de vértices de la polilínea utilizando la compresión de 7 bits.

La compresión de 7 bits consiste en una codificación que emplea 7 de los 8 bits de un byte para guardar el valor deseado y uno como marcador de continuación. De esta forma, si al codificar un número, no es suficiente con 7 bits, se asigna a 1 el octavo bit (más significativo) y se toma un próximo byte, el cual será tratado de igual forma. Este proceso termina cuando el número a almacenar/enviar se pueda cubrir con los 7 bits menos significativos de una cierta cantidad de bytes. De esta manera se van almacenando los 7 bits menos significativos del número en el primer byte, seguido de los otros menos significativos en el segundo byte, y así sucesivamente hasta completar una lista de bytes.

La importancia de esta codificación radica en la compresión de los datos, dado que en muchas ocasiones almacenamos números pequeños en tipos de datos que ocupan varios bytes. En nuestro caso empleamos la codificación 7 bits para enteros de 32 y 64 bits.

Figura 2.8.2. Ejemplo 1(se muestra el ejemplo en 16 bits)

 

Figura 2.8.3. Ejemplo 2(se muestra el ejemplo en 16 bits

 

Cuando se quiere codificar números con signo se hace un nuevo artificio. En este caso influye el hecho de que los números negativos, aunque sean pequeños en módulo, escritos en complemento a 2 (como lo representa el ordenador), tienen el bit más significativo igual a 1. Por esta razón se toma su módulo, se codifica como un número positivo y se pone en el último byte utilizado, el segundo bit más significativo como el signo: 1 negativo, 0 positivo.

Figura 2.8.4. Ejemplo

 

Una vez terminado de leer el número de vértices de la polilínea se almacena una palabra (2 bytes) que contiene el número de bytes por coordenadas (X, Y, Z) utilizados para almacenar la diferencia entres las coordenadas de un vértice con respecto al anterior. En el siguiente esquema (Fig. 2.8.5) se definen los bits de la palabra utilizados para cada coordenada.

Figura 2.8.5. Bits utilizados en una palabra por cada coordenada.

 

La cantidad de bytes a utilizar se calcula iterando por todos los vértices, donde se va hallando la resta entre cada coordenada (X, Y, Z) de un vértice con el anterior en el arreglo, y guardando para cada coordenada, con cuantos bytes sería suficiente para representarla. Por ejemplo, si la mayor diferencia encontrada entre dos coordenadas x consecutivas es 100, alcanza con un byte para representar todas las diferencias de las coordenadas X del arreglo.

A continuación se almacena el primer vértice de manera integra. 24 bytes donde  cada vértice es representado por un entero de 8 bytes. Esto lo podemos ver en al siguiente tabla.

Posición (Byte)

Campo

Tamaño (Bytes)

0

Coordenada X del punto

8

8

Coordenada Y del punto

8

16

Coordenada Z del punto

8

Tabla 2.8.8. Almacenamiento de un punto (versión 10)

 

Una vez almacenado el 1er punto se almacenan las diferencias en las coordenadas de los siguientes vértices con respecto al vértice anterior correspondiente, utilizando la cantidad de bytes calculada anteriormente.

Posición (Byte)

Campo

Tamaño (Bytes)

0

Cantidad de vértices (compresión 7 bits)

N

N

Número de bytes por coordenadas

2

N + 2

Primer vértice de la polilínea (Tabla 2.8.8)

24

M = N + 26

Diferencia en la coordenada X del 2do punto con respecto al 1ro.

NX

M + NX

Diferencia en la coordenada Y del 2do punto con respecto al 1ro.

NY

M + NX + NY

Diferencia en la coordenada Z del 2do punto con respecto al 1ro.

NZ

-

Diferencia en la coordenada X del 3er punto con respecto al 2do.

NX

-

Diferencia en la coordenada Y del 3er punto con respecto al 2do.

NY

-

Diferencia en la coordenada Z del 3er punto con respecto al 2do.

NZ

 

 

-

Diferencia en la coordenada X del n-esimo punto con respecto al (n-1)esimo.

NX

-

Diferencia en la coordenada Y del n-esimo punto con respecto al (n-1)esimo.

NY

-

Diferencia en la coordenada Z del n-esimo punto con respecto al (n-1)esimo.

NZ

Tabla 2.8.9. Estructura de almacenamiento de una secuencia de vértices (versión 10)

 

Áreas o shapes

Las áreas o shapes, están constituidos por un conjunto de vértices que conforman un polígono cerrado.

Figura 2.8.6. Área o shape.

Como se puede observar en la figura, el último vértice del la secuencia es exactamente igual al primero.

Versiones 2 y 3

En las versiones 2 y 3 los shapes se almacenan de la siguiente forma.

Posición (Byte)

Campo

Tamaño (Bytes)

0

Cantidad de vértices del área o shape

2

2

1er vértice del shape

12

14

2do vértice del shape

12

-

Enésimo vértice del shape

12

 


Tabla 2.8.10. Estructura de almacenamiento de un shape (versiones 2 y 3)

 

Como se puede observar en la tabla los dos primeros bytes resultan un valor entero el cual representa a la cantidad de vértices que posee la polilínea en cuestión.

Posteriormente vienen los vértices que se encuentran uno a continuación del otro en tiras de 12 bytes, donde los primeros 4 bytes representa la coordenada X del vértice, los próximos 4 la coordenada Y, y los últimos 4 la coordenada Z.

Versión 4 y 5

En la versión 4 se introducen las áreas con huecos como se puede ver en la siguiente figura.

 

Fig. 2.8.7. Área o shape con huecos.

 

En este caso la lectura de los datos sería de la siguiente forma.

·         Lectura del anillo exterior del shape.

·         Lectura de la cantidad de anillos que representan los huecos del shape.

·         Lectura de los anillos que representan a los huecos del shape.

Los anillos, tanto el exterior como los interiores (huecos), se almacenan de manera similar a como se describe el formato de almacenamiento de un shape en las versiones anteriores.

Los dos bytes que vienen a continuación, una vez leídos el anillo exterior del shape, representan a la cantidad de anillos interiores (huecos). Posteriormente vendrían los anillos interiores uno a continuación del otro.

Versión 10

La estructura de almacenamiento del shape en la versión 10 varía en dos aspectos. El primero es que el primer campo almacenado es la cantidad de anillos incluyendo al exterior. Y lo segundo es que la forma de almacenar los anillos cambia, siendo similar al almacenamiento de los vértices de la polilínea de la versión 10 antes descrita (Tabla 2.8.9).

Posición (Byte)

Campo

Tamaño (Bytes)

0

Cantidad de anillos del shape

2

2

értices del anillo exterior

-

-

Vértices del 1er anillo interior

-

-

Vértices del enésimo anillo del  shape

-

 

 

Tabla 2.8.11. Estructura de almacenamiento de un shape (versión 10).

 

Textos

Los textos están identificados por un punto de inserción y por una cadena de caracteres, la cual representa el texto a mostrar. Esta cadena de caracteres, en el formato “vec”, se guarda con la codificación UTF8.

Versión 2

En la versión 2 del formato “vec” los datos almacenados en el archivo son: el punto de inserción, el alto del texto, el ángulo de rotación del texto, el índice que indica la fuente a utilizar, el largo de la cadena de caracteres y la cadena de caracteres que representa al mismo. En la siguiente tabla se muestra como se guarda esta información.

Posición (Byte)

Campo

Tamaño (Bytes)

0

Punto de inserción

12

12

Alto del texto

4

16

Ángulo de rotación

4

20

Justificación del texto

1

21

Índice que indica la fuente

1

22

Tamaño (Lenght) en bytes de la cadena de caracteres

1

23

Cadena de caracteres

Length

Tabla 2.8.12. Estructura de almacenamiento de un texto (versión 2)

 

El punto de inserción se lee de la misma forma en que se leen los vértices de la polilínea y del shape. En la tabla se puede observar con claridad. Posteriormente se almacena el valor de la altura del texto, en cm,  representado por un valor entero de 4 bytes.

A continuación leemos el ángulo de rotación, el cual se almacena en radianes. Este atributo esta representado por un valor de punto flotante de 4 bytes.

La justificación del texto (ubicación de punto de inserción con respecto al texto) se representa con un byte que indica el índice de la justificación.

Justificación

Valor

Izquierda-arriba

0

Izquierda-centro

1

Izquierda-abajo

2

Centro-arriba

6

Centro-centro

7

Centro-abajo

8

Derecha-arriba

12

Derecha-centro

13

Derecha-abajo

14

Tabla 2.8.13. Valores de las distintas justificaciones.

 

A continuación del byte de la justificación, aparece el byte que representa a un valor entero que indica el índice de la fuente con que se va a visualizar el texto. La información de la fuente correspondiente se debe existir en una paleta de fuentes.

El siguiente byte nos indica la cantidad de bytes que siguen a continuación y que representan a la cadena de caracteres del texto.

Versión 3, 4 y 5

En las versiones 3, 4 y 5 se añade un nuevo atributo. Este consiste en el ancho en cm que tendrá el texto, representado por un valor entero de 4 bytes. En la siguiente tabla se muestra el nuevo formato de almacenamiento del texto.

Posición (Byte)

Campo

Tamaño (Bytes)

0

Punto de inserción

12

12

Alto del texto

4

16

Ancho del texto

4

20

Ángulo de rotación

4

24

Justificación del texto

1

25

Índice que indica la fuente

1

26

Tamaño (Lenght) en bytes de la cadena de caracteres

1

27

Cadena de caracteres

Length

Tabla 2.8.14. Estructura de almacenamiento de un texto (versiones 3, 4 y 5)

 

Versión 10

En la versión 10 la estructura de almacenamiento de un texto solo varía con respecto a las versiones anteriores en el punto de inserción. Aquí, al igual que en todos los elementos de la versión 10, para almacenar el punto se utilizan 24 byes donde cada coordenada (X, Y y Z) es representada por un entero de 8 bytes (64 bits). En la Tabla 2.8.8 podemos observar lo antes mencionado.

Por esta razón la posición de los demás atributos del texto varían con respecto a la posición en las versiones anteriores. (Tabla 2.8.15)

Posición (Byte)

Campo

Tamaño (Bytes)

0

Punto de inserción

24

24

Alto del texto

4

28

Ancho del texto

4

32

Ángulo de rotación

4

36

Justificación del texto

1

37

Índice que indica la fuente

1

38

Tamaño (Lenght) en bytes de la cadena de caracteres

1

39

Cadena de caracteres

Length

Tabla 2.8.15. Estructura de almacenamiento de un texto (versión 10)

 

Células

Clase que representa a los elementos células. Este elemento define un símbolo que se coloca a partir de un punto, con unas dimensiones y un ángulo de giro. Se asume que el punto es el centro de la caja que contiene al elemento.

El símbolo está conformado por un grupo de polilíneas, que se dibujan ajustados al tamaño de la célula, y en la posición de esta.

La célula toma el símbolo que le corresponde, según su configuración de visualización, de la paleta de células del configurador de visualización, que contiene 255 símbolos.

Versión 2

En la versión 2 del formato “vec” se almacena  primero el punto de inserción de la célula. Posteriormente el valor del alto y ancho en cm. de la caja mínima que contiene a la célula. Y por último, el valor en radianes del ángulo de rotación de la misma, tomando como punto de giro al punto de inserción. (Tabla 2.8.14)

Posición (Byte)

Campo

Tamaño (Bytes)

0

Punto de inserción

12

12

Alto y ancho de la célula

4

16

Ángulo de rotación

4

Tabla 2.8.16. Estructura de almacenamiento de una célula (versión 2)

 

El punto de inserción se almacena en la forma descrita en la Tabla 2.8.7.

Versión 3, 4 y 5

En las versiones 3, 4 y 5 se modifica la forma de almacenar una célula. Al igual que en la versión anterior los primeros 12 bytes corresponden al punto de inserción, pero ahora, a continuación aparece el ángulo de rotación (4 bytes). En estas versiones el alto y ancho de la caja mínima que contiene a la célula deja de ser el mismo, por lo que se almacenan dos valores enteros de 4 bytes cada uno para representar estos valores respectivamente.

Posición (Byte)

Campo

Tamaño (Bytes)

0

Punto de inserción

12

12

Ángulo de rotación

4

16

Alto de la célula

4

20

Ancho de la célula

4

Tabla 2.8.17. Estructura de almacenamiento de una célula  (versiones 3, 4 y 5)

 

Versión 10

En la versión 10 la estructura es similar solo cambiando la estructura de almacenamiento del punto de inserción a como se describe en la Tabla 2.8.8. Trayendo esto consigo el corrimiento de las posiciones iniciales de los demás atributos (Tabla 2.8.18)

Posición (Byte)

Campo

Tamaño (Bytes)

0

Punto de inserción

12

12

Ángulo de rotación

4

16

Alto de la célula

4

20

Ancho de la célula

4

Tabla 2.8.18. Estructura de almacenamiento de una célula  (versión 10)

 

Iconos

A partir de la versión 4 se introduce el elemento icono en el formato “vec”. Este elemento define un símbolo que se coloca a partir de un punto, con un ángulo de giro. Se asume que el punto es el centro de la caja que contiene al ícono.

El símbolo esta conformado por un bitmap. Este elemento no se escala, se muestra del mismo tamaño independientemente de la escala a la que se están viendo los elementos.

El ícono toma el símbolo que le corresponde, según su configuración de visualización, de la paleta de íconos del configurador de visualización que se utilice.

Versión 4 y 5

En las versiones 4 y 5 el icono es representado por un primer grupo de 12 bytes (Tabla 2.8.7) y otro grupo de 4 bytes que representa al ángulo de rotación del mismo. Posteriormente se almacena el alto y el ancho del icono, valores que en la actualidad no son utilizados.

 

Posición (Byte)

Campo

Tamaño (Bytes)

0

Punto de inserción

12

12

Ángulo de rotación

4

16

Alto del icono (no utilizado en la actualidad)

4

20

Ancho del icono (no utilizado en la actualidad)

4

Tabla 2.8.19. Estructura de almacenamiento de un icono (versiones 4 y 5)

 

Versión 10

En la versión 10 desaparecen los valores del alto y ancho del icono y el punto de inserción pasa a ser de coordenadas enteras de 64 bits, almacenándose como se describe en la Tabla 2.8.8.

Posición (Byte)

Campo

Tamaño (Bytes)

0

Punto de inserción

24

24

Ángulo de rotación

4

Tabla 2.8.20. Estructura de almacenamiento de un icono (versión 10)

 

Textos dinámicos flotantes y textos flotantes

Los textos dinámicos flotantes y los textos flotantes se introducen en la versión 10 del formato “vec”. Estos tienen en común, una polilínea a la cual se va a ajustar el texto en cuestión, o sea el texto de dibuja sobre la polilínea. La diferencia existe en que el texto dinámico y flotante se dibuja sobre la parte visible de la polilínea (Figura 2.8.8) y el texto flotante se pinta sobre la polilínea independientemente de la parte que se vea de ella (Figura 2.8.9).

Figura 2.8.8. Texto dinámico y flotante. En a y en b la parte de la polilínea que se visualiza es distinta.

 

Figura 2.8.9. Texto flotante. En a y en b la parte de la polilínea que se visualiza es distinta.

 

La forma en que se almacena la información de estos dos tipos de elementos es similar y la podemos ver en la siguiente tabla (Tabla 2.8.21).

Posición (Byte)

Campo

Tamaño (Bytes)

0

Vértices de la polilínea asociada al texto.

(N)

N

Alto del texto

4

N + 4

Justificación del texto

1

N + 5

Índice que indica la fuente

1

N + 6

Tamaño (Lenght) en bytes de la cadena de caracteres

1

N + 7

Cadena de caracteres

Length

Tabla 2.8.21. Estructura de almacenamiento de los textos dinámicos flotantes y flotantes