使用與參考手冊

OGC 知名二進位 (WKB) 表示法

DB2 Spatial Extender 有一些函數從二進位表示法產生幾何:

ST_GeomFromWKB
從任何幾何類型的 WKB 表示法建立幾何。

ST_PointFromWKB
從點 WKB 表示法建立點。

ST_LineFromWKB
從線串 WKB 表示法建立線串。

ST_PolyFromWKB
從多邊形 WKB 表示法建立多邊形。

ST_MPointFromWKB
從多點 WKB 表示法建立多點。

ST_MLineFromWKB
從多線串 WKB 表示法建立多線串。

ST_MPolyFromWKB
從多重多邊形 WKB 表示法建立多重多邊形。

知名二進位表示法是連續位元組串流。它允許在 ODBC 從屬站與 SQL 資料庫之間使用二進位格式交換幾何。 因為這些幾何函數需要 C 程式設計語言結構定義才能對映二進位表示法,所以它們是專門在第三代語言 (3GL) 程式內使用。它們不適合第四代語言 (4GL) 環境。 ST_AsBinary 函數將現存幾何值轉換成知名二進位表示法。

透過一連串數值類型來序列化幾何案例,從而取得幾何的知名二進位表示法。 這些類型是從這個設定 (無正負號整數、倍整數) 產生,然後每一個數值類型序列化成為一連串位元組。 這些類型是使用數值類型的兩個定義完善的標準二進位表示法 (NDR, XDR) 的其中一個來序列化。 位於序列化位元組前面的一位元組標籤,說明用於幾何位元組串流的特定二進位編碼 (NDR 或 XDR)。 這兩個幾何編碼的唯一差異是位元組順序差異: XDR 編碼是 Big Endian;NDR 編碼是 Little Endian。

數值類型定義

無正負號整數是 32 位元 (4 位元組) 資料類型,它在範圍 [0, 4294967295] 中編碼非負數整數。

倍整數是 64 位元 (8 位元組) 倍準度資料類型,它使用 IEEE 754 倍準度格式編碼倍準數。

XDR 和 NDR 共用這些定義。

數值類型的 XDR (Big Endian) 編碼

無正負號整數的 XDR 表示是 Big Endian (最大有效位元組是第一個位元組)。

倍整數的 XDR 表示是 Big Endian (正負號位元是第一個位元組)。

數值類型的 NDR (Little Endian) 編碼

無正負號整數的 NDR 表示 Little Endian (最小有效位元組是第一個位元組)。

倍整數的 NDR 表示是 Little Endian (正負號位元是最後一個位元組)。

在 NDR 與 XDR 之間轉換

在無正負號整數和倍整數的 NDR 與 XDR 資料類型之間轉換是很簡單的作業。 該作業會反轉位元組串流中的每一個無正負號整數或倍整數內的位元組順序。

WKBGeometry 位元組串流說明

本節說明幾何的知名二進位表示法。 基本建置區塊是點的位元組串流,它由兩個倍整數組成。 使用已定義的幾何的位元組串流建置其它幾何的位元組串流。

// 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 格式的表示. 具有 2 線性 (NR=2) 的類型多邊形 (T=3) 的 (B=1),每一個環有 3 點 (NP=3)。


[圖]

WKB 表示法的主張

幾何的知名二進位表示法代表 Geometry Object Model 和 OpenGIS Abstract Specification 說明的幾何類型案例。

這些主張對於環、多邊形和多重多邊形隱含下列涵意:

線性環
環屬單純和封閉,這表示線性環無法自己相交。

多邊形
在多邊形界限中沒有兩個線性環可以彼此交叉。 多邊形界限中的線性環頂多可以在單一點相交,但只作為切線。

多重多邊形
兩個多邊形的內部,它們是多重多邊形無法相交的元素。 身為多重多邊形元素的兩個多邊形界限只能接觸有限點數。


[ 頁面頂端 | 前一頁 | 下一頁 | 目錄 | 索引 ]