このトピックでは、点群モデルのユースケース、アーキテクチャ、およびクイックスタートガイドについて説明します。
モデルの概要
概要
点群は、実世界のエンティティをスキャンする 3D レーザースキャナーによって出力されるレコードの集合です。各点には 3D 座標が含まれ、一部には色 (RGB) や強度情報が含まれる場合もあります。点群データは空間座標を持ち、大容量で複雑な属性ディメンションを持つという特徴があります。
GanosBase PointCloud は、PolarDB for PostgreSQL といった PostgreSQL 互換のデータベース用の時空間エンジン拡張機能です。圧縮、解凍、属性統計により点群データの効率的な保存と管理を可能にし、他のGanosBase モジュールと連携して点群データに空間分析機能を提供します。
機能
GanosBase ポイントクラウドは、PcPoint と PcPatch の 2 つのデータ型を提供します。PcPoint は、データのインポートとエクスポート、メタデータのクエリ、および空間クエリをサポートする基本的なポイントクラウドオブジェクトです。PcPatch は、データのパッケージ化、圧縮と解凍、メタデータのクエリ、およびフィルタリングをサポートするポイントクラウドオブジェクトのコレクションです。
ユースケース
GanosBase PointCloud は、次のようなシナリオでよく使用されます。
-
3D モデリングと可視化
GanosBase 点群は、モデリングと可視化のために 3D スキャンデータを保存および処理でき、建築設計、都市計画、文化財保護に役立ちます。
-
ロボティクスと自動運転
GanosBase PointCloud は、ロボティクスおよび自動運転システムにおける 3D 認識データを処理し、環境センシング、障害物検出、および経路計画をサポートします。
-
産業用測定と品質管理
産業分野では、GanosBase PointCloud は、レーザースキャナーからの製品表面プロファイルなどの 3D 測定データを処理できます。このデータは、品質管理、製品設計、および製造プロセスの最適化に利用できます。
アーキテクチャ
点群スキーマ
未加工の点群データは、それぞれ精度が異なる複数の次元を持つことがあります。GanosBase Pointcloud は、PDAL と同じスキーマドキュメント形式 (以下、スキーマドキュメントと呼びます) を使用して、各点の次元と各次元のデータ型を記述します。
スキーマドキュメントは、一意の PCID と共に pointcloud_formats テーブルに格納されます。
点群オブジェクト
PcPoint または PcPatch 型を使用して、点群テーブルに点群データを格納できます。
-
PcPointは基本的な点群オブジェクトです。少なくとも X と Y の座標ディメンションを持ち、追加のディメンションを含む場合があります。PcPointオブジェクトの JSON 表現は次のとおりです:{ "pcid": 1, "pt": [0.01, 0.02, 0.03, 4] }各項目の意味は次のとおりです:
-
PCID:pointcloud_formatsテーブルへの外部キー。 -
pt:PCIDによって参照されるスキーマドキュメントで記述された形式の点群データ。
-
-
PcPatchは、近くにあるPcPointオブジェクトのコレクションです。これにより、データベース内の行数が削減されます。PcPatchオブジェクトの JSON 表現は次のとおりです:{ "pcid": 1, "pts": [ [0.02, 0.03, 0.05, 6], [0.02, 0.03, 0.05, 8] ] }
ユースケースに基づいてタイプを選択します:
-
常に個々の点を処理する場合は、
PcPointを使用します。 -
大規模な点群データに対して効率的なクエリと操作を行うには、
PcPatchを使用します。
空間参照
空間参照系 (SRS) は、PointCloud オブジェクトが地球表面の特定の位置にどのようにマッピングされるかを定義します。
GanosBase は、SRID と呼ばれる整数を使用して SRS 定義を参照します。PointCloud オブジェクトは、その SRID 値を介して SRS に関連付けられます。
詳細については、「空間参照」をご参照ください。
データ列ビュー
GanosBase では、 PointCloud も、ジオメトリモデルにおけるジオメトリ列ビューと同様のポイントクラウド列ビューを提供します。
|
列 |
タイプ |
説明 |
|
schema |
varchar(256) |
テーブルを含むスキーマ。 |
|
table |
varchar(63) |
テーブルの名前。 |
|
column |
varchar(63) |
テーブル内の点群列の名前。 |
|
pcid |
integer |
点群列のスキーマドキュメント ID。これは、 |
|
srid |
integer |
点群列の SRID。これは、 |
|
type |
varchar(30) |
|
現在のデータベース内のすべての点群列をクエリします:
SELECT * FROM pointcloud_columns;
データ圧縮
点群データセットは、通常、非常に大規模です。GanosBase PointCloud では、スキーマドキュメントで圧縮方法を指定できます:
<pc:metadata>
<Metadata name="compression">compression_method</Metadata>
</pc:metadata>
次の圧縮方法がサポートされています:
-
None: デフォルト値。PcPointおよびPcPatchのバイト配列は、スキーマドキュメントで定義された型と形式を使用して、圧縮なしで格納されます。 -
Dimensional:PcPatchにのみ適用可能です。ディメンションごとに行指向ストレージを列指向ストレージに変換し、適切な圧縮スキームを適用します。 -
ランレングスエンコーディング: ばらつきの少ないディメンションに適しています。 -
共通ビット除去: 値が狭い範囲で変化するディメンションに適しています。 -
Deflate (zlib): 他の方法が適用できない場合のデフォルトの方法です。 -
LAZ/LASZip: LiDAR データの標準圧縮形式です。
ディメンション圧縮
4 つのディメンションと 6 つの点を持つ PcPatch の場合:
{
"pcid": 1,
"pts": [
[-126.99, 45.01, 1, 0],
[-126.98, 45.02, 2, 0],
[-126.97, 45.03, 3, 0],
[-126.96, 45.04, 4, 0],
[-126.95, 45.05, 5, 0],
[-126.94, 45.06, 6, 0]
]
}
ディメンション圧縮が有効になると、PcPatch は理論的に次のようになります:
{
"pcid": 1,
"dims": [
[-126.99, -126.98, -126.97, -126.96, -126.95, -126.94],
[45.01, 45.02, 45.03, 45.04, 45.05, 45.06],
[1, 2, 3, 4, 5, 6],
[0, 0, 0, 0, 0, 0]
]
}
データが比較的一様な小サイズの PcPatch オブジェクトの場合、ディメンション圧縮は 3:1 から 5:1 の圧縮率を達成します。
クイックスタート
概要
このクイックスタートガイドでは、GanosBase PointCloud の使用方法 (拡張機能の作成、スキーマ定義、テーブルの作成、データの挿入、属性計算など) をすばやく理解できます。
構文リファレンス
-
拡張機能を作成します。
CREATE extension ganos_pointcloud cascade; CREATE extension ganos_pointcloud_geometry cascade;説明権限の問題を回避するために、
publicスキーマに拡張機能をインストールすることを推奨します。CREATE extension ganos_pointcloud WITH schema public; CREATE extension ganos_pointcloud_geometry WITH schema public; -
点群スキーマを定義します。
pointcloud_formatsテーブルはデフォルトで作成されます。XML スキーマをテーブルに挿入します。スキーマは、各ディメンションのデータサイズ、タイプ、名前、説明など、点群データの属性ディメンションを定義します。INSERT INTO pointcloud_formats (pcid, srid, schema) VALUES (1, 4326, '<?xml version="1.0" encoding="UTF-8"?> <pc:PointCloudSchema xmlns:pc="http://pointcloud.org/schemas/PC/1.1" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> <pc:dimension> <pc:position>1</pc:position> <pc:size>4</pc:size> <pc:description>長整数としての X 座標。ヘッダーの スケールとオフセット情報を使用して、 double 値を決定する必要があります。</pc:description> <pc:name>X</pc:name> <pc:interpretation>int32_t</pc:interpretation> <pc:scale>0.01</pc:scale> </pc:dimension> <pc:dimension> <pc:position>2</pc:position> <pc:size>4</pc:size> <pc:description>長整数としての Y 座標。ヘッダーの スケールとオフセット情報を使用して、 double 値を決定する必要があります。</pc:description> <pc:name>Y</pc:name> <pc:interpretation>int32_t</pc:interpretation> <pc:scale>0.01</pc:scale> </pc:dimension> <pc:dimension> <pc:position>3</pc:position> <pc:size>4</pc:size> <pc:description>長整数としての Z 座標。ヘッダーの スケールとオフセット情報を使用して、 double 値を決定する必要があります。</pc:description> <pc:name>Z</pc:name> <pc:interpretation>int32_t</pc:interpretation> <pc:scale>0.01</pc:scale> </pc:dimension> <pc:dimension> <pc:position>4</pc:position> <pc:size>2</pc:size> <pc:description>強度値は、パルスリターンマグニチュードの 整数表現です。この値はオプション であり、システム固有です。ただし、 利用可能な場合は常に含めるようにしてください。</pc:description> <pc:name>Intensity</pc:name> <pc:interpretation>uint16_t</pc:interpretation> <pc:scale>1</pc:scale> </pc:dimension> <pc:metadata> <Metadata name="compression">dimensional</Metadata> </pc:metadata> </pc:PointCloudSchema>'); -
点群データ型。
-- 点データ型: pcpoint -- ganos_pointcloud 拡張機能によって提供されるデータ型です。 -- 各点のディメンションはスキーマによって定義されます。 -- 各点は 1 行として格納されます。 -- 例: ST_MakePoint(1, ARRAY[2,3,4,0.5]) は PcPoint オブジェクトを返します。 -- パッチデータ型: pcpatch -- ganos_pointcloud 拡張機能によって提供されるデータ型です。 -- パッチは圧縮をサポートする点のコレクションです。圧縮方法はスキーマの「compression」設定によって決まります。 -- パッチは複数の点を 1 つの行に圧縮できるため、ストレージ容量を削減しながら空間クエリをサポートできます。 -
点群テーブルを作成します。
-- 点のテーブル CREATE TABLE points ( id SERIAL PRIMARY KEY, pt PCPOINT(1) -- (1) は pointcloud_formats の PCID = 1 のスキーマを参照します ); -- パッチのテーブル CREATE TABLE patches ( id SERIAL PRIMARY KEY, pa PCPATCH(1) ); -
PcPointデータを挿入します。INSERT INTO points (pt) SELECT ST_MakePoint(1, ARRAY[x,y,z,intensity]) FROM ( SELECT -127+a/100.0 AS x, 45+a/100.0 AS y, 1.0*a AS z, a/10 AS intensity FROM generate_series(1,100) AS a ) AS values; SELECT ST_MakePoint(1, ARRAY[-127, 45, 124.0, 4.0]); ------------------------- 010100000064CEFFFF94110000703000000400 SELECT ST_AsText('010100000064CEFFFF94110000703000000400'::pcpoint); ------------------------- {"pcid":1,"pt":[-127,45,124,4]} -
PcPatchデータを挿入します。INSERT INTO patches (pa) SELECT ST_Patch(pt) FROM points GROUP BY id/10; SELECT ST_AsText(ST_MakePatch(1, ARRAY[-126.99,45.01,1,0, -126.98,45.02,2,0, -126.97,45.03,3,0])); ------------------------- {"pcid":1,"pts":[ [-126.99,45.01,1,0],[-126.98,45.02,2,0],[-126.97,45.03,3,0] ]} -
PcPatch属性の平均を計算します。SELECT ST_AsText(ST_PatchAvg(pa)) FROM patches WHERE id = 7; ------------------------- {"pcid":1,"pt":[-126.46,45.54,54.5,5]} -
拡張機能を削除します (オプション)。
DROP extension ganos_pointcloud_geometry; DROP extension ganos_pointcloud cascade;
SQL リファレンス
完全な SQL リファレンスについては、「点群 SQL リファレンス」をご参照ください。