2020/5/28更新
点群PNG(Point Cloud PNG)とは,画像フォーマットPNG形式を流用したポイントデータのリストを扱うためのフォーマットです.
ここで扱うポイントデータとは,2次元または3次元の位置座標を持ち,それに紐づけられる何らかのデータを持つものです.
ファイルフォーマット
ファイルフォーマットはPNG(Portable Network Graphics, ISO/IEC 15948:2004)を使用し,タイプはカラーが利用できる以下のいずれかを使用します.
2: Truecolour
3: Indexed-colour
6: Truecolour with alpha
整数からピクセルへの変換
点群PNGでは,座標の位置や描画範囲などの整数値をピクセルに変換して画像に保持します.
整数値(v)からピクセルの色(r,g,b)への変換は以下のコードで行います.
r = 0xff & ( v >> 16 )
g = 0xff & ( v >> 8 )
b = 0xff & v
配置及びレコード長
画像は,ヘッダ情報及びポイント情報をそれぞれいくつかのピクセルの組み合わせで表現します.ヘッダー情報は省略できます.
ヘッダー情報のピクセル数は可変です.1ポイントのポイント情報を表現するピクセル数はファイル内で同一で,それをレコード長と呼びます.
ヘッダ情報及びポイント情報を表すピクセルは,画像の左上端から行優先で配置します.すなわち,まずは右方向へ配置していき,右端に達したら1行下の左端に移動し,これを繰り返します.通常ヘッダー情報及びポイント情報は連続したピクセルになりますが,画像右端で折り返される場合は連続しません.ヘッダー情報はすべてのポイント情報よりも先に配置する必要があります.
画像サイズの幅は,レコード長の整数倍でなければなりません.
ヘッダー
タイプ,ヘッダー長,レコード長,レコード数,表示範囲の大きさを示します.
第1ピクセル | 第2ピクセル | 第3ピクセル |
第4ピクセル | 第5ピクセル | 第6ピクセル | 第7ピクセル |
---|
type | headerLength | recordLength |
recordCount | widht | height | ... |
それぞれの属性の書式及び内容は以下の通りです.なお,ここでいう表示範囲とは,PNGが持つ本来のピクセルサイズではなく,点群データを表示するときの範囲です
type | 符号無し整数 | データのタイプ.2D点群/3D点群を識別するために使用します. 1: 2D点群 2: 3D点群 |
headerLength | 符号無し整数 | ヘッダー長(ピクセル数) |
recordLength | 符号無し整数 | レコード長(ピクセル数) |
recordCount | 符号無し整数 | レコード数.第4ピクセルの値×224+第5ピクセルの値で求めます. |
width | 符号無し整数 | 表示範囲横幅 |
height | 符号無し整数 | 表示範囲縦幅 |
第8ピクセル以降の使用方法は自由で,ユーザー定義可能です.
ポイント情報
各ポイントのコードや色などの情報を表現します.
第1ピクセル | 第2ピクセル | 第3ピクセル |
第4ピクセル | 第5ピクセル |
---|
c | x | y | z | option | ... |
ただし,タイプが2D点群(type=1)の場合はzは省略されます.また,optionは省略可です.それらが省略された場合はピクセルを左に詰めます.
それぞれの属性の書式及び内容は以下の通りです.
c | 符号無し整数またはRGB |
表示するスタイルを示すコードまたは表示するする色
|
x | 符号無し整数 | 表示範囲左端からの距離 |
y | 符号無し整数 | 表示範囲上端からの距離 |
z | 符号無し整数または符号付き整数 | 高さ方向を表す数値,内容は任意 |
option | フォーマットは任意 |
内容は任意で,省略可.IDを指定することを想定 |
optionより後のピクセルの使用方法は自由で,ユーザ定義可能です.
データ範囲外
画像の末端部で,配置するポイント情報が存在しないピクセルは規定しません.
サンプル
「明治時代初期土地利用・被覆デジタルデータベース」(
農研機構農業環境変動研究センター)で公開されている迅速測図のGeoJSONポイントデータをもとに,点群PNGを作成しました.
迅速測図点群PNG(1,697,664点,1.83Mb)
簡易ビューア
合資会社キューブワークスの北尾様がWebGLを使って高速表示するウェブアプリを作ってくださいました.
迅速測図(2020©KITAO Kaoru)
オリジナルのGeoJSONファイルのサイズが約381Mbですので,それに比べると約0.49%(約1/203)の大きさまで縮小されています.
また,Yuzo MatsuzawaさんによりMapbox Vector Tileに変換したものが公開されていますが(
habs-mvt),そのサイズ33,885Kbyteと比べても約6.3%(約1/16)になっています(描画に直接関係のない情報をすべて削ってはいますが).
フォーマット | ファイルサイズ(kb) |
点群PNG | 1,876 |
GeoJSON | 381,010 |
Mapbox Vector Tile | 33,885 |
(補足)
このサンプルは各点がほぼ等間隔に並ぶグリッドデータですので,各点毎に座標値を保持する必要がある点群PNGやGeoJSON,Mapbox Vector Tileで表現するには本来は不向きなデータです.このようなグリッドデータは,PNG標高タイルのようなメッシュ形式のデータとして整備し,実行時にクライアント環境で地図上に展開する方が効率的です.