すべてのプロダクト
Search
ドキュメントセンター

PolarDB:WKB

最終更新日:Mar 28, 2026

GanosBase のサーフェスモデルは、Well-Known Binary(WKB)フォーマットで表現できます。WKB はデータの精度を保証し、伝送を容易にします。

仕組み

WKB は、GanosBase SFMesh オブジェクトのデータを型付き数値列に抽出し、指定されたバイトオーダーでそれらの値を直列化することでエンコードします。

サポートされるバイトオーダーは以下の 2 種類です:

バイトオーダー定数
リトルエンディアンNDR(Network Data Representation)1
ビッグエンディアンXDR(External Data Representation)0

数値型

すべてのフィールドサイズおよびエンコーディングは、以下の型定義に従います。これらの定義は NDR および XDR の両方のバイトオーダーに適用されます。

サイズ説明
Uint11 バイト(8 ビット)符号なし整数
Byte1 バイト(8 ビット)符号付き整数
Uint162 バイト(16 ビット)符号なし整数
Uint324 バイト(32 ビット)符号なし整数
Float4 バイト(32 ビット)浮動小数点数(IEEE 754)
Double8 バイト(64 ビット)浮動小数点数(IEEE 754)

幾何学的型

GanosBase は、Open Geospatial Consortium(OGC)Simple Feature モデルから定義されるすべてのジオメトリ型をサポートしており、さらにサーフェスメッシュ表現用に拡張された 3 種類の型もサポートしています:

  • IndexSurface — インデックス付き頂点サーフェス(型コード 22)

  • TriangleStrip — トライアングルストリップサーフェス(型コード 20)

  • TriangleFan — トライアングルファンサーフェス(型コード 21)

これらの型による 3D ジオメトリのモデリング方法の詳細については、「サーフェスメッシュモデルにおけるデータモデル」をご参照ください。

SRID のサポート

Extended Well-Known Text(EWKT)は、Spatial Reference System Identifier(SRID)を含む Well-Known Text(WKT)の拡張です。WKB 構造では、/* if WKBSRIDFLAG */ とマークされたフィールドは、SRID が指定されている場合にのみ存在します。

定義

一般定義

// 基本型定義
// byte  : 1 バイト
// uint8 : 1 バイト
// uint16: 2 バイト
// uint32: 32 ビット符号なし整数(4 バイト)
// float : 単精度数(4 バイト)
// double: 倍精度数(8 バイト)

enum WKBByteOrder {
    wkbXDR = 0, // ビッグエンディアン
    wkbNDR = 1  // リトルエンディアン
}

// ポイント型
Point2D {
    double x;
    double y;
}

Point3D {
    double x;
    double y;
    double z;
}

Point4D {
    double x;
    double y;
    double z;
    double m;
}

Point {
    union
    {
        Point2D point2d;
        Point3D point3d;
        Point4D point4d;
    };
}

// LinearRing
LinearRing {
    uint32 numPoints;
    Point points[numPoints];
}

// 法線ベクター
NormalPoint {
    float x;
    float y;
    float z;
}

NormalPointArray {
    uint32 numPoints;
    NormalPoint points[numPoints];
}

// テクスチャ座標
TexcoordPoint {
    float x;
    float y;
}

TexcoordPointArray {
    uint32 numPoints;
    TexcoordPoint points[numPoints];
}

// 文字列
String
{
    uint32 stringLength;
    byte string[stringLength];
}

// 可変長整数
enum IntType {
    Int8  = 1;
    Int16 = 2;
    Int32 = 4;
}

varint {
    union {
        uint8  uint8;
        uint16 uint16;
        uint32 uint32;
    };
}

varintArray {
    uint32 numInt;
    byte   intType; // WKBIntType
    varint values[numInt];
}

拡張ジオメトリ型

TriangleStrip

WKBTriangleStrip {
    byte byteOrder;
    static uint32 wkbType = 20;
    /*
    #define WKBZOFFSET  0x80000000
    #define WKBMOFFSET  0x40000000
    #define WKBSRIDFLAG 0x20000000
    */
    uint32 srid; /* if WKBSRIDFLAG */
    uint32 numRings = 1;
    LinearRing ring;
}

TriangleFan

