共计 2878 个字符,预计需要花费 8 分钟才能阅读完成。
产品需要:
依据可能回放进去车辆的运行轨迹路线、运行方向和速度。
需要剖析:
1、首先因为是 Web 网页端的性能,所以须要用到的是地图模块的 API,能够抉择百度地图或者腾讯地图。
2、因为须要地位信息,所以地图须要反对点到点的路线绘制性能。
3、关键点:须要一个小车,并且小车是能够依据不同的方向而扭转车头朝向。
因为前两点性能百度地图 API 能够满足,然而第三点,腾讯地图 LBS,更新了新版本的接口,图标能够主动依据方向扭转朝向。所以抉择腾讯地址,缩小凋谢量,另外就是间接 API 反对,缩小了很多的 BUG。
开发前的筹备:
1、在腾讯位置服务中注册为开发者:
2、在控制台配置 Key
配置实现之后,就能够通过开发文档 -web 前端 -JavaScript-API 来获取腾讯位置服务的 LBS 组件
开始开发:
第一步:画页面,初始化地图:
把 key 中的 XXXXXXXXXXX 更换为咱们方才在腾讯地图 LBS 后盾获取的 key。
<!DOCTYPE html> | |
<html lang="en"> | |
<head> | |
<meta charset="UTF-8"> | |
<meta name="viewport" content="width=device-width, initial-scale=1.0"> | |
<meta http-equiv="X-UA-Compatible" content="ie=edge"> | |
<title>marker 轨迹回放 - 全局模式 </title> | |
</head> | |
<script charset="utf-8" src="https://map.qq.com/api/gljs?v=1.exp&key=XXXXXXXXXXX"></script> | |
<style type="text/css"> | |
html, | |
body { | |
height: 100%; | |
margin: 0px; | |
padding: 0px; | |
} | |
#container { | |
width: 100%; | |
height: 100%; | |
} | |
</style> | |
<body> | |
<div id="container"></div> | |
<script type="text/javascript"> | |
var center = new TMap.LatLng(30.465512, 114.402740); | |
// 初始化地图 | |
var map = new TMap.Map("container", { | |
zoom: 15, | |
center: center | |
}); | |
</script> | |
</body> | |
</html> |
成果如图所示:
第二步:画路线,并依据路线模仿运行
这里须要留神的是,如果路线比较复杂,尽可能的应用分钟级,甚至秒级的坐标,这样绘制的轨迹也会更精准。速度的展现,须要后盾在记录坐标的时候计算好,并实时反馈。
<script type="text/javascript"> | |
var center = new TMap.LatLng(39.984104, 116.307503); | |
// 初始化地图 | |
var map = new TMap.Map("container", { | |
zoom: 15, | |
center: center | |
}); | |
var path = [new TMap.LatLng(39.98481500648338, 116.30571126937866), | |
new TMap.LatLng(39.982266575222155, 116.30596876144409), | |
new TMap.LatLng(39.982348784165886, 116.3111400604248), | |
new TMap.LatLng(39.978813710266024, 116.3111400604248), | |
new TMap.LatLng(39.978813710266024, 116.31699800491333) | |
]; | |
var polylineLayer = new TMap.MultiPolyline({ | |
map, // 绘制到指标地图 | |
// 折线款式定义 | |
styles: { | |
'style_blue': new TMap.PolylineStyle({ | |
'color': '#3777FF', // 线填充色 | |
'width': 4, // 折线宽度 | |
'borderWidth': 2, // 边线宽度 | |
'borderColor': '#FFF', // 边线色彩 | |
'lineCap': 'round' // 线端头形式 | |
}) | |
}, | |
geometries: [{ | |
styleId: 'style_blue', | |
paths: path | |
}], | |
}); | |
var marker = new TMap.MultiMarker({ | |
map, | |
styles: { | |
'car-down': new TMap.MarkerStyle({ | |
'width': 40, | |
'height': 40, | |
'anchor': { | |
x: 20, | |
y: 20, | |
}, | |
'faceTo': 'map', | |
'rotate': 180, | |
'src': 'https://mapapi.qq.com/web/lbs/javascriptGL/demo/img/car.png', | |
}), | |
"start": new TMap.MarkerStyle({ | |
"width": 25, | |
"height": 35, | |
"anchor": {x: 16, y: 32}, | |
"src": 'https://mapapi.qq.com/web/lbs/javascriptGL/demo/img/start.png' | |
}), | |
"end": new TMap.MarkerStyle({ | |
"width": 25, | |
"height": 35, | |
"anchor": {x: 16, y: 32}, | |
"src": 'https://mapapi.qq.com/web/lbs/javascriptGL/demo/img/end.png' | |
}) | |
}, | |
geometries: [{ | |
id: 'car', | |
styleId: 'car-down', | |
position: new TMap.LatLng(39.98481500648338, 116.30571126937866), | |
},{ | |
"id": 'start', | |
"styleId": 'start', | |
"position": new TMap.LatLng(39.98481500648338, 116.30571126937866) | |
}, { | |
"id": 'end', | |
"styleId": 'end', | |
"position": new TMap.LatLng(39.978813710266024, 116.31699800491333) | |
}] | |
}); | |
marker.moveAlong({ | |
'car': { | |
path, | |
speed: 250 | |
} | |
}, {autoRotation:true}) | |
</script> |
另外须要后盾配合的是:
1、把汽车的轨迹坐标,依照秒级 / 分钟级记录,同时记录下轨迹记录的工夫。
2、把坐标绘制成轨迹,而不是仅仅设置终点和起点。
3、轨迹与轨迹之间用地图计算出来间隔,而后除以工夫计算出来速度。前端地图实时更新 marker.moveAlong 中的 car 的速度。来达到轨迹回放跟理论车辆运行速度统一的目标。
总结:
应用腾讯位置服务 API,是目前最简略的能够花轨迹 +Mark 图标追随轨迹挪动 +Mark 图标能够自适应转向的实现。