WKB(Well-Known Binary)
2026年05月25日 14:06
GISBoxは、OSGB/GEOTIFF/RVTなどの複数のGISフォーマットでの編集をサポートし、3DTiles/Terrainへの変換や公開が可能なワンストップ3DGIS データ編集、変換、公開プラットフォームです。
概要
WKB(Well-Known Binary)は、Open Geospatial Consortium(OGC)によって定義された幾何オブジェクト表現用のバイナリエンコーディング標準です。ポイント、ライン、ポリゴンなどの空間要素をコンパクトなバイトストリーム形式で保存します。テキスト形式であるWKTと比較して、より高い保存効率と高速な転送・解析性能を持っています。その構造は通常、1バイトのバイトオーダ識別子(0x01 はリトルエンディアン)、4バイトのジオメトリタイプコード(例:Point=1、LineString=2)、および後続の座標データで構成されます。座標値は IEEE 754 倍精度浮動小数点数として順番に格納され、PostGIS や MySQL などの空間データベースにおいて、ジオメトリフィールドの基盤保存形式として広く利用されています。

データフォーマットの概要
WKB(Well-Known Binary)のファイル構造は OGC Simple Features 仕様に従っており、コンパクトなバイナリシーケンスで幾何オブジェクトをエンコードします。その構造を項目ごとに説明すると以下の通りです。
- バイトオーダ識別子(1バイト):先頭1バイトは符号なし整数であり、0x00 はビッグエンディアン(Big-Endian)、0x01 はリトルエンディアン(Little-Endian)を表します。これにより後続のすべてのマルチバイトデータの解析順序が決定されます。
- ジオメトリタイプコード(4バイト):バイトオーダの直後に続く4バイトの符号なし整数で、ジオメトリオブジェクトの種類を識別します。
- SRID識別子(任意、4バイト):タイプコードの上位ビットに 0x20000000 が含まれる場合、タイプコードの後に4バイトの符号なし整数が続き、空間参照システム識別子(例:EPSG:4326)を示します。
- 長さフィールド(4バイト、多要素構造のみ):MultiPoint、MultiLineString、MultiPolygon、GeometryCollection の場合、SRID(またはタイプコード)の直後に4バイト整数が続き、子要素数を表します。
- 空ジオメトリ(EMPTY):タイプコードのみで識別され(例:1 は Point)、座標データや長さフィールド、SRID を含みません。構造は
[バイトオーダ][タイプコード] のみで、合計5バイトです。
長所
- 高い保存効率:WKTテキスト形式と比較して、WKBは40%〜60%程度の保存冗長性を削減できます。IEEE 754 倍精度浮動小数点数によるコンパクトな座標エンコードにより、ディスクおよびメモリ使用量を大幅に削減します。
- 高速な転送・解析:バイナリ形式のため文字列解析が不要であり、高頻度な読み書きシナリオに適しています。そのため、PostGIS や MySQL などの空間データベースにおけるデフォルト保存形式として採用されています。
- 高いクロスプラットフォーム互換性:標準化されたバイトオーダ(0x00 / 0x01)により、異なるOSやCPUアーキテクチャ間でも曖昧さなく解析可能であり、主要なGISツールチェーンとのシームレスな統合を実現します。
- 複雑なジオメトリ構造をサポート:ポイント、ライン、ポリゴン、マルチパート構造、ジオメトリコレクションを完全にサポートしており、高位ビットフラグ(0x80000000、0x40000000)を利用することで3次元(Z)や測定値(M)の拡張にも対応しています。
- データベースでのネイティブサポート:PostgreSQL / PostGIS、MySQL、Kingbase などの主要空間データベースで直接サポートされており、追加変換なしで空間関数演算に利用できます。
短所
- 可読性がない:バイナリバイト列は人間が直接読むことができず、デバッグには ST_AsBinary()、hex() 関数、または GIS ソフトウェアによる可視化が必要です。
- デバッグや障害解析が困難:座標異常やバイトオーダの不一致などの問題が発生した場合、1バイトずつ解析する必要があり、開発・運用コストが増加します。
- メタデータ埋め込み機能が不足:座標系名称、単位、投影パラメータなどの説明情報を含まず、SRID は整数値(例:4326)のみで表現されるため、外部メタデータ管理に依存します。
- バージョン・拡張互換性のリスク:3Dや測定値拡張は高位ビットフラグに依存するため、システムごとに 0xC0000001 などの拡張型への対応が異なり、システム移行時に問題が発生する可能性があります。
- 相互運用時に明示的変換が必要:WKT や GeoJSON などのテキスト形式と連携する場合、ST_GeomFromWKB() や ST_AsText() などの関数呼び出しが必要となり、SQL の複雑化や性能コスト増加につながります。
応用シーン
WKB(Well-Known Binary)は、空間データベースの基盤保存形式および高効率なデータ交換形式として広く利用されています。PostGIS、MySQL、Kingbase などのシステムではデフォルトのジオメトリエンコーディング形式として採用されており、GIS におけるポイント、ライン、ポリゴンなどの空間要素の高速なシリアライズ・デシリアライズを実現しています。また、空間インデックス構築、近傍検索、トポロジー解析などの高頻度処理を支援し、分散型地理データ転送、地図タイル前処理、モバイルGISアプリケーションにおいても、そのコンパクトなバイナリ構造によりネットワーク帯域とメモリ消費を大幅に削減します。WKB は、空間データベース、GIS エンジン、フロントエンド描画モジュールを接続する重要な相互運用フォーマットとして機能しています。
例
1. 二次元ポイント Point(1 1) を例とした WKB 表現。
ファイルの開き方
1. ジオメトリタイプと WKB コンバーターを定義。
関連 GIS ファイル
ASCAT
DRG
TopoJSON
WKT
参考
- https://zh.filedesc.com/file/wkb
- https://www.cnblogs.com/qdhotel/p/4887032.html
- https://juejin.cn/post/7381375087206432779