2021/12/13公開
点群PNG(Point Cloud PNG)とは,画像フォーマットであるPNG形式を利用してポイントデータを扱うためのフォーマットです.
ここで扱うポイントデータは,2次元または3次元の位置座標を持つもので,それらに関連付けられる付加情報を含みます.
点群PNGは
リストPNG ver. 0.2の派生フォーマットです.
ファイルフォーマット
ファイルフォーマットはウェブブラウザーで一般的に利用できる画像フォーマットであるPNG(Portable Network Graphics, ISO/IEC 15948:2004)を使用し,PNGのカラータイプはRGBが利用できる以下のいずれかを使用します.
- 2: Truecolour
- 3: Indexed-colour
- 6: Truecolour with alpha
データ型
点群PNGでは数値データをピクセルに変換して使用します.仕様上定義されるデータ型には以下の5種類があるほか,ユーザーカラムでは任意のデータ型を使用できます.
データ型 | ピクセル数 |
RGB | 1ピクセル |
符号無し整数 | 24ビット符号無し整数 | 1ピクセル |
48ビット符号無し整数 | 2ピクセル |
符号付き整数 | 24ビット符号付き整数 | 1ピクセル |
48ビット符号付き整数 | 2ピクセル |
※このデータ型は画像ファイルとの入出力で使用するものです.RGBと整数のみですが,後述するように利用時に係数やオフセットを使用するので実際には小数も扱えます.
RGBは,ピクセルをそのまま色として取得します
24ビット符号無し整数では,1ピクセルのRGB値(
r,
g,
b)から以下の式で値(
v)を取得します.
48ビット符号無し整数では,2つのピクセルのRGB値,第1ピクセル(
r1,
g1,
b1)及び第2ピクセル(
r2,
g2,
b2)から以下の式で値(
v)を取得します.
24ビット符号付き整数では,1ピクセルのRGB値(
r,
g,
b)から以下の式で値(
v)を取得します.
48ビット符号付き整数では,2つのピクセルのRGB値,第1ピクセル(
)及び第2ピクセル(
)から以下の式で値(
)を取得します.
不透明度を使用する場合は255(最大)を指定することを推奨します.不透明度に0が指定された場合,そのピクセルを含むデータは無効値として扱います.
ピクセルの配置
数値データを表す各ピクセルは画像内に通常のラスタースキャン順に配置します.すなわち,画像の左上端から開始してまず右方向へ配置し,右端に達したら1行下の左端に移動してまた右方向へ配置します.これを配置するデータが無くなるまで繰り返します.
画像の末端部で配置するデータが存在しないピクセルの色は規定しません.
データ構造
配置する情報はヘッダーとポイント情報からなり,この順で配置します.
ヘッダーに使用するピクセル数は可変で,これをヘッダー長と呼びます.
各ポイント情報は概念的には1つの固定長レコードで表現され,ポイント情報内の個々の数値データをカラムと呼びます.なお実際には,ポイント情報はカラム毎にデータを保存します.
また,ポイントの数量をレコード数と呼びます.
ヘッダー
点群PNGメインファイルのヘッダーでは,データのタイプ,ヘッダー長,レコード数,カラム数,カラム定義,点群PNGのサブタイプ,地図投影法,座標情報などを示し,構造及び配置順序は以下の通りです.また,それらの後にヘッダー長で示した長さまでユーザーヘッダーを指定することができ,その使用方法は任意です.
フィールド名 | ピクセル数 | データ型 | 内容 |
type |
1 |
RGB |
R: リストPNGバージョン依存番号, 1に固定
G: 点群PNGメインファイル識別子, 1に固定
B: 点群PNGバージョン依存番号,1に固定
|
headerLength |
1 |
符号無し整数 |
ヘッダー長(ピクセル数) |
recordCount |
2 |
符号無し整数 |
レコード数 |
columnCount | 1 | 符号無し整数 | カラム数 |
infoX |
1 |
RGB |
R: (上位4ビット) カラムデータ型,3(符号付き整数)に固定
(下位4ビット) X座標カラムピクセル数, 範囲は1~2
G: X座標オフセットピクセル数, 範囲は0~2
B: X座標係数常用対数(符号付き8ビット整数),範囲は-128~127
|
offsetX |
0~2 |
符号付き整数 |
X座標オフセット デフォルト値 0 |
infoY |
1 |
RGB |
R: (上位4ビット) カラムデータ型,3(符号付き整数)に固定
(下位4ビット) Y座標カラムピクセル数, 範囲は1~2
G: Y座標オフセットピクセル数, 範囲は0~2
B: Y座標係数常用対数(符号付き8ビット整数),範囲は-128~127
|
offsetY |
0~2 |
符号付き整数 |
Y座標オフセット デフォルト値 0 |
infoZ |
0~1 |
RGB |
R: (上位4ビット) カラムデータ型,3(符号付き整数)に固定
(下位4ビット) Z座標カラムピクセル数, 範囲は0~2
G: Z座標オフセットピクセル数, 範囲は0~2
B: Z座標係数常用対数(符号付き8ビット整数),範囲は-128~127
|
offsetZ |
0~2 |
符号付き整数 |
Z座標オフセット デフォルト値 0 |
infoColor |
0~1 |
RGB |
R: (上位4ビット) カラムデータ型,1(RGB)に固定
(下位4ビット) カラムピクセル数,1に固定
G: オフセットピクセル数,0に固定
B: 係数常用対数,0に固定
|
infoId |
0~2 |
RGB |
R: (上位4ビット) カラムデータ型,2(符号無し整数)に固定
(下位4ビット) カラムピクセル数,範囲は1~2
G: オフセットピクセル数,0に固定
B: 係数常用対数,0に固定
|
infoClass |
0~1 |
RGB |
R: (上位4ビット) カラムデータ型,2(符号無し整数)に固定
(下位4ビット) カラムピクセル数,1に固定
G: オフセットピクセル数,0に固定
B: 係数常用対数,0に固定
|
userColumnDefs |
不定 |
ユーザーカラム定義 ユーザーカラムを使用する場合は,リストPNG ver.0.2の仕様に従って記述 |
subType |
1 |
RGB |
R: カラム使用フラグ
カラムを使用する場合は1,使用しない場合は0を指定
第1~4ビット: 未使用(0), 第5ビット: z,第6ビット: color,第7ビット: id, 第8ビット: class
G: 地図投影法, 0: 未定, 1: ウェブメルカトル, 2: 緯度経度
B: 地図投影法オプション
(ウェブメルカトルの場合)ウェブメルカトル次数, 範囲は0~47
(緯度経度の場合)未使用,0固定 |
userHeader |
不定 |
使用方法は任意 |
2D点群の場合は,infoZは使用しません.
X,Y,Z座標情報でオフセットピクセル数に0が指定された場合は,オフセット用のヘッダーフィールド(offsetX,offsetY,offsetZ)は使用しません.
infoColor, infoId, infoClassは,ポイント情報でそれぞれcolor, id, classを出力しない場合は使用しません.
ポイント情報
ポイント情報では,各ポイントの位置や色,ID,スタイルなどのカラムを記述します.カラムの内容と配置順序は以下の通りです.ファイル内ではカラム毎にピクセルを配置し,カラム内の順番はすべてのカラムで一致させます.
カラム名 | ピクセル数 | データ型 | 内容 |
x | 1~2 | 符号付き整数 | X座標値 |
y | 1~2 | 符号付き整数 | Y座標値 |
z | 0~2 | 符号付き整数 | Z座標値 |
color | 0~1 | RGB | 表示する色 |
id | 0~1 | 符号無し整数 | ポイントを識別するID
|
class | 0~1 | 符号無し整数 | 表示スタイルを指定するクラス
|
ヘッダーのカラム使用フラグ(subTypeフィールドのR値)に従って,z, color, id, classの各カラムは省略されます.classカラム以降にはユーザーカラムを使用でき,使用方法は任意です.ユーザーカラムを使用する場合は,ヘッダーのuserColumnDefsにカラム定義を記述する必要があります.
座標値の変換
ポイント情報のx, y, zカラムには整数として保存されますが,それらはヘッダーの係数常用対数とオフセット値を使用して,元データに変換して使用されます.
ヘッダーで指定されるX,Y,Z座標の係数常用対数は,座標値を割る係数の常用対数(10を底とする対数)を表します.例えばこの値が4の場合は,10000で割って元データに変換することを表し,元データの小数点以下4桁までが保持されていることになります.
係数常用対数がfactorlog, オフセット値がoffsetのとき,取得値v0(整数)から変換値vを求める変換式は以下のようになります.
v = ( v0 + offset ) / 10factorlog
ウェブメルカトル次数
投影法でウェブメルカトルを使用する場合は,地図の水平分解能を示すためのウェブメルカトル次数を指定します.
ここでウェブメルカトル次数と呼んでいるものは,地球全体を表す地図の横幅の大きさを,2を底とする対数(二進対数)で表したものです.
この値は,Leafletのズームレベルに8を加えた値に相当します(256pxタイルの場合).例えば,ウェブメルカトル次数24は,ズームレベル16に相当します.
地図投影法と座標値の単位
点群PNG自体は地図情報に限定されず,X,Y,Z座標の単位に制限はありませんが,ヘッダーsubTypeフィールドで地図投影法を指定すると,X,Y,Z座標の単位も決定されます.
ウェブメルカトルの場合のX,Y座標の単位は,ウェブメルカトル次数がoの場合,地球全体を表す地図の横幅を1としたときの1/2oとなります.
緯度経度の場合のX,Y座標の単位は度数となります.
ウェブメルカトル,緯度経度いずれの場合も,Z座標の単位はメートルとなります.例えばZ座標係数常用対数が4の場合は垂直分解能1mmに相当します.