隨着共享經濟的發展,網約車也在逐步的發展壯大,在諸如專車、順風車網約車行業的程序員開發從業人員需要做到的一個功能是車輛的軌跡回放,實現這個功能並不難,接下來就具體的操作下吧!
幾點tips:
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圖標可以自適應轉向的實現。