La representación binaria conocida OGC para geometría
La representación binaria conocida para la geometría forma parte de las especificaciones de entidades simples del Open Geospatial Consortium (OGC) que implementa un modelo de almacenamiento simple para entidades de puntos, línea y poligonales con las coordenadas x,y. Ofrece una representación portátil de un valor de geometría como una transmisión contigua de bytes. Permite que los valores de geometría se intercambien entre un cliente ODBC y una base de datos en forma binaria. No está comprimido.
El tipo de almacenamiento de geometría binaria conocida OGC es una especificación focalizada que ha sido adoptada y ampliada por la mayoría de usuarios, incluyendo Esri como parte de la compatibilidad con la geodatabase que utiliza el software de ArcGIS y ArcSDE.
El tipo de almacenamiento de geometría binaria conocida OGC se obtiene al serializar una instancia de geometría como una secuencia de tipos numéricos dibujados a partir del conjunto {Unsigned Integer, Double} y serializar cada tipo numérico como una secuencia de bytes utilizando una de las dos representaciones binarias estándar bien definidas para tipos numéricos, NDR o XDR.
![Explore Explore](rsrc/divein.png)
XDR significa Representación de datos extendidos. XDR es un estándar IETF de la capa de presentación en el modelo OSI. XDR permite que los datos se transporten de forma independiente de manera que los datos puedan transferirse entre sistemas informáticos. NDR significa Representación de datos de red. Es una implementación de la capa de presentación en el modelo OSI.
La codificación binaria específica utilizada para una secuencia de bytes de geometría se describe mediante una etiqueta de un byte que precede los bytes serializados. La única diferencia entre las dos codificaciones de geometría es el orden de los bytes. La descodificación XDR es big-endian, mientras que la descodificación NDR es little-endian. Esto significa que la representación de codificación XDR de un entero sin signo (un tipo de datos de 32 bits (4 bytes) que codifica un entero no negativo en el rango [0, 4294967295]) es big-endian, al igual que lo es la representación de codificación XDR de un doble (un tipo de datos de doble precisión de 64 bits (8 bytes) que codifica un número de doble precisión con el formato de doble precisión IEEE 754). Por el contrario, la representación NDR de un entero sin signo es little-endian (el byte menos significativo primero), y la representación NDR de un doble es little-endian.
La conversión entre los tipos de datos NDR y XDR para enteros y dobles sin signos es una sencilla operación que incluye el retroceso de bytes dentro de cada entero o doble sin signo en la secuencia de bytes.
Este tipo de almacenamiento de geometría puede utilizarse con las geodatabases de ArcSDE almacenadas en Oracle o SQL Server para almacenar geometría bidimensional. Las clases de entidades almacenadas en la representación binaria conocida OGC están también formadas por tres tablas: la tabla de negocios, la tabla de entidades y la tabla de índices espacial. Son las mismas tablas que se utilizan para clases de entidades almacenadas en el formato binario comprimido de ArcSDE.
La tabla de negocios contiene atributos y una columna espacial. La columna espacial es una clave para las tablas de índices de entidad y espacial.
La relación entre la tabla de negocios y la tabla de entidades se administra a través de la columna espacial y la columna FID. Esta clave, que se conserva en ArcSDE, es única.
Si desea almacenar la mayoría de sus datos de clase de entidad en el formato binario conocido OGC, cambie el valor del parámetro GEOMETRY_STORAGE bajo la palabra clave de configuración DEFAULTS de la tabla DBTUNE a OGCWKB. Si, en su lugar, desea almacenar sólo algunas de las clases de entidad en el formato binario conocido OGC, puede especificar la palabra clave de configuración WKB_GEOMETRY cuando crea esas clases de entidad.
Una descripción de las secuencias de bytes de geometría WKB
El bloque de construcción básico de la representación binaria conocida para la geometría es la secuencia de bytes para un punto que está formado por dos dobles. Las secuencias de bytes para las demás geometrías se construyen utilizando las secuencias de bytes para geometrías que ya se han definido. A continuación se describe una definición de la secuencia de bytes:
Definiciones de tipo básico
byte : 1 byte
uint32 : Entero sin signo de 32 bits (4 bytes)
doble : número de doble precisión (8 bytes)
Bloques de construcción : 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,
wkbGeometryCollection = 7
};
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;
WKBGeometryCollection collection;
WKBMultiPoint mpoint;
WKBMultiLineString mlinestring;
WKBMultiPolygon mpolygon;
}
};
WKBGeometryCollection {
byte byte_order;
uint32 wkbType; 7
uint32 num_wkbGeometries;
WKBGeometry wkbGeometries[num_wkbGeometries]
}
Afirmaciones para la representación binaria conocida para geometría
La representación binaria conocida para geometría ha sido diseñada para representar instancias de los tipos de geometría descritos en el modelo de objeto de geometría y en la especificación abstracta geoespacial abierta.
Estas afirmaciones incluyen lo siguiente para los anillos, polígonos y multipolígonos:
- Anillos lineales: Los anillos son simples y están cerrados, lo que significa que los anillos lineales no pueden intersecarse a sí mismos.
- Polígonos: Ningún anillo lineal en el límite de un polígono puede cruzarse entre sí. Los anillos lineales en el límite de un polígono pueden intersecar, como máximo, en un punto único pero solo como una tangente.
- Multipolígonos: Los interiores de dos polígonos que son elementos de un multipolígono no pueden intersecar. Los límites de dos polígonos que son elementos de un multipolígono pueden tocarse sólo en un número finito de puntos.