このトピックでは、点群データの詳細と使用方法について説明します。 点群データは、3D スキャナーがオブジェクトをスキャンする際に生成される点で構成されます。 各点には 3D 座標のセットが含まれます。 一部の点には RGB 情報や強度が含まれる場合があります。 点群データには空間座標と、複雑な属性ディメンションで表される大量の点が含まれます。
概要
GanosBase PointCloud は、PostgreSQL のプラグインです。 点群データの圧縮、点群データの展開、属性統計の収集といった機能を提供し、PostgreSQL による点群データの効率的かつ高速な格納・管理を可能にします。 GanosBase PointCloud は、GanosBase Geometry と連携して、点群データの空間分析を実行できます。
点群データ型
点群データの型には、pcpoint と pcpatch があります。 pcpoint データ型の場合、各点は 1 行として格納されます。 点のディメンションは点群スキーマで定義されます。 pcpatch データ型の場合、複数の点がセットとして格納されます。 pcpatch データ型の点群データは空間クエリをサポートし、圧縮によってストレージ使用量を削減できます。 点群スキーマの圧縮パラメータは、点群データの圧縮方法を指定します。
点群スキーマ
pointcloud_formats テーブルには点群スキーマが格納されます。 各スキーマには、点群オブジェクトの属性ディメンションと各ディメンションに関する情報が含まれます。 ディメンション情報には、サイズ、型、名前、説明が含まれます。
はじめに
GanosBase PointCloud を有効にします。
CREATE EXTENSION ganos_pointcloud WITH SCHEMA public CASCADE; CREATE EXTENSION ganos_pointcloud_geometry WITH SCHEMA public CASCADE;点群スキーマを挿入します。
INSERT INTO pointcloud_formats (pcid, srid, schema) VALUES (1, 4326, '<?xml version="1.0" encoding="UTF-8"?> <pc:PointCloudSchema xmlns:pc="http://example.org/schemas/PC/1.1" xmlns:xsi="http://www.example.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 データ型を使用します。 CREATE TABLE points ( id SERIAL PRIMARY KEY, pt PCPOINT(1) ); -- pcpatch データ型を使用します。 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.945,45.055,5.5,0.45]}GanosBase PointCloud を無効にします。
DROP EXTENSION ganos_pointcloud_geometry; DROP EXTENSION ganos_pointcloud CASCADE;
関連ドキュメント
詳細については、「点群 SQL リファレンス」をご参照ください。