地理情報エクステンダーには、バイナリー表現から図形を生成する関数がいくつかあります。
事前割り当てバイナリー表現は、連続する一連のバイトです。これにより、ODBC クライアントと SQL データベースの間で図形をバイナリー形式で交換することができます。これらの図形関数では、バイナリー表現をマップする C プログラミング言語構造を定義する必要があるので、第 3 世代 (3GL) プログラムで使用するよう意図されています。第 4 世代言語 (4GL) 環境での使用には適していません。 ST_AsBinary 関数は、既存の図形値を事前割り当てバイナリー表現に変換します。
図形の事前割り当てバイナリー表現を入手するには、数値型順序列として図形インスタンスを順序付けします。このタイプはセット (Unsigned Integer, Double) から引き出され、その後、それぞれの数値型をバイトの順序列として順序付けします。タイプの順序付けには、数値型を表す標準の定義済みバイナリー表現 (NDR、XDR の 2 つがある) のいずれかを使います。順序付けされたバイトに先行する 1 バイトのタグとして、図形バイト・ストリームに使われる特定のバイナリー・エンコード (NDR または XDR) が記述されます。この 2 つの形状のエンコードの唯一の違いは、バイト順序の違いです。 XDR エンコードはビッグ・エンディアンであり、 NDR エンコードはリトル・エンディアンです。
無符号整数 は、 [1, 4294967295] の範囲にある負でない整数をコード化する 32 ビット (4 バイト) のデータ型です。
倍精度 は、 IEEE 754 倍精度形式を用いて倍精度の数値をコード化する 64 ビット (8 バイト) の倍精度データ型です。
これらの定義は、XDR、NDR の両方に共通です。
無符号整数の XDR 表現はビッグ・エンディアンです (最初のバイトが最上位桁)。
倍精度の XDR 表現はビッグ・エンディアンです (最初のビットが符号ビット)。
無符号整数の NDR 表現はリトル・エンディアンです (最初のバイトが最下位桁)。
倍精度の NDR 表現はリトル・エンディアンです (最後のバイトが符号ビット)。
NDR データ型と XDR データ型の間の無符号整数と倍精度の変換は、簡単な操作です。この操作には、バイト・ストリーム内にあるそれぞれの無符号整数または倍精度でバイトの順序を反転させることが関係します。
図形の事前割り当てバイナリー表現について以下に説明します。基本的な構成ブロックは、2 つの倍精度からなるポイントのバイト・ストリームです。ほかの図形のバイト・ストリームは、定義済みの図形のバイト・ストリームを使って作成されます。
// 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) がある。
図形の事前割り当てバイナリー表現は、 Geometry Object Model および OpenGIS Abstract Specification で記述されている図形タイプのインスタンスを表すように設計されています。
これらの宣言では、リング、ポリゴンおよび複数ポリゴンについて、以下のように暗黙指定されています。