Appearance
切换场景
此功能案例实现后台预加载地图场景,场景加载成功后,切换场景功能
目录
1. 功能点
- 添加地标图 addLandmarkLayer
- 监听地标图层点击事件 pickOverlay onLandmarkLayerClick
- 后台加载场景 loadService
- 监听后台场景加载成功 onServiceLoad
- 监听切换场景事件 onServiceSwitch
2. 视频演示
3. 核心代码
引入版本:3.0 起支持
第一步
添加地标图层,开启地标图点击事件,开启后台加载地图
JavaScript
// 添加散点
function addPoints() {
let jsonData = {
id: 'landmarkLayerId', // 图层对象 id,新建时调用者自己传入的唯一标识,用于各种操作的对象识别
name: 'layerName', // 图层名称,支持为图层自定义名称
coordType: 0, // XY 轴坐标类别,0:X 经度,Y 纬度;1:X 米,Y米,相对世界00点
coordTypeZ: 0, // Z 轴坐标类别,0:相对 3D 世界 0 海拔;1:相对 3D 世界地表;2:相对 3D 模型表面(单位:米)
autoScale: false, // 如果开启后,图标会按照摄像机远近自动缩放大小
legends: [ // 定义图层包含图例,支持为不同图例定义各自样式
{
name: 'legendName1',
color: '#ff0000',
iconName: 'camera'
}
],
data: points // 定义图层可视化数据
};
window.appInstance.uniCall('addLandmarkLayer', jsonData, (res) => {
window.appInstance.uniCall('pickOverlay', {
overlayType: 'landmarkLayer', // 图层对象类别,详见下表:可选中图层对象类别
idLayer: 'landmarkLayerId', // 如果具体想限定图层对象,则填写图层对象 id,如不限制,可不填
type: 'click', // 单选模式,click:点击选中;hover:悬停选中
isShowDecorator: false // 表示是否显示选中的高亮装饰符,true:显示,false:不显示,默认:true
}, res => {
console.log('开启地标点选中', res);
});
});
}第二步
后台加载地图服务
JavaScript
// 预读场景
function loadService() {
loading.className = 'loading'
axios
.post(
'https://www.tuguan.net/api/user/v1/visitorScene/4ea662d5-befc-41d0-9d1f-fed0f2ebc4c4'
)
.then((res) => {
console.log(res);
// 加载地图
window.appInstance.uniCall(
'loadService',
{
name: "factory", // 服务名称,用于切换服务时使用
container: document.getElementById('container'),
mode: 'scene', // scene代表端渲染 streaming代表流渲染
url: // 服务地址
'https://www.tuguan.net/api/sceneEditor/v1/scenes/4ea662d5-befc-41d0-9d1f-fed0f2ebc4c4/loadAVWS', //模型地址
token: res.data.accessToken, // token,如果服务地址需要token验证,在此填入
resolution: [1920,1080], // 控件 像素分辨率,宽,高
editMode: false // 是否开启编辑模式,默认不开启,编辑模式的鼠标交互和非编辑模式的不同
},
(res) => {
console.log(res);
}
);
})
}第三步
监听地图加载成功事件
JavaScript
// 监听场景加载成功
window.appInstance.uniCall('addEventListener', {
eventName: 'onServiceLoad',
callback: (res) => {
console.log('预加载场景', res)
isInit = true
},
})第四步
添加点击地标图事件订阅,并且在事件接收函数里判断,如果子场景预加载完成了,则切换服务
JavaScript
// 注册地标图点击事件
window.appInstance.uniCall('addEventListener', {
eventName: 'onLandmarkLayerClick',
callback: (res) => {
console.log(res);
if (isInit) {
switchService();
}
}
});
// 切换场景
function switchServer() {
window.appInstance.uniCall(
'switchService',
{ name: 'factory' },
(res) => {
console.log('切换场景', res)
}
)
}第五步
订阅 onServiceSwitch 事件,用于跟踪场景服务是否切换成功,做其他事情
JavaScript
// 场景切换成功事件
window.appInstance.uniCall('addEventListener', {
eventName: 'onServiceSwitch',
callback: (res) => {
// dosomething()
},
})