三维可视化场景模拟导航 根据路径规划结果,进行第一人称或第三人称的模拟导航

第一步,创建导航对象实例(以下代码都要在 map.on('loadComplete') 中调用) 包括导航对象实例创建,起点终点选择,画导航线等等。(同路径规划步骤)

// 初始化导航对象
var navi = new esmap.ESNavigation({
    locationMarkerUrl: 'image/pointer.png', // 定位标注图片地址
    locationMarkerSize: 150,     // 定位标注图片大小
    speed: 5,             // 模拟导航速度
    maxEnd: 5,            // 距离终点多少米时结束导航(单位: 米/m)
    followAngle: true,    // 三维场景视角是否跟随旋转方向
    followPosition: true, // 三维场景视角是否跟随位置移动
    followGap: 3,         // 导航视角跟随间隔(单位: 秒/s)
    scaleAnimate: true,   // 模拟导航时是否自动缩放及移动到合适视角
    tiltAngle: 30,        // 模拟导航时的倾斜角
    audioPlay: true,      // 是否开启语音播报
    offsetHeight: 1,      // 模拟导航时三维场景的缩放等级
    ladderType: 1,        // 跨层方案选择(其他选项参考下表)  
    tipDistance: 3,       // 拐弯处提前多少米播报转弯语音(单位: 米/m)
    reRouteDis: 10,       // 偏差多少米就进行重新路径规划(单位: 米/m)
    linkStartEnd: false   // 设置导航时起点终点是否连接导航线
    showMultiFloor: true  // 第三人称导航时是否展示多楼层 (2024-04-18新增加参数)
});

参数说明:

参数 说明 类型 可选值 默认值 是否必填
map 三维场景对象,默认当前的三维场景对象 —— —— ——
locationMarkerUrl 定位标注图片地址(开启导航轨迹的时候才会显示的标注图片) String —— ——
locationMarkerSize 定位标注图片尺寸大小 Number —— ——
speed 模拟导航速度 Number —— 4
maxEnd 离终点多少米时候就结束导航(单位: 米/m) Number —— 2
followAngle 三维场景是否跟随旋转 Boolean —— false
followPosition 三维场景视角是否跟随位置 Boolean —— false
followGap 导航视角跟随间隔(单位: 秒/s,followPosition为true时有效) Number —— 3
scaleAnimate 模拟导航时是否自动缩放及移动到合适视角(followPosition为true时有效) Boolean —— true
tiltAngle 模拟导航时的倾斜角 Number —— 80
audioPlay 是否开启语音播报 Boolean —— false
scaleLevel 模拟导航时三维场景的缩放等级 Number —— 1
mode 导航模式 Number 1 (人行)2 (车行) 1
offsetHeight 定位标注图片的高度 Number —— 1
ladderType 跨层方案选择 Number 1 (距离最近)2 (电梯)3 (楼梯)4 (扶梯) 1
tipDistance 拐弯处提前多少米播报转弯语音(单位: 米/m) Number —— 6
reRouteDis 偏差多少米就进行重新路径规划(单位: 米/m) Number —— ——
linkStartEnd 设置导航时起点终点是否连接导航线 Boolean —— true
lineStyle 路径规划线样式配置 Object —— ——
showMultiFloor 第三人称导航时是否展示多楼层(2024-04-18新增加参数) Boolean —— false

第二步,确定起点和终点,画导航线

var fnum = building.getFloorNumByName('F1'); // 通过楼层名称来获取三维场景内部层数
        
// 确定起点
navi.setStartPoint({
    name: '起点1',
    x: map.center.x + 10,
    y: map.center.y + 10,
    fnum: 1,         // 楼层
    height: 10,      // 起点距离地面的高度
    url: './image/start.png', // 图片路径,
    size: 64,        // 图片尺寸
    showLevel: 23,   // 到达三维场景缩放等级隐藏导航对象
    // text: '起点位置', // 场景中展示的文字内容
    // textStyle:{
        // fontSize: 20,           // 字体大小
        // fillStyle: '#ff0000',   // 填充色
    // }
    // imageStyle:{ 
        // scale: 1,   // 单独设置图片缩放比例
    // },
    // callback: (marker)=> {
        // console.log(marker)  // 输出起点实例
    // }
});

// 确定终点
navi.setEndPoint({
    name: '终点1',
    x: map.center.x - 10,
    y: map.center.y - 10,
    fnum: 1,
    height: 10,
    url: './image/end.png',
    size: 64,
    showLevel: 23,
    // text: '终点位置', 
    // textStyle:{
        // fontSize: 20,           
        // fillStyle: '#ff0000',   
    // }
    // imageStyle:{
        // scale: 1,   
    // },
    // callback: (marker)=> {
        // console.log(marker)
    // }
});

// 画导航线
navi.getRouteResult({
    drawRoute: true,
})    

第三步,开启语音播报,导航开始

// 根据导航的模式选择语音播报
if(navi.mode == 1){
    map.ESAudioTool.playSoundByName('startNaving')      // 开始步行导航
}else{
    map.ESAudioTool.playSoundByName('startCarNaving')   // 开始车行导航
}

// 导航开始
navi.simulate();

常用方法

navi.pause = true;  // 暂时停止导航
        
navi.pause = false; // 继续导航

navi.stop()         // 停止导航

navi.clearAll()      // 清空所有有关模型与效果

navi.reset()        // 重新规划导航路线,建议先调用stop方法停止导航再调用reset方法

navi.getRouteResult({
    drawRoute: true,
}) // 绘制导航路线,如果修改了起点或者终点,必须重新调用getRouteResult方法

navi.simulate();    // 模拟导航开始

导航事件

监听导航进行中事件

navi.on('walking', function(data){
    // data为模拟导航数据
    console.log(data)
});

监听导航完成事件

navi.on('complete',function(){
    console.log('模拟导航结束')
});

监听导航提示事件

navi.on('naviTip',function(message){
    // 导航提示回调
});

监听跨楼层事件

navi.on('crossFloor', function (e) {
    // e为楼层号
    console.log(e)
});

监听重新规划路径事件

navi.on('reRouting',function(){
    // 重新规划路径
});