ST_As3dTiles

将基于sfmesh对象转换为3dtiles瓦片格式并存储到数据库中。

语法

boolean ST_As3dTiles(sfmesh sfmesh_object,  cstring table_name,  cstring options default '{}');

返回值

返回值

描述

true

导出成功。

false

导出失败。

参数

参数名称

描述

sfmesh_object

需要处理的sfmesh对象。

table_name

业务表名称。

options

JSON字符串描述处理配置参数。

描述

将基于sfmesh对象转换为3dtiles瓦片格式并存储到数据库中。sfmesh对象需要预先通过ST_ImportIFC进行导入。

处理选项说明如下:

参数名称

类型

说明

默认值

示例

schema

字符串

目标表schema。

public

ganos

project

字符串

项目名称。将填充在每一条记录的project_name字段。

-

project_1

parallel

整数

并行度。提高并行度将会加速导入,但可能消耗一定内存,可根据实际的数据或数据库运行状态选择合适的值。一般小于16。

1

16

size_threshold

整数

切分阈值,单位为KB。大于该体积的几何对象将被切分到每个瓦块都小于该阈值为止。

2048

4096

srid

整数

目标数据的SRID。若SFMesh同时具有SRID且两者不一致,会报错。若不指定,则视为无SRID。

-

2326

method

字符串

切分方法。值域为[oct, quad, bsp]。请根据实际情况选择。

各取值的含义:

  • oct:八叉树

  • quad:四叉树

  • bsp:BSP树

oct

bsp

filter_percent

浮点

筛选比例。值域为(0,1)。若筛选比例为10%(即0.1),将对于每个非叶节点瓦块排除体积小于瓦块体积10%的对象。

0.1

0.01

tileset_prefix

字符串

3dtiles地址前缀。

-

http://your_server/foo/bar

enable_tile_option

布尔

是否启用sfmesh自带瓦片属性。

false

true

merge_material

布尔

是否融合同材质几何,开启后可能减小文件体积。

true

false

with_extension

布尔

若开启则会为生成的tileset文件中B3DM/Tileset的URI赋予后缀名。

false

true

vertex_threshold

浮点

顶点合并阈值。若为0,则不执行顶点合并;若不为0,将合并每个瓦块中顶点间距小于阈值的点。

0.0001

0.01

update_normal

布尔

是否重算法线数据。

false

true

divide_factor

浮点

geometricError计算因子。

5

10

  • 若开启顶点阈值合并,将移除原有法线数据,若有需求,可以开启update_normal项重新计算法线。

  • 开启顶点阈值合并同时重新计算法线后,显示效果可能随着阈值的不同而不同。

  • 对于本身没有法线的数据重新计算法线,成果体积将会增大。

  • 若觉得生成的非叶子节点的geometricError生成的过大,可以调整divide_factor。例如:divide_factor增大一倍,geometricError将变小一倍。

导入成功后会在数据库内生成以下三张表:

  • [table_name]:主表,存储瓦片的元数据信息。

  • [table_name]_tile:瓦片表,存储该项目所有的瓦片数据。

  • [table_name]_tilesettileset.json表,存储该项目对应的tileset.json信息。

[table_name]表结构如下:

字段

类型

说明

备注

project_id

uuid

项目ID。

自动生成。

project_name

text

项目名称。

若用户不指定project_name,则该列值为空。常用于存储多个子项目的表。

srid

integer

留空。

-

anchor

geometry

项目锚定的三维点位。

为该SFMesh中心点投影变换到WGS 84坐标系下。

extent

geometry

留空。

-

aux

text

留空。

-

tiletable

varchar(64)

留空。

-

[table_name]_tile表结构如下:

字段

类型

说明

备注

project_id

uuid

项目ID。

与主表一致。

project_name

text

项目名称。

与主表一致。

uid

uuid

瓦片ID。

自动生成。

lod

integer

留空。

-

parent

uuid

留空。

-

children

uuid[]

留空。

-

aux

jsonb

留空。

-

tile

scene

瓦片实体。

-

[table_name]_tileset表结构如下:

字段

类型

说明

备注

project_id

uuid

项目ID。

与主表一致。

project_name

text

项目名称。

与主表一致。

uid

uuid

tileset.json的ID。

若为项目根节点,则与project_id一致。

tileset

jsonb

tileset.json实体。

-

示例

SELECT ST_As3dTiles(sfmesh_obj, 'test_table') 
FROM t_sfmesh
WHERE id = 1;

---------
t

并行

SELECT ST_As3dTiles(sfmesh_obj, 'test_table', '{"parallel": 2}') 
FROM t_sfmesh
WHERE id = 1;

---------
t

更多参数选项

SELECT ST_As3dTiles(sfmesh_obj, 'test_table', '{"project":"test_proj", "method":"oct", "size_threshold":20}') 
FROM t_sfmesh
WHERE id = 1;

---------
t