DB2 Spatial Extender 具有几个从二进制表示生成几何图形的函数:
公认二进制表示是相邻的字节流。 它允许以二进制形式在 ODBC 客户机和 SQL 数据库之间交换几何图形。 因为这些几何图形函数需要定义 C 程序设计语言结构来映射二进制表示, 所以只打算在第三代语言 (3GL) 程序内使用它们。 它们不适合第四代语言 (4GL) 环境。 ST_AsBinary 函数将现存几何图形值转换为公认二进制表示。
几何图形的公认二进制表示是通过将几何图形实例串行化为数字类型的序列来实现的。 从集合(无符号整数,双精度)抽取这些类型,然后将每个数字类型串行化为字节的序列。 使用数字类型的两个良好定义的标准二进制表示 (NDR, XDR) 之一使这些类型串行化。 已串行化的字节之前的一字节标记描述用于几何图形字节流的特定二进制编码 (NDR 或 XDR)。 几何图形的两种编码之间的唯一差异是字节次序的差异: XDR 编码是“大尾结构”;NDR 编码是“小尾结构”。
无符号整数是 32 位(4 字节) 的数据类型,它对 [0, 4294967295] 范围内的非负整数进行编码。
双精度是 64 位(8 字节)的双精度数据类型, 它使用 IEEE 754 双精度格式对双精度数进行编码。
这些定义是 XDR 和 NDR 的公共定义。
无符号整数的 XDR 表示是“大尾结构”(最高有效位字节优先)。
双精度数的 XDR 表示是“大尾结构”(符号位是第一个字节)。
无符号整数的 NDR 表示是“小尾结构”(最低有效位优先)。
双精度数的 NDR 表示是“小尾结构”(符号位是最后一个字节)。
无符号整数和双精度数的 NDR 和 XDR 数据类型之间的转换是一个简单操作。 它涉及使字节流中的每个无符号整数或双精度数内的字节次序反向。
本节描述几何图形的公认二进制表示。 基本构件块是点的字节流,它由两个双精度数组成。 其他几何图形的字节流是使用已定义的几何图形的字节流构建的。
// Basic Type definitions // byte : 1 byte // uint32 : 32 bit unsigned integer (4 bytes) // double : double precision number (8 bytes) // Building Blocks : 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, }; 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; WKBMultiPoint mpoint; WKBMultiLineString mlinestring; WKBMultiPolygon mpolygon; } };
下图显示一种 NDR 表示。
图 39. NDR 格式的表示. (B=1),类型为多边形 (T=3), 具有 2 条直线 (NR=2),每个环具有 3 个点 (NP=3)。
![]() |
几何图形的公认二进制表示设计成能表示一些几何图形的实例, 在“几何图形模型”和“OpenGIS 抽象规范”中描述了这些几何图形。
这些要求对环、多边形和复合多边形隐含下列要求: