设置起始模拟点,在地图渲染后即loadComplete回调后,初始化路径分析对象。示例代码如下:
// 地图加载完执行画导航路径
var navi = new fengmap.FMNavigation({
map: map,
locationMarkerUrl: 'image/pointer.png', //导航中用到的定位标注图标
locationMarkerSize: 24, //设置Marker尺寸
tiltAngle: 80, //导航跟随倾斜角度
scale: 282, //模拟导航开始时地图的显示比例尺, 默认值为282,表示1:282的地图比例尺。对应比例尺级别21
followPosition:true, //模拟导航时是否地图跟随,默认true
followAngle:true, //模拟导航时是否改变地图角度,默认false
lineMarkerHeight: 1, //导航线与楼层之间的高度偏移设置。默认是1
// 设置导航线的样式
lineStyle: {
lineType: fengmap.FMLineType.FMARROW, // 导航线样式
lineWidth: 10, // 设置线的宽度
godColor: '#FF0000', //设置线的颜色
godEdgeColor: '#4a82d2', //设置边线的颜色
}
});
模拟起始点,使用导航类绘制导航线。
//起点终点坐标
var coord=[
{x: 12961647.576796599, y: 4861814.63807118, groupID: 1}, //起点
{x: 12961699.79823795, y: 4861826.46384646, groupID: 6} //终点
];
//添加起点
navi.setStartPoint({
x: coord[0].x,
y: coord[0].y,
groupID: coord[0].groupID,
url: 'image/start.png',
size: 64
});
//添加终点
navi.setEndPoint({
x: coord[1].x,
y: coord[1].y,
groupID: coord[1].groupID,
url: 'image/end.png',
size: 64
});
// 画出导航线
navi.drawNaviLine();
完成路径分析后,可根据路径结果获取路径描述信息。参考代码如下:
// 设置导航中实时回调事件
navi.on('walking', function(data) {
console.log('导航中');
//获取某一段路线描述
navi.naviDescriptions[data.index];
});
导航中监听事件有导航中walking事件、导航完成complete事件、导航中跨层crossGroup事件。绑定事件示例如下:
// 设置导航中实时回调事件
navi.on('walking', function(data) {
console.log('导航中');
});
//导航完成事件
navi.on('complete', function() {
console.log('导航完成');
});
//路径跨楼层事件
navi.on('crossGroup', function(group) {
console.log('楼层发生变化');
});
模拟导航有开始、暂停、继续的方法,示例如下:
//开始导航
navi.simulate();
//暂停导航
navi.pause();
//继续导航
navi.resume();
//结束导航
navi.stop();
导航模拟动画效果如下:
在使用真实的定位系统时,如:WIFI定位,蓝牙定位等,就需要将定位系统所返回的定位坐标转化为fengmap地图坐标,这样就可以在fengmap地图中去根据真实的定位点去实时的改变地图中的Marker的位置。实现定位的功能。
fengmap JSSDK中提供了一个专用于坐标转化的通用类fengmap.MapCoordTransform类。它的应用逻辑是这样的,在定位系统中提取出定位区域矩形的4个角点。同时在fengmap地图中得到这4个角点对点的地图坐标。就可以实现定位坐标到地图坐标的转化。
//来自定位系统的参数 定位的原点坐标 已经定位的范围,(矩形对角线的2个点)
var locOrigion = {'x':0,'y':0};//定位坐标原点
var locRange = {'x':100,'y':200};//定位范围
//根据定位四个角点的地图坐标点
var mapParas = [];
mapParas[0]={'x':13502836.4878,'y':3658566.5691};//定位原点地图坐标
mapParas[1]={'x':13503636.768,'y':3657259.108};//X轴终点地图坐标
mapParas[2]={'x':13502783.8819,'y':3656737.0984};//定位原点对角点地图坐标
mapParas[3]={'x':13501983.572,'y':3658044.467};//Y轴终点地图坐标
//创建转换器
var trasformer = new fengmap.MapCoordTransform(locOrigion,locRange,mapParas);
//定位系统中的定位坐标
var loc ={'x':45,'y':150}; //定位系统所返回的坐标点
//转换后的地图坐标
var mapCoord = trasformer.transform(loc);
在使用真实的定位系统时,如:WIFI定位,蓝牙定位等,就需要将定位系统所返回的定位坐标转化为fengmap地图坐标,这样就可以在fengmap地图中去根据真实的定位点去实时的改变地图中的Marker的位置。实现真实定位。示例如下:
// 真实定位导航示例
// 先创建FMNavigation对象
var navi = new fengmap.FMNavigation({map: map})
// 如:定位坐标返回的坐标点
var theCoord = { x: 12956609.56, y: 4852487.1, groupID: 1 };
// 调用locate方法,此方法会触发walking事件
// 此方法要按定位设置的频率来循环设置
navi.locate(theCoord);
// 监听navi对象的walking 事件
navi.on('walking', function(data) {
// 在返回的data中包括以下数据
/*
{
remain: 到终点的剩余距离,
walk: 已经走过的距离,
distance: 定位点的路线偏移距离,
distanceToNext: 是下一个转角处的距离,
angle: 当前路线与正北方向的角度,
index: 当前路段的索引,
point: 定位点在路径约束后的点坐标,
groupID, 当前的楼层id,
index: 当前路段的索引
}
*/
});