Appearance
第一章 图观统一开发 API 概述
目录
第一节 TGAPI 接口概览
图观统一开发 API 是一套基于 JavaScript 语言开发的二次编程接口,用于在现代浏览器中加载、显示图观引擎提供的流渲染或端渲染三维场景,并且为开发者提供在场景中绘制业务数据、触发场景交互、控制场景逻辑的功能。图观统一开发 API 兼容当前主流的 JavaScript 前端框架,例如 Vue.js 或者 React,前端开发人员可快速便捷的进行二次开发。
通过使用图观统一开发 API,开发人员可以完全释放图观场景的二次开发能力,开发出从手机端的轻量化应用,到具有复杂功能和交互的大屏应用。统一开发 API 已经针对典型三维数字孪生应用的场景开发,对三维开发接口进行了良好封装。并且对于底层渲染核心,无论是端渲染还是流渲染都做好了适配。相比传统的三维引擎的二次开发,开发者只需要了解 JavaScript 就可以快速上手,接口调用和消息结构也相对简单,熟悉一种渲染核心的开发后,可以快速上手另外一种渲染核心的开发。甚至在场景资源具备的情况下,开发好一种渲染核心的应用,可以无缝迁移到另外的渲染核心。充分满足显示效果,和高并发的要求。
1. 双渲染技术架构
图观 ™ 的渲染核心有流渲染和端渲染两种。对于 TGAPI 的二次开发接口是一致的。这里简单介绍两种渲染核心的技术架构。
流渲染
图观 ™ 流渲染开发架构,是基于实时云渲染( GPU 云化)、视频串流等技术,整合推出可视化数字孪生流渲染解决方案技术支撑体系,涵盖:流渲染服务平台、流渲染二次开发等技术产品,为大规模场景渲染在轻量化终端上的呈现提供技术保障。
流渲染系统架构如下图所示:

端渲染
图观 ™ 端渲染开发架构,是基于 HTML5 和 WebGL 技术,整合推出的数字孪生端渲染技术支撑体系,涵盖端渲染场景编辑器、端渲染服务平台、端渲染二次开发等技术产品,覆盖数字孪生应用开发的全生命周期,提供简便、快捷、强大的数字孪生应用运行和开发平台。
端渲染系统架构如下图所示:

2. 图观引擎场景和二次开发效果速览
流渲染效果速览
端渲染效果速览
第二节 TGAPI 接口体系
1. 接口总数
TGAPI 3.3 正式发布的版本,共有接口总数 500 多个,其中方法数量 200 多个、事件数量 300 多个。
2. 接口功能分类
根据三维数字孪生场景开发中的常见功能,图观统一开发 API 将全部功能接口分为以下几大类:
- 全局接口:应用生命周期管理,服务调度,场景调度,状态调度,镜头操作,时间天气和其他辅助功能。
- 图层接口:各种可视化图层的添加、删除、更新数据、更新样式功能。图层包括单对象图层、多对象图层和 GIS 图层。
- 模型接口:添加和控制模型等等,包括普通模型和建筑模型。普通具有关节和动画控制能力。建筑模型具有楼层、房间的控制能力。另外还可以试用模型轨迹图和特效图层。
- 事件:监听各种方法执行的结果或用户交互行为。
第三节 TGAPI 方法指令范式
引入版本:3.0 起支持
TGAPI 除了构造应用使用的new TGApp.app()和初始化服务appInstance.initService()两个接口以外,都是使用appInstance.uniCall(action, parameter, callback)方法来调用的,第一个参数为指令名称,第二个参数为指令参数,第三个参数为回调函数。
例如:
JavaScript
// 设置摄像机状态
appInstance.uniCall('setCamera', {}, (result) => {});
// 添加事件监听回调
appInstance.uniCall('addEventListener', {
eventName: 'onResolutionChange',
callback: function (event) { },
}, (result) => {}
);
// 销毁应用
appInstance.uniCall('destroy', {}, (result) => {});第四节 TGAPI 指令回调结果
引入版本:3.2 起支持
每个uniCall的指令调用,在第三个参数都包括一个callback回调函数。回调函数的结果,通过一个 Object 类型的对象返回。对象的基本结构如下:
JavaScript
{
"result": 1, // 指令的执行结果,1 代表成功,0 代表失败;
"message": "成功。" // 指令执行成功或者失败的具体消息。
// 如果指令返回结果中有其他内容,会通过这里其他的属性返回。
}例如,一个端渲染场景,调用获取应用状态信息的指令:
JavaScript
appInstance.uniCall('getAppInfo', {}, (result) => {
console.log(result);
})控制台中,result 结果内容如下:
JavaScript
{
"result": 1,
"message": "成功。",
"tgApiSdkVer": "3.3",
"tgApiDocUrl": "https://www.tuguan.net/doc/tg-api/",
"sceneSdkVer": "3.3",
"clientWidth": 1111,
"clientHeight": 969
}可以看到,getAppInfo的 callback 中除了包括调用是否成功的基础信息,还包括了 TGAPI 的版本信息,客户端控件大小信息等,为调试程序提供有了用的帮助。
第五节 TGAPI 事件订阅
引入版本:3.1 起支持
如上方提到的,TGAPI 的事件订阅指令为addEventListener, 参数对象中包括了eventName和一个回调函数callback,其中eventName是需要监听的事件,callback为事件触发时执行的方法。同一个事件,可以监听多次,执行不同的方法。
对应的,取消事件订阅指令为removeEventListener,可以移除指定事件和回调函数的对应关系。
例如:
JavaScript
// 在服务初始化完成后,需要执行的方法
function onServiceInitCallback(result) {
console.log(result)
}
// 添加事件监听
appInstance.uniCall('addEventListener', {
eventName: 'onServiceInit', // 事件名称
callback: onServiceInitCallback
}, (result) => {}
);
// 移除事件监听
appInstance.uniCall('removeEventListener', {
eventName: 'onServiceInit', // 事件名称
callback: onServiceInitCallback
}, (result) => {}
);事件回调函数的result对象,每个事件接口的并不相同,具体需要参考API 手册的事件部分。例如,onCameraMove事件订阅后,会收到如下回调消息:
JavaScript
{
coordType: 0, // XY 轴坐标类别,0:X 经度,Y 纬度;1:X 米,Y米,相对世界00点
coordTypeZ: 0, // Z 轴坐标类别,0:相对 3D 世界 0 海拔;1:相对 3D 世界地表;2:相对 3D 模型表面(单位:米)
centerCoord: [103.956291,1.406699], // 中心点的坐标 lng,lat
coordZ: 150, // Z 轴高度(单位:米)
distance: 1000, // 镜头距中心点距离(单位:米)
pitch: 30, // 镜头俯仰角(5~89)
heading: 0 // 镜头偏航角(0正北, 0~359)
}在图观统一开发 API 中,事件的总数量甚至是比接口指令的数量都要多。掌握好事件监听,能够接收和处理事件的回调消息,对于二次开发好一个应用具有特别重要的意义。特别是对于需要和场景进行交互,感知场景状态,获得场景中无接口调用信息,通过场景触发或者用户交互触发的消息的功能开发。在后面还会详细说到一些事件的具体用法。