将基于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 | bsp |
filter_percent | 浮点 | 筛选比例。值域为 | 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]_tileset
:tileset.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 |
| 若为项目根节点,则与project_id一致。 |
tileset | jsonb |
| - |
示例
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