このトピックでは、点群モデルの詳細と使用方法について説明します。
概要
概要
点群モデルは、通常、3Dスキャナがオブジェクトをスキャンするときに生成される点からなる。 各点は、3D座標のセットを含む。 いくつかの点は、RGB情報または強度を含み得る。 点群データは、空間座標と、複雑な属性次元で提示される多数の点とを含む。
GanosBase PointCloudは、PostgreSQLの拡張機能です (PolarDB for PostgreSQL 。 GanosBase PointCloudは、点群データの圧縮、点群データの解凍、属性統計の収集などの機能を提供し、PostgreSQLが点群データを効率的かつ迅速に保存および管理できるようにします。 GanosBasePointCloudは、他のGanosBaseモジュールと連携して、点群データの空間分析を実行できます。
機能
GanosBase PointCloudは、PcPointおよびPcPatchデータ型を提供します。 PcPointは、点群データのインポートとエクスポート、点群スキーマのクエリ、点群データの空間クエリをサポートする点群の基本オブジェクトです。 PcPatchは、点群データのパッケージング、点群データパケットの圧縮および解凍、点群データパケットのスキーマクエリ、および点群データパケットのフィルタリングをサポートする点群データの集合である。
ビジネスシナリオ
GanosBase PointCloudは、次のシナリオで一般的に使用されます。
3Dモデリングとビジュアライゼーション
GanosBase PointCloudを使用して、3Dスキャンデータを保存および処理し、ポイントクラウドデータを使用して3Dモデリングと視覚化を実行できます。 これは、建築設計、都市計画、文化的遺物保護などの分野で役立ちます。
ロボット工学と自動運転
GanosBase PointCloudは、ロボット工学および自動運転システムの3D知覚データを処理するために使用できます。 環境知覚、障害物検出、および経路計画を含む特徴は、点群データを使用することによって達成することができる。
産業測定および品質保証
産業分野では、GanosBase PointCloudを使用して、3Dスキャナーを使用して取得された製品の表面形状データなどの3D測定データを処理できます。 このようなデータは、品質保証、製品設計、および製造プロセスの最適化に使用できます。
コンポーネント
点群形式テーブル
元の点群データは、いくつかの次元値を含み得る。 異なる値は、異なるレベルの精度を提供する。 GanosBase PointCloudで使用されるスキーマドキュメントの形式は、PDALライブラリで使用される形式と同じです。 スキーマドキュメントには、各点の次元と各次元のデータ型を含むmetedataが記述されています。
スキーマ文書および対応するPCIDは、pointcloud_formatsテーブルに格納される。
点群オブジェクト
PcPointまたはPcPatchタイプのデータを点群テーブルに格納できます。
PcPointは、基本的な点群オブジェクトである。 各PcPointオブジェクトは、少なくともx座標およびy座標を含む。 それはより多くの次元を含むことができます。
PcPointオブジェクトの次のサンプルJSONコードを参照してください。
{ "pcid": 1、 "pt": [0.01, 0.02, 0.03, 4] }
次のパラメータに注意してください。
PCID: pointcloud_formatsテーブルを指す外部キー。
pt: PCIDで指定されたpointcloud_formatsテーブルのスキーマドキュメントで説明されている形式のポイントクラウドの情報。
PcPatchオブジェクトは、互いに近くに位置するPcPointオブジェクトの集合である。 PcPatchオブジェクトを使用して、データベース内の行数を減らすことができます。
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。pointcloud_formatsテーブルを指す外部キーです。 |
srid | integer | spatial_ref_sysテーブルを指す外部キーである点群列のSRID。 |
type | varchar (30) | PcPointまたはPcPatchデータ型を使用します。 |
次のステートメントを実行して、現在のデータベースのすべてのジオメトリデータ列を照会できます。
SELECT * FROM pointcloud_columns;
データ圧縮
ほとんどの場合、点群データの量は大きい。 GanosBase PointCloudでは、スキーマドキュメントの定義に次の行を追加することで、データ圧縮方法を指定できます。
<pc:metadata>
<Metadata name="compression"> Compression method </Metadata>
</pc:metadata>
次の圧縮方法がサポートされています。
なし: データは圧縮されません。 PcPointおよびPcPatchオブジェクトは、スキーマドキュメントで定義されたタイプと形式を使用してバイト配列として格納されます。 デフォルト値です。
次元: PcPacthオブジェクトは、適切な圧縮方法を有効にした次元データ配列のコレクションとして格納されます。 この値はPcPatchオブジェクトにのみ適用されます。 PcPointオブジェクトは、None値と同じ方法で格納されます。
ランレングス符号化: 可変性の低い次元に使用される。
一般的なビット除去: 小さな範囲で変動する寸法に使用されます。
zlib: 他の圧縮方法が適用できないディメンションに使用されます。
LAZまたはLASZip: LIDARデータの標準圧縮方法。
次元圧縮
次のPcPatchオブジェクトには、4つのディメンションと6つのポイントがあります。
{
"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]
]
}
次元圧縮を使用すると、PcPacthオブジェクトは理論的には次のオブジェクトと同等になります。
{
"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]
]
}
同様の領域をサンプリングするPcPointオブジェクトのうちの小さいサイズのPcPatchオブジェクトの場合、次元圧縮の圧縮比は3:1〜5:1である。
クイックスタート
概要
拡張機能の作成、ポイントクラウドスキーマの定義、テーブルの作成、データの挿入、属性の計算など、GanosBase PointCloudエンジンの使用手順に従います。
構文
拡張機能の作成
CREATE extension ganos_pointcloud cascade; CREATE extension ganos_pointcloud_geometry cascade;
説明アクセス許可の問題を回避するために、パブリックモードで拡張機能をインストールします。
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 coordinate as a long integer. You must use the scale and offset information of the header to determine the double value.</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 coordinate as a long integer. You must use the scale and offset information of the header to determine the double value.</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 coordinate as a long integer. You must use the scale and offset information of the header to determine the double value.</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>The intensity value is the integer representation of the pulse return magnitude. This value is optional and system specific. However, it should always be included if available.</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>');
点群データ型
-- The PcPoint data type CREATE type pcpoint(...); The dimension information of a point is defined by the schema. For the PcPoint data type, each point is stored as a row. For example, ST_MakePoint(1, ARRAY[2,3,4,0.5]) returns a PcPoint object. -- The PcPatch data type. CREATE type pcpatch(...); A PcPatch object consists of a set of points and supports compression. The compression method is specified by using the compression parameter in the schema. You can use a PcPatch object to compress a set of points and store the data in one row to save storage. Spatial query is supported.
点群テーブルの作成
-- A table of points CREATE TABLE points ( id SERIAL PRIMARY KEY, pt PCPOINT(1) -- (1) indicates the schema whose PCID is 1 in the pointcloud_formats table. ); -- A table of patches 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 リファレンス」をご参照ください。