2020/5/18更新
点群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ポイントのポイント情報を表現するピクセル数はファイル内で同一であり3~4ピクセルです.それをレコード長と呼びます.
ヘッダ情報及びポイント情報を表すピクセルは,画像の左上端から行優先で配置します.すなわち,まずは右方向へ配置していき,右端に達したら1行下の左端に移動し,これを繰り返します.通常ヘッダー情報及びポイント情報は連続したピクセルになりますが,画像右端で折り返される場合は連続しません.ヘッダー情報はすべてのポイント情報よりも先に配置する必要があります.
画像サイズ(幅と高さのピクセル数)は任意で,データの内容に影響しませんが,幅はレコード長の整数倍とすることを推奨します.
ヘッダ情報
表示範囲及びタイプを表現し,省略化可能です.レコード長により属性の配置が異なります.
レコード長3ピクセルの場合
第1ピクセル | 第2ピクセル | 第3ピクセル |
---|
width | height | end |
レコード長4ピクセルの場合
第1ピクセル | 第2ピクセル | 第3ピクセル | 第4ピクセル |
---|
width | height | type | end |
それぞれの属性の書式及び内容は以下の通りです.なお,ここでいう表示範囲とは,PNGが持つ本来のピクセルサイズではなく,点群データを表示するときの範囲です
width | 符号無し整数 | 表示範囲横幅 |
height | 符号無し整数 | 表示範囲縦幅 |
end | 黒色透明 | ヘッダが終了することを表します.常に黒色透明です. |
type | 符号無し整数 | データのタイプ.2D点群/3D点群を識別するために使用します. 0x020000: 2D点群 0x030000: 3D点群 |
ポイント情報
各ポイントの座標や色などの情報を表現します.レコード長により属性の配置が異なります.
レコード長3ピクセルの場合(2D点群のみ)
第1ピクセル | 第2ピクセル | 第3ピクセル |
---|
x | y | color |
レコード長4ピクセル,2D点群の場合
第1ピクセル | 第2ピクセル | 第3ピクセル | 第4ピクセル |
---|
x | y | option | color |
レコード長4ピクセル,3D点群の場合
第1ピクセル | 第2ピクセル | 第3ピクセル | 第4ピクセル |
---|
x | y | z | color |
それぞれの属性の書式及び内容は以下の通りです.
x | 符号無し整数 | 表示範囲左端からの距離 |
y | 符号無し整数 | 表示範囲上端からの距離 |
z | 符号無し整数または符号付き整数 |
高さ方向を表す数値,内容は任意 |
option | フォーマットは任意 |
内容は任意で,省略可.IDまたはグループIDを指定することを想定 |
color | RGBまたは符号無し整数 |
表示で使用する色またはカラーパレットインデックス |
データ範囲外
画像の末端部で,配置するポイント情報が存在しないピクセルには黒色透明(RGBA=0,0,0,0)を描画します
サンプル
「明治時代初期土地利用・被覆デジタルデータベース」(
農研機構農業環境変動研究センター)で公開されている迅速測図のGeoJSONポイントデータをもとに,点群PNGを作成しました.
迅速測図点群PNG(1,697,664点,2.06Mb)
オリジナルのGeoJSONファイルのサイズが約381Mbですので,それに比べると約0.56%(約1/180)の大きさまで縮小されています.
また,Yuzo MatsuzawaさんによりMapbox Vector Tileに変換したものが公開されていますが(
habs-mvt),そのサイズ33,885Kbyteと比べても約6.3%(約1/16)になっています(描画に直接関係のない情報をすべて削ってはいますが).
フォーマット | ファイルサイズ(kb) |
点群PNG | 2,119 |
GeoJSON | 381,010 |
Mapbox Vector Tile | 33,885 |
(補足)
このサンプルは各点がほぼ等間隔に並ぶグリッドデータですので,各点毎に座標値を保持する必要がある点群PNGやGeoJSON,Mapbox Vector Tileで表現するには本来は不向きなデータです.このようなグリッドデータは,PNG標高タイルのようなメッシュ形式のデータとして整備し,実行時にクライアント環境で地図上に展開する方が効率的です.