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

PolarDB:WKB

最終更新日:Apr 10, 2025

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

概要

GanosBaseサーフェスモデルをWKB形式で表現するプロセスでは、SFmeshオブジェクトからデータが抽出され、数値シーケンスに変換されます。 これらの数値シーケンスは、指定されたバイト順序に基づいてシリアル化されます。

WKBは、ネットワークデータ表現 (NDR、リトルエンディアンとも呼ばれます) と外部データ表現 (XDR、ビッグエンディアンとも呼ばれます) の2種類のバイト順序をサポートします。

幾何学的構造

GanosBaseサーフェスモデルは、Open Geospatial Consortium (OGC) Simple Featureモデルで定義されている基本タイプに加えて、次の幾何学的構造もサポートしています。

  • IndexSurface

  • TriangleStrip

  • TriangleFan

詳細については、「サーフェスメッシュモデルのデータモデル」をご参照ください。

数値定義

  • Uint1: 8ビット (1バイト) 符号なし整数。

  • バイト: 8ビット (1バイト) 符号付き整数。

  • Uint16: 16ビット (2バイト) 符号なし整数。

  • Uint32: 32ビット (4バイト) 符号なし整数。

  • フロート: IEEE 754標準を使用して表される32ビット (4バイト) 浮動小数点数。

  • Double: IEEE 754標準を使用して表される64ビット (8バイト) 浮動小数点数。

説明

上記の数値定義は、XDRおよびNDRバイト順に適用されます。

リソースプランの仕様

拡張既知テキスト (EWKT) 仕様は、空間参照システム識別子 (SRID) を組み込むためにWKTの拡張として開発されています。 特定のメンバー変数は、SRIDを指定した場合にのみ使用できます。

定義

一般的な定義

// Basic Type definitions
// byte : 1 byte
// uint8: 1 byte
// uint16: 2 byte
// uint32 : 32 bit unsigned integer (4 bytes)
// float: single precison number (4 bytes)
// double : double precision number (8 bytes)
enum WKBByteOrder {
    wkbXDR = 0, // Big Endian
    wkbNDR = 1 // Little Endian
}

// point type
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];
}

// Normal Point
NormalPoint {
    float x;
    float y;
    float z;
}

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

// Texcoord Point
TexcoordPoint {
    float x;
    float y;
}

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

// String
String
{
    uint32 stringLength;
    byte string[stringLength];
}

// Var int
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; /* if 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, or 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  WKBGEOMFLAG0x04000000
    #define  WKBNORMALFLAG  0x02000000
    #define  WKBTEXCOORDFLAG0x01000000
    #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 */    byte byteOrder;
    uint32 wkbType;

    /*
    #define WKBZOFFSET  0x80000000
    #define WKBMOFFSET  0x40000000
    #define WKBSRIDFLAG 0x20000000
    #define  WKBGEOMFLAG0x04000000
    #define  WKBNORMALFLAG  0x02000000
    #define  WKBTEXCOORDFLAG0x01000000
    #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]; /* 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 */
}