点云功能
点云数据操作
创建点云数据库
在 CnosDB 中,通过创建“点云数据库”来存储点云数据,点云数据库通过在创建数据库的 SQL 语句增加布尔类型参数 POINT_CLOUD
,用来标记数据库是否专门用来存储点云数据。
CREATE DATABASE db_pc WITH POINT_CLOUD 'true';
点云数据库有以下特性:
- 数据的导入、导出、删除均通过 HTTP API 进行。
- 不能执行
CREATE TABLE
或INSERT
或UPDATE
,只能通过 写入点云数据 的方式写入数据。 - 不能执行
DELETE
或DROP TABLE
,只能通过 删除点云数据 的方式删除数据。
上传点云文件
将点云文件上传至 CnosDB,为文件中的每个元素(Vertex、Face)生成数据表,表名根据参数 id
和元素名称生成,
比如请求中的 id=pcd01
,元素名称为 vertex
和 face
,那么就会创建 pcd01_vertex
和 pcd01_face
两个表来存储数据。具体逻辑详见 点云文件解析。
Method
POST
URI
api/v1/point_cloud/write
URI 参数列表
参数 | 含义 |
---|---|
tenant | 租户名称 |
db | 数据库名称,只能是“点云数据库”类型的数据库 |
id | 点云数据 ID,数据库 db 内唯一 |
fmt | 写入的点云数据类型,可选值为:pcd , ply , off , stl |
请求头
参数 | 含义 |
---|---|
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 参数列表
参数 | 含义 |
---|---|
tenant | 租户名称 |
db | 数据库名称,只能是“点云数据库”类型的数据库 |
id | 点云数据 ID |
fmt | 导出的点云数据类型,可选值为:pcd , ply , off , stl |
请求头
参数 | 含义 |
---|---|
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 参数列表
参数 | 含义 |
---|---|
tenant | 租户名称 |
db | 数据库名称,只能是“点云数据库”类型的数据库 |
id | 点云数据 ID |
请求头
参数 | 含义 |
---|---|
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
表一般包含 x
、y
、z
三个列;而对于向量类型,会额外创建一个名为 {prop_name}_len
的列用来存储列表长度,比如,face
表会包含一个变长的顶点列表,此时会额外创建列 face_len
,并且使用 face_0
、face_1
等列用来存储顶点索引的值。
点云列不能包含 "time" 列,因为该列已经被使用。
点云文件的头部数据也需要解析并存入数据库,以便后面导出点云数据使用。
点云文件的数据部分一般包含两种数据,标量数据 和 向量数据,处理方式如下:
标量数据
代表一个具体值,如点的每个维度,或 RGBA 色彩空间中每种颜色等。标量数据的列名与点云数据的属性名称相同,比如 vertex
表的 x
、y
、z
、r
、g
、b
、a
列。而有些点云格式不需要设定属性名称,则按照惯例设定,如三维坐标 x
、y
、z
,四维坐标 x
、y
、z
、w
等。
向量数据
代表一个列表,包含列表长度和列表的每个元素,如面片的每个顶点的索引。一个包含 n
个元素的,名为 prop
的向量数据对应数据库中的 n+1
个列,第一个列的列名为 prop_length
,用于存放向量数据的长度,其余列分别为 prop_0
、prop_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