Skip to main content
Version: latest

点云功能

点云数据操作

创建点云数据库

在 CnosDB 中,通过创建“点云数据库”来存储点云数据,点云数据库通过在创建数据库的 SQL 语句增加布尔类型参数 POINT_CLOUD,用来标记数据库是否专门用来存储点云数据。

CREATE DATABASE db_pc WITH POINT_CLOUD 'true';

点云数据库有以下特性:

  • 数据的导入、导出、删除均通过 HTTP API 进行。
  • 不能执行 CREATE TABLEINSERTUPDATE,只能通过 写入点云数据 的方式写入数据。
  • 不能执行 DELETEDROP TABLE,只能通过 删除点云数据 的方式删除数据。

上传点云文件

将点云文件上传至 CnosDB,为文件中的每个元素(Vertex、Face)生成数据表,表名根据参数 id 和元素名称生成,

比如请求中的 id=pcd01,元素名称为 vertexface,那么就会创建 pcd01_vertexpcd01_face 两个表来存储数据。具体逻辑详见 点云文件解析

Method

POST

URI

api/v1/point_cloud/write

URI 参数列表

Parameters含义
tenant租户名称
db数据库名称,只能是“点云数据库”类型的数据库
id点云数据 ID,数据库 db 内唯一
fmt写入的点云数据类型,可选值为:pcd, ply, off, stl

请求头

Parameters含义
Authorization鉴权信息

请求体

点云文件的完整内容。

响应体

调用示例

准备点云文件 view_001.pcd

# .PCD v.7 - Point Cloud Data file format
VERSION .7
FIELDS x y z rgb
SIZE 4 4 4 4
TYPE F F F F
COUNT 1 1 1 1
WIDTH 10
HEIGHT 1
VIEWPOINT 0 0 0 1 0 0 0
POINTS 10
DATA ascii
0.93773 0.33763 0 4.2108e+06
0.90805 0.35641 0 4.2108e+06
0.81915 0.32 0 4.2108e+06
0.97192 0.278 0 4.2108e+06
0.944 0.29474 0 4.2108e+06
0.98111 0.24247 0 4.2108e+06
0.93655 0.26143 0 4.2108e+06
0.91631 0.27442 0 4.2108e+06
0.81921 0.29315 0 4.2108e+06
0.90701 0.24109 0 4.2108e+06

数据库操作:

# 租户名称 'cnosdb'
# 数据库名称 'db_pc'
# 点云数据 ID 'pcd01'
# 点云数据类型 'pcd'
# 导入文件路径 './view_001.pcd'
curl -XPOST -u 'root:' 'http://127.0.0.1:8902/api/v1/point_cloud/write?tenant=cnosdb&db=db_pc&id=pcd01&fmt=pcd' -T ./view_001.pcd

# 查询表
curl -X POST -u 'root:' 'http://127.0.0.1:8902/api/v1/sql?tenant=cnosdb&db=db_pc' -d 'SHOW TABLES;'
table_name
pcd01_vertex

# 查询数据
curl -X POST -u 'root:' 'http://127.0.0.1:8902/api/v1/sql?tenant=cnosdb&db=db_pc' -d 'SELECT * FROM pcd01_vertex;'
x,y,z,rgb
0.9377300143241882,0.3376300036907196,0.0,4210800.0
0.908050000667572,0.3564099967479706,0.0,4210800.0
0.8191499710083008,0.3199999928474426,0.0,4210800.0
0.9719200134277344,0.27799999713897705,0.0,4210800.0
0.9440000057220459,0.2947399914264679,0.0,4210800.0
0.9811099767684937,0.24246999621391296,0.0,4210800.0
0.9365500211715698,0.2614299952983856,0.0,4210800.0
0.9163100123405457,0.27441999316215515,0.0,4210800.0
0.8192099928855896,0.29315000772476196,0.0,4210800.0
0.907010018825531,0.24108999967575073,0.0,4210800.0

导出点云文件

下载 id 对应的点云文件。

Method

GET

URI

api/v1/point_cloud/dump

URI 参数列表