WKBTriangleFan {
    byte byteOrder;
    static uint32 wkbType = 21;
    /*
    #define WKBZOFFSET  0x80000000
    #define WKBMOFFSET  0x40000000
    #define WKBSRIDFLAG 0x20000000
    */
    uint32 srid; /* WKBSRIDFLAG が設定されている場合 */
    uint32 numRings = 1;
    LinearRing rings;
}

IndexSurface

WKBIndexsurface {
    byte byteOrder;
    static uint32 wkbType = 22;
    /*
    #define WKBZOFFSET  0x80000000
    #define WKBMOFFSET  0x40000000
    #define WKBSRIDFLAG 0x20000000
    */
    uint32 srid; /* if WKBSRIDFLAG */
    LinearRing ring;
    varintArray VertexIndex;
    varintArray VertexNum;
}

GeometryCollection

WKBGeometry {
    Union {
        WKBPoint point;
        WKBLineString linestring;
        WKBPolygon polygon;
        WKBMultiPoint mpoint;
        WKBMultiLineString mlinestring;
        WKBMultiPolygon mpolygon;
        WKBTriangleStrip strip;
        WKBTriangleFan fan;
        WKBIndexsurface indexsurface;
    };
};


WKBGeometryCollection {
    byte byte_order;
    static uint32 wkbType = 7;
    uint32 numGeometries;
    WKBGeometry geometries[numGeometries];
}

テクスチャ

enum wkbTFormat
{
    wkbTFRaw = 0;
    wkbTFJPG = 1;
    wkbTFPNG = 2;
}

enum wkbTType
{
    wkbTTFile  = 1;
    wkbTTDB    = 2;
    wkbTTBytes = 3;
    wkbTTWeb   = 4;
}

WKBTexture {
    byte byteOrder;
    static byte version = 1;
    byte compress = 0;
    byte format;        /* wkbTFormat */
    static byte wrap = 0;
    byte type;          /* wkbTType */
    byte depth;         /* 1, 2, または 4 */
    uint32 width;
    uint32 height;
    uint32 dataLength;
    byte   data[dataLength];
    String name;
}

マテリアル

WKBMaterial {
    byte byteOrder;
    static byte version = 1;
    uint1 type;

    uint4 numTextures;
    WKBTexture textures[numTextures];

    WKBString name;

    WKBString data;
}

MeshGeom

WKBMeshGeom
{
    byte byteOrder;
    uint32 wkbType;

    /*
    #define WKBZOFFSET      0x80000000
    #define WKBMOFFSET      0x40000000
    #define WKBSRIDFLAG     0x20000000
    #define WKBGEOMFLAG     0x04000000
    #define WKBNORMALFLAG   0x02000000
    #define WKBTEXCOORDFLAG 0x01000000
    #define WKBREFFLAG      0x00400000
    #define WKBSOLIDFLAG    0x00200000
    */
    uint32 srid;                                          /* if WKBSRIDFLAG */
    WKBGeometryCollection patches;                        /* if WKBGEOMFLAG */

    uint32 numNormalPointArray;                           /* if WKBNORMALFLAG */
    NormalPointArray normalPoints[numNormalPointArray];   /* if WKBNORMALFLAG */

    uint32 numTexcoordPointArray;                         /* if WKBTEXCOORDFLAG */
    TexcoordPointArray texcoordPoints[numTexcoordPointArray]; /* if WKBTEXCOORDFLAG */

    String path;                                          /* if WKBREFFLAG */
}

SFMesh

WKBMatrix {
    double matrix[12];
}

WKBNode
{
    uint8 flags;
    /*
    #define WKBPRIMITIVEFLAG 0x01u<<0
    #define WKBMATRIXFLAG    0x01u<<2
    #define WKBIDFLAG        0x01u<<3
    */
    uint32 primitive;     /* if WKBPRIMITIVEFLAG */
    varintArray children; /* if not WKBPRIMITIVEFLAG */
    WKBMatrix matrix;     /* if WKBMATRIXFLAG */
    uint32 id;            /* if WKBIDFLAG */
}

WKBPrimitive {
    uint8  flags;
    uint8  reserved;
    uint16 materialId;
    uint32 index;
}


