最近公司有個地圖功能開發,根據車輛的行駛的經緯度,來畫出車輛的移動軌跡,並模擬車輛在該線路的行駛過程。
效果圖大體是這樣的。javascript
首先進入騰訊位置服務頁面而後進行註冊帳號,註冊完成後須要申請AppKey,咱們將在本身的應用中配置這個Key來使用SDK中的服務。css
webserveapi默認勾選就能夠,在未上線以前,咱們能夠先不填域名白名單。html
只須要在html的頁面裏引入便可java
<script charset="utf-8" src="https://map.qq.com/api/gljs?v=1.exp&key=你剛申請的key"></script>
一個完成的例子web
<!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>建立地圖</title> </head> <script charset="utf-8" src="https://map.qq.com/api/gljs?v=1.exp&key=OB4BZ-D4W3U-B7VVO-4PJWW-6TKDJ-WPB77"></script> <style type="text/css"> html, body { height: 100%; margin: 0px; padding: 0px; } #container { width: 100%; height: 100%; } </style> <body onload="initMap()"> <div id="container"></div> <script type="text/javascript"> function initMap() { var center = new TMap.LatLng(39.984104, 116.307503); //初始化地圖 var map = new TMap.Map("container", { rotation: 20,//設置地圖旋轉角度 pitch: 30, //設置俯仰角度(0~45) zoom: 12,//設置地圖縮放級別 center: center//設置地圖中心點座標 }); } </script> </body> </html>
把上面這段代碼保存到html文件中,用瀏覽器打開,就能夠看到一個地圖,以下:api
咱們要想讓車在地圖上跑起來,首先要畫出一條線。瀏覽器
有了地圖以後,咱們要在地圖上劃線的話須要用到這個MultiPolyline
這個類,折線。折線通常用於運動軌跡顯示、路線規劃顯示 等場景中。微信
這個類是以圖層的方式對摺線進行單條或批量繪製,以及刪改等操做。你能夠在地圖上建立,修改,刪除。app
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, // 繪製到目標地圖 // 折線樣式定義 geometries: [{ styleId: 'style_blue', paths: path }], });
代碼效果圖ui
要畫線,必需要先有點,而點在地圖上表現爲一個經緯度,即這樣的new TMap.LatLng(39.98481500648338, 116.30571126937866)
,有了一組點以後咱們,就能對點進行連線,最後造成一個折線。
固然咱們也能夠對先進行修改,改變線的顏色,寬度,邊線寬度, 邊線顏色,線端頭方式
var polylineLayer = new TMap.MultiPolyline({ map, // 繪製到目標地圖 // 折線樣式定義 styles: { 'style_blue': new TMap.PolylineStyle({ 'color': '#3777FF', //線填充色 'width': 3, //折線寬度 'borderWidth': 1, //邊線寬度 'borderColor': '#FFF', //邊線顏色 'lineCap': 'round' //線端頭方式 }) }, geometries: [{ styleId: 'style_blue', paths: path }], });
有了線以後,也就是行駛軌跡後,咱們須要在線的起始端添加一個汽車的標誌,而後讓這個汽車沿着線走起來,
在騰訊地圖裏要在地圖上添加一個標註,須要使用MultiMarker類,這個類可讓你往地圖上的多個標註點,可自定義標註的圖標。
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) }] });
在styles中定義mark的樣式,一共有三種,車輛開始時,車輛行進時,車輛結束時。
在geometries中定義樣式在那個地方使用。
作完上面一步,車輛已經出如今了軌跡上的起點,但還不會本身走,
如圖
在騰訊地圖中若是要讓一個地圖走,須要使用的
MultiMarker的moveAlong方法,具體用法
marker.moveAlong({ 'car': { path, speed: 250 } }, { autoRotation: true })
path是marker行走的路徑,speed是速度,autoRotation表示是否在行進途中自動將旋轉
完整的源碼是這樣的
<!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=QSWBZ-AL2KU-4Q4VI-46ONV-26OOT-ISB5G"></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(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> </body> </html>
最終的效果
騰訊位置服務提供了不少示例,若是作個需求沒有頭緒的話,能夠先看看騰訊地圖的示例中心。
若是你是高手,想作更多自定義擴展的功能,能夠直接查看騰訊提供的API文檔,裏面包含了全部類的屬性,方法。
做者:拿我格子衫來
連接:https://fizzz.blog.csdn.net/a...
來源:CSDN
著做權歸做者全部。商業轉載請聯繫做者得到受權,非商業轉載請註明出處。