Parameters含义
tenant租户名称
db数据库名称,只能是“点云数据库”类型的数据库
id点云数据 ID
fmt导出的点云数据类型,可选值为:pcd, ply, off, stl

请求头

Parameters含义
Authorization鉴权信息

请求体

响应体

点云文件的完整内容。

调用示例

# 租户名称 'cnosdb'
# 数据库名称 'db_pc'
# 点云数据 ID 'pcd01'
# 点云数据类型 'pcd'
# 导出文件路径 './dump_001.pcd'
curl -XGET -u 'root:' 'http://127.0.0.1:9902/api/v1/point_cloud/dump?tenant=cnosdb&db=db_pc&id=pcd01&fmt=pcd' -o ./dump_001.pcd

# 查看文件
cat ./dump_001.pcd
VERSION 0.7
FIELDS x y z rgb
SIZE 4 4 4 4
TYPE F F F F
COUNT 1 1 1 1
WIDTH 10
HEIGHT 1
VIEWPOINT 0 0 0 1 0 0 0
POINTS 10
DATA ascii
0.93773 0.33763 0 4210800
0.90805 0.35641 0 4210800
0.81915 0.32 0 4210800
0.97192 0.278 0 4210800
0.944 0.29474 0 4210800
0.98111 0.24247 0 4210800
0.93655 0.26143 0 4210800
0.91631 0.27442 0 4210800
0.81921 0.29315 0 4210800
0.90701 0.24109 0 4210800

删除点云文件

删除 id 对应的点云文件。

Method

POST

URI

api/v1/point_cloud/delete

URI 参数列表

Parameters含义
tenant租户名称
db数据库名称,只能是“点云数据库”类型的数据库
id点云数据 ID

请求头

Parameters含义
Authorization鉴权信息

请求体

响应体

调用示例

# 租户名称 'cnosdb'
# 数据库名称 'db_pc'
# 点云数据 ID 'pcd01'
curl -XGET -u 'root:' 'http://127.0.0.1:9902/api/v1/point_cloud/delete?tenant=cnosdb&db=db_pc&id=pcd01'

# 查询表
curl -X POST -u 'root:' 'http://127.0.0.1:8902/api/v1/sql?tenant=cnosdb&db=db_pc' -d 'SHOW TABLES;'

点云文件解析

解析点云文件,并写入到 CnosDB。

列名由具体的数据类型来确定。对于能够指定参数名称的点云数据中,标量类型的参数,采用参数名称作为列名,比如 vertex 表一般包含 xyz 三个列;而对于向量类型,会额外创建一个名为 {prop_name}_len 的列用来存储列表长度,比如,face 表会包含一个变长的顶点列表,此时会额外创建列 face_len,并且使用 face_0face_1 等列用来存储顶点索引的值。

点云列不能包含 "time" 列,因为该列已经被使用。

点云文件的头部数据也需要解析并存入数据库,以便后面导出点云数据使用。

点云文件的数据部分一般包含两种数据,标量数据向量数据,处理方式如下:

标量数据

代表一个具体值,如点的每个维度,或 RGBA 色彩空间中每种颜色等。标量数据的列名与点云数据的属性名称相同,比如 vertex 表的 xyzrgba 列。而有些点云格式不需要设定属性名称,则按照惯例设定,如三维坐标 xyz,四维坐标 xyzw 等。

向量数据

代表一个列表,包含列表长度和列表的每个元素,如面片的每个顶点的索引。一个包含 n 个元素的,名为 prop 的向量数据对应数据库中的 n+1 个列,第一个列的列名为 prop_length,用于存放向量数据的长度,其余列分别为 prop_0prop_1...prop_{n-1},用于存放向量数据的每个元素。

下面以 face 表为例子说明向量数据的存储方式。为了存储 face 元素的 vertex_indices 属性,创建了数个

包含了三个面片的数据,第一个、第三个面片为三角形,第二个面片为四边形:

face_len, face_0, face_1, face_2, face_3
3, 1, 2, 3, NULL
4, 2, 3, 4, 5
3, 6, 7, 8, NULL