SFMesh
{
    byte   byteOrder;
    static byte magic = 'M';
    static byte version = 1;
    uint16 flags;

    /*
    #define WKBMESHZFLAG        0x0001u       /* have z */
    #define WKBMESHMFLAG        0x0001u<<1    /* have M */
    #define WKBMESHREFFLAG      0x0001u<<4    /* is ref */
    #define WKBMESHGEOMFLAG     0x0001u<<5    /* have meshgeom */
    #define WKBMESHMESHFLAG     0x0001u<<6    /* have mesh */
    #define WKBMESHTEXTUREFLAG  0x0001u<<7    /* have texture */
    #define WKBMESHMATERIALFLAG 0x0001u<<8    /* have material */
    #define WKBMESHLODFLAG      0x0001u<<9    /* have lod */
    #define WKBMESHSRIDFLAG     0x0001u<<11   /* have srid */
    #define WKBMESHUSERFLAG     0x0001u<<12   /* have user data */
    #define WKBMESHBINFLAG      0x0001u<<13   /* have bin data */
    #define WKBMESHEXFLAG       0x0001u<<14   /* have exflags */
    #define WKBMESHSYSFLAG      0x0001u<<15   /* have system data */
    */

    uint32 exflags;     /* if WKBMESHEXFLAG */

    uint32 srid;        /* if WKBMESHSRIDFLAG */
    uint16 lod;         /* if WKBMESHLODFLAG */

    uint32 root;        /* if not WKBMESHREFFLAG */

    uint32 numMeshgeom;                        /* if WKBMESHGEOMFLAG */
    WKBMeshgeom meshgeoms[numMeshgeom];        /* if WKBMESHGEOMFLAG */

    uint32 numSFMesh;                          /* if WKBMESHMESHFLAG */
    WKBSFMesh sfmesh[numSFMesh];               /* if WKBMESHMESHFLAG */

    uint32 numTexture;                         /* if WKBMESHTEXTUREFLAG */
    WKBTexture textures[numTexture];           /* if WKBMESHTEXTUREFLAG */

    uint32 numNode;                            /* if not WKBMESHREFFLAG */
    WKBNode nodes[numNode];                    /* if not WKBMESHREFFLAG */

    uint32 numPrimitives;                      /* if not WKBMESHREFFLAG */
    WKBPrimitive primitives[numPrimitives];    /* if not WKBMESHREFFLAG */

    String path;       /* if WKBMESHREFFLAG */
    String userdata;   /* if WKBMESHUSERFLAG */
    String bindata;    /* if WKBMESHBINFLAG */
    String sysdata;    /* if WKBMESHSYSFLAG */
}

型コード一覧

wkbType
WKBTriangleStrip20
WKBTriangleFan21
WKBIndexsurface22
WKBGeometryCollection7

フラグ一覧

MeshGeom フラグ

フラグ説明
WKBZOFFSET0x80000000Z ディメンションを有する
WKBMOFFSET0x40000000M ディメンションを有する
WKBSRIDFLAG0x20000000SRID を有する
WKBGEOMFLAG0x04000000ジオメトリコレクションを有する
WKBNORMALFLAG0x02000000法線ベクターを有する
WKBTEXCOORDFLAG0x01000000テクスチャ座標を有する
WKBREFFLAG0x00400000外部パスへの参照である
WKBSOLIDFLAG0x00200000ソリッドである

SFMesh フラグ

フラグ説明
WKBMESHZFLAG0x0001uZ 座標を有する
WKBMESHMFLAG0x0001u<<1M 座標を有する
WKBMESHREFFLAG0x0001u<<4参照である
WKBMESHGEOMFLAG0x0001u<<5MeshGeom を有する
WKBMESHMESHFLAG0x0001u<<6サブメッシュを有する
WKBMESHTEXTUREFLAG0x0001u<<7テクスチャを有する
WKBMESHMATERIALFLAG0x0001u<<8マテリアルを有する
WKBMESHLODFLAG0x0001u<<9レベル・オブ・ディテール(LOD)を有する
WKBMESHSRIDFLAG0x0001u<<11SRID を有する
WKBMESHUSERFLAG0x0001u<<12ユーザーデータを有する
WKBMESHBINFLAG0x0001u<<13バイナリデータを有する
WKBMESHEXFLAG0x0001u<<14拡張フラグを有する
WKBMESHSYSFLAG0x0001u<<15システムデータを有する

WKBNode フラグ

フラグ説明
WKBPRIMITIVEFLAG0x01u<<0ノードがプリミティブである
WKBMATRIXFLAG0x01u<<2変換マトリックスを有する
WKBIDFLAG0x01u<<3ID を有する