常见问题
- 如何新建云渲染场景?
答:需要在网页中建一个id=player的div,云渲染场景会100%填充该div;
- 如何添加物体、控制显隐、移除物体?
答:调用cloudRenderEngine.addToScene(obj)将物体添加至场景;
调用obj.visible=ture/false控制物体的显隐;
调用cloudRenderEngine.removeFromScene(obj)将物体移出场景并销毁,也可调用cloudRenderEngine.destoryObject(obj)直接销毁物体;
cloudRenderEngine.removeAllFromScene()会一次性删除所有添加到场景中的物体;
- 场景坐标系是什么?
答:是局部坐标系,有一个局部坐标原点,该坐标原点可以设置。所有物体的坐标采用经纬度格式。
- 初次连接较慢?
答:连接视频流服务耗时较久,断开链接时会重置游戏,大概耗时5s。
- 如何监听鼠标事件?
答:object.addEventListener(type,callback);目前支持mousedown、mouseup、mouseover、mouseleave四种通用事件;
{
"code": 200,
"type": "mousedown",
"button": 0,
"content": {
"InternalIndex": 1 //该物体在这个实例中的索引
},
"time": "-",
"uuid": "8bfbbf43-9cc2-4399-8f28-7cbd6b20a311", //图层的uuid
"classType": "IconPoint",
// 鼠标所点击的位置在渲染div中的坐标
"cloudMousePosition": {
"x": 1114,
"y": 597
},
// 鼠标所点击的位置在渲染div中的比例
"cloudMouseRatio": {
"x": 0.5802083333333333,
"y": 0.5527777777777778
},
//场景中的相对位置
"cloudSceneLocation": {
"x": 2097211.895761825,
"y": 9572360.746255005,
"z": 0
},
//地理坐标
"GeographicLocation": {
"longitude": 113.48950475,
"latitude": 22.767647299999993,
"altitude": 0
},
"target": null
}
- 如何添加车流?
答:车流是前端发送参数,有UE客户端去连接并解析数据生成车流。首先要确保有一个socketIO3协议的ws服务,服务需要按照一定的时间间隔,例如100ms去推送车流数据,返回的数据参考格式如下:
{
"timestamp": 1676606709342, // 数据时间 必须
"tracks": [
{
"id": "12886022161", // 车辆id 必须
"type": 3, // 车辆类型 必须
"longitude": 117.6344017, // 必须
"latitude": 39.7301182, // 必须
"altitude": 0.0, // 必须 高程
"heading": 80.5, // 必须 旋转角yaw
"slope": 10, // 坡度,非必须,旋转角pitch
"speed": 82.08, // 用于在UI中显示
"label_type": 1, // 1 蓝色 2 黄色 3 绿色 4 红色
"plate": "", // 车牌号 用于在UI中显示
"is_focus": false, // 是否是重点车辆
"color": { // 车辆颜色 0~1
"r": 0.5,
"g": 0.5,
"b": 0.1,
"a": 1
}
}
]
}
// 车辆类型
{
0: {
name: '未知障碍物',
},
1: {
name: '未知可移动障碍物',
},
2: {
name: '未知不可移动障碍物',
},
3: {
name: '轿车',
key: 'newcar1',
// key: 'newboxtruck',
// key: 'newdangeroustruck',
labelOffset: [0, 0, 2],
plateColor: '#005DCC',
},
4: {
name: '面包车',
typeName: '面包车',
key: 'newvan',
labelOffset: [0, 0, 2],
plateColor: '#005DCC',
},
5: {
name: '卡车',
key: 'newgreentruck',
labelOffset: [0, 0, 4],
plateColor: '#D3A35D',
},
6: {
name: '大巴',
key: 'newbus',
labelOffset: [0, 0, 4],
plateColor: '#D3A35D',
},
7: {
name: '自行车',
typeName: '非机动车',
key: 'newbicycle',
labelOffset: [0, 0, 2],
},
8: {
name: '摩托车',
typeName: '非机动车',
key: 'newmotorcycle',
labelOffset: [0, 0, 2],
},
9: {
name: '三轮车',
typeName: '非机动车',
key: 'newtricycle',
labelOffset: [0, 0, 2],
},
10: {
name: '行人',
typeName: '非机动车',
key: 'pedestrian',
labelOffset: [0, 0, 2],
},
11: {
name: '交通锥',
key: 'trafficcone',
labelOffset: [0, 0, 1],
},
12: {
name: '危化品车',
key: 'newdangeroustruck',
labelOffset: [0, 0, 1],
},
13: {
name: '警车',
key: 'newdangeroustruck',
labelOffset: [0, 0, 1],
},
14: {
name: '消防车',
key: 'newdangeroustruck',
labelOffset: [0, 0, 1],
},
15: {
name: '救护车',
key: 'newdangeroustruck',
labelOffset: [0, 0, 1],
},
16: {
name: '路政车',
key: 'newdangeroustruck',
labelOffset: [0, 0, 1],
},
}
- 车流连接后,没有车辆或者程序崩溃了?
答:a. 可能是soclket版本协议太低,要求socket版本>3.0; b.可能是数据内容格式不正确;c.没有车辆有可能是车辆坐标不在视野范围内;
- 车流图层支持哪些事件监听?
答:目前支持onConnected服务连接成功,onDIsconnected服务断开连接, onFail服务出现错误, follow开始车辆跟踪, unfollow解除车辆跟踪等事件回调,onCurrentCarList可以拿到渲染中的所有车辆信息;使用方法如:trafficLayer.addEventListener('onConnected',callback);
- 最多支持多大面积展示?
答:已测试了10万平方公里,可以正常渲染,FPS>30;
- 支持哪些数据类型?
答:模型数据、栅格瓦片数据、GPS地理数据、geojson数据、倾斜摄影、地形等
- 多人协同开发怎么办?
答:通过主从服务器的模型可以支持多台机器供开发者动态调用,单台机器可以启动两个UE进程,开发者可以通过配置文件进行服务器的个性化配置。
- 大数据渲染怎么做?
答:如果是开发者通过API调用可能会有数据丢失和卡顿,目前仅支持预设置的大数据图层;
- 如何监听相机的变化?
答:可以监听使用CloudRenderEngine.addEventListener("camera_changed",callback),返回的数据内容为
其中指北针的需求,可以通过实时获取摄像机的yaw来实现,-90为正北方向,0为正东方向,90为正南,-180/180 为正西方向。yaw的数值范围在-180到180,单位是角度。
- 如何获取鼠标点击的位置?
答:可以监听使用CloudRenderEngine.camera.addEventListener("clickLocation",callback),返回的数据内容为
{
"code":200,
"type":"clickLocation",
"content":{
"Location":{
"longitude":113.49788368740728,
"latitude":23.182811620066317,
"altitude":0
}
},
"time":"-",
"uuid":"-",
"classType":"CloudRenderEngine"
}
- 如何知道三维内容什么时候准备好?
答:可以监听使用CloudRenderEngine.addEventListener("videoInitialised",callback),注意该事件只会被一次调用,如果浏览网页过程中,三维渲染内容短暂掉线,重连之后不会触发该事件
- 数据是正确,addToScene()之后场景里面没有显示出来,并且没有报错,是什么原因?
答:先使用setData()进行数据处理,后使用addToScene(),顺序不能错;
- 如何通过资产管理平台动态加载L3数据?
答:首先在链接ready之后,通过cloudEngine.setupModelInfo动态请求该工程的基础模型信息;然后创建Engine.AssetLayer类的对象,根据当前摄像机所在的位置,以及加载半径,动态请求模型点位信息。
- 如何更新子设备或者子模型?
答:完成第17步之后,可以通过AssetLayer.updateChild和AssetLayer.updateChildren两个接口更新设备和模型内容,可以通过AssetLayer.removeChild和AssetLayer.removeChildren两个接口删除子设备和子模型;
{
"code": 200,
"type": "mousedown",
"button": 0,
"content": {
"uuid": "8519711721796433500",
"point_id": "4760861160637468673",
"config": {
"point_id": "4760861160637468673",
"id": "3801",
"delta": {
"x": 0.21,
"y": -1.35,
"z": 4.27,
"rotateX": 0,
"rotateY": 0,
"rotateZ": 1.58,
"scaleY": 5.31,
"scaleZ": 1.6,
"scaleX": 0.1
},
"image": "https://dtmap-assets.bj.bcebos.com/assets/l3images//pics-leguang/9325810097423254920.png",
"staticMesh": "/Script/Engine.StaticMesh'/Mapv/UEResource/Modules/GIS/Point/AssetPoint/AssetManagerModels/Meshes/436645139352400802.436645139352400802'",
"ManagerUUID": "ab653463-5960-4a83-9bdf-052db23631f7",
"ParentUUID": "8519711721796433500",
"dynamic": false,
"name": "436645139352400802"
}
},
"time": "-",
"uuid": "ab653463-5960-4a83-9bdf-052db23631f7",
"classType": "AssetLayer",
"cloudMousePosition": {
"x": 1458,
"y": 326
},
"cloudMouseRatio": {
"x": 0.759375,
"y": 0.30185185185185187
},
"cloudSceneLocation": {
"x": 100030.90751324566,
"y": 606205.3555304102,
"z": 7690.661439
},
"GeographicLocation": {
"longitude": 113.31009492931034,
"latitude": 23.50829486744274,
"altitude": 76.90661439
},
"target": null
}