本文介绍了工具集的用途、基本构成和快速入门等内容。
工具用途
简介
Ganos Utility是对象关系型数据库PostgreSQL兼容版本(PolarDB PostgreSQL版)的一个时空引擎扩展,可以导入、导出、验证多种常见的三维模型文件格式,如OBJ、GLB、IFC、OSGB等,用户可以使用这些函数将不同格式的三维模型数据导入到Ganos引擎中进行处理。
作为Ganos时空引擎的一部分,Ganos Utility可以与各引擎紧密集成。用户可以使用Ganos Utility将导入的三维模型数据直接应用于Ganos时空引擎的场景中,进行进一步的建模、渲染、仿真等操作,这种无缝集成为用户提供了一体化的解决方案,简化了工作流程,提高了开发效率。
导入并查看IFC数据,效果如下图所示:
导入并查看OSGB数据,效果如下图所示:
使用OSGB数据进行可视域分析,效果如下图所示:
主要业务场景
多种文件格式导入导出
Ganos Utility可以导入、导出和验证多种常见的三维模型文件格式,如OBJ、GLB、IFC、OSGB等,这使得用户可以灵活地处理和编辑各种类型的三维数据。
数据管理和查看
通过Ganos Utility,用户可以方便地管理和查看三维模型数据。它提供了统一的工具,使用户能够快速导入数据、进行编辑和转换操作,以及导出已编辑好的数据。这大大简化了用户的工作流程,提高了工作效率。
数据验证和校验
Ganos Utility提供了数据验证和校验功能,确保导入的三维模型数据的有效性和完整性。用户可以使用这些功能来检查数据的格式、结构和一致性,以确保数据的质量,并及时发现和纠正数据错误。
基本构成
Ganos Utility提供了一系列工具函数,包括sfmesh、scene模块的数据导入、数据导出、数据验证功能。
数据导入
IFC导入
IFC(Industry Foundation Classes)是一种开放的、面向行业的数据模型和文件格式,用于描述和交换建筑和基础设施项目的信息。IFC是由国际标准化组织(ISO)制定的标准,旨在促进建筑信息模型(BIM)的协作和集成。
IFC数据格式是一种基于对象的数据模型,用于表示建筑和基础设施项目中的各种构件、属性和关系。它可以描述建筑物的几何形状、结构、材料、属性、关联关系等多个方面的信息。IFC数据格式不仅仅是几何数据的表示,还包括了建筑物的功能、构建过程、维护和操作等信息。
OBJ导入
OBJ(Wavefront OBJ)是一种常见的三维模型文件格式,用于存储和交换静态三维模型的几何形状和材质信息。
OBJ 数据格式由两个文件组成:.obj 文件和.mtl 文件。.obj文件包含了模型的顶点、法向量、纹理坐标和面信息。它使用一系列关键字来描述模型的几何属性,如顶点坐标(v)、法向量(vn)、纹理坐标(vt)等。面信息使用顶点索引来定义,以描述多边形的连接关系。.mtl文件包含了模型的材质属性,如颜色、纹理和光照信息。
GLB导入
GLB(GLTF Binary)是一种用于存储和交换三维模型的二进制文件格式。GLB是GLTF(GL Transmission Format)的一种扩展,它将模型的几何形状、材质、纹理、动画和其他相关数据封装在一个单一的二进制文件中,以提供更高效的加载和传输性能。
GLB数据格式使用了二进制编码,相比于文本格式,它具有更小的文件尺寸和更高的加载速度。这使得GLB文件适用于在线三维模型的传输和实时渲染,如虚拟现实(VR)、增强现实(AR)和WebGL应用。
OSGB导入
OSGB数据类型是一种用于存储和加载3D场景的文件格式。它是OpenSceneGraph(OSG)框架的一部分,用于描述和保存三维模型、纹理、材质等信息。
OSGB文件是二进制格式的文件,与其他常见的三维文件格式(如OBJ、FBX)相比,OSGB文件具有较小的文件尺寸和较快的加载速度,使其成为处理大型场景的理想选择。
数据导出
3DTile导出
3DTiles是一种用于存储和交换大规模三维地理数据的开放标准格式。它旨在解决在Web平台上高效呈现和可视化大规模三维地理数据的挑战,包括城市模型、地形、点云等。
3DTiles提供了用于组织和渲染瓦片数据的层次化结构,以支持高效的地图渲染和可视化。瓦片可以根据空间位置和级别进行分层组织,使得用户可以根据需要逐级加载和显示数据,从而实现对大规模地理数据的高性能浏览和交互。
数据验证
OSGB验证
OSGB文件是OpenSceneGraph框架中使用的一种二进制文件格式,用于存储和加载3D场景数据。由于其二进制的特性,直接检查数据的有效性可能比较困难,可以使用Utility函数来验证OSGB文件的有效性和完整性。
其他
更多内容请参见Utility SQL参考。
快速入门
简介
快速入门文档帮助用户快速理解Ganos Utility引擎的基本用法,包括创建扩展、导入数据、导出数据、数据验证等内容。
更多专业用法可参考Utility最佳实践文章:Ganos三维引擎系列(三):BIM数据管理与可视化功能解析。
语法说明
创建扩展。
-- 创建 Ganos_Utility 扩展 CREATE EXTENSION ganos_utility CASCADE;
说明建议将扩展安装在public模式下,避免权限问题。
Create extension ganos_utility with schema public CASCADE;
数据导入。
-- 导入 glTF 数据到 gltf_table 表, 并绑定设置 id 为 1 SELECT ST_ImportGLTF('gltf_table', 'OSS://<ak>:<ak_secret>@oss-cn-beijing-internal.aliyuncs.com/bim_wall.gltf', '1'); st_importgltf --------------- t (1 row) -- 导入 ifc 数据,并生成一个 ifc_ifc_elem 表 SELECT ST_ImportIFC('ifc', 'OSS://<ak>:<ak_secret>@oss-cn-beijing-internal.aliyuncs.com/CE1314-ACM-C3_LA-ST07_WB-AR-M3_N.ifc'::cstring); st_importifc -------------- t (1 row) -- 导入 obj 数据到 obj_table 表 SELECT ST_ImportOBJ('obj_table', 'OSS://<ak>:<ak_secret>@oss-cn-beijing-internal.aliyuncs.com/obj/j3sn.obj', '1'); st_importobj -------------- t (1 row) -- 导入 osgb 格式的倾斜摄影项目,保存到 osgb 表 SELECT ST_ImportOSGB('osgb', 'OSS://<ak>:<ak_secret>@oss-cn-beijing-internal.aliyuncs.com/osgb'); st_importosgb --------------- t (1 row)
说明需要使用 OSS访问域名使用规则 进行访问。具体请参见对象存储服务路径。
<ak>
、<ak_secret>
替换为实际access key和access secret。
数据导出。
-- 将 ifc 项目导出为 3DTiles 格式,并保存到 tile 表中 SELECT ST_As3DTiles(element, 'tile') from ifc_ifc_elem where family = 'IfcProject'; st_as3dtiles -------------- t (1 row)
数据验证。
-- 验证 osgb 格式的倾斜摄影是否合法 SELECT * FROM ST_ValidateOSGB('OSS://<ak>:<ak_secret>@oss-cn-beijing-internal.aliyuncs.com/osgb'); valid | reason -------+-------- t | (1 row)
删除扩展(可选)。
DROP EXTENSION ganos_utility CASCADE;
使用进阶
Ganos Utility支持更多高级参数,提供了自定义配置的能力。
IFC导入。
-- 导入指定的项目 SELECT ST_ImportIFC('Building', 'OSS://<ak>:<ak_secret>@oss-cn-beijing-internal.aliyuncs.com/mybucket/path_to_ifc'::cstring, '{"project":"building_1"}'); -- 关闭并行导入 SELECT ST_ImportIFC('local', 'OSS://<ak>:<ak_secret>@oss-cn-beijing-internal.aliyuncs.com/CE1314-ACM-C3_LA-ST07_WB-AR-M3_N.ifc'::cstring, '{"disable_multi_thread":true}');
OBJ导入。
-- 关闭自动三角化 SELECT ST_ImportObj('test_obj', 'OSS://<ak>:<ak_secret>@oss-cn-beijing-internal.aliyuncs.com/mybucket/path_to_obj.obj', '{"force_triangulate": false}');
GLTF/GLB导入。
-- 导入时 互换Y/Z坐标轴 SELECT ST_ImportGLTF('test_gltf', 'OSS://<ak>:<ak_secret>@oss-cn-beijing-internal.aliyuncs.com/mybucket/path_to_gltf.glb', 'my_glb', '{"flip_y_z": true}');
OSGB导入。
-- 指定导入并行度 SELECT ST_ImportOSGB('test_osgb', 'OSS://<ak>:<ak_secret>@oss-cn-beijing-internal.aliyuncs.com/mybucket/path_to_oblique_project/', '{"parallel": 4}'); -- gateway 模式,数据库中只存路径,不存数据 SELECT ST_ImportOSGB('test_osgb', 'OSS://<ak>:<ak_secret>@oss-cn-beijing-internal.aliyuncs.com/mybucket/path_to_oblique_project/', '{"gateway": true}');
OSGB验证。
-- 并行验证 SELECT ST_ValidateOSGB('OSS://<ak>:<ak_secret>@oss-cn-beijing-internal.aliyuncs.com/mybucket/path_to_oblique_project/', '{"parallel": 4}');
导出3DTile。
-- 并行导出 SELECT ST_As3DTiles(element, 'test', '{"parallel": 4}') from ifc_ifc_elem where family = 'IfcProject'; -- 指定瓦片阈值,大于该体积的几何对象将被切分,单位为 KB SELECT ST_As3DTiles(element, 'test', '{"size_threshold": 1024}') from ifc_ifc_elem where family = 'IfcProject'; -- 导出3DTile的坐标系 SELECT ST_As3DTiles(element, 'test', '{"srid": 4326}') from ifc_ifc_elem where family = 'IfcProject'; -- 3DTile空间切分方法,可选 `oct`(八叉树),`quad`(四叉树),`bsp`(BSP 树) SELECT ST_As3DTiles(element, 'test', '{"method": "oct"}') from ifc_ifc_elem where family = 'IfcProject';
SQL参考
详细SQL手册请参见Utility SQL参考。