使用騰訊地圖實現(xiàn)汽車沿軌跡行駛功能

前言

最近公司有個地圖功能開發(fā)糠爬,根據(jù)車輛的行駛的經(jīng)緯度拙寡,來畫出車輛的移動軌跡庐橙,并模擬車輛在該線路的行駛過程。
效果圖大致是這樣的怯伊。

image.png

簡易入門

首先進入騰訊位置服務(wù)頁面然后進行注冊賬號琳轿,注冊完成后需要申請AppKey,我們將在自己的應(yīng)用中配置這個Key來使用SDK中的服務(wù)耿芹。

企業(yè)微信20210521-111830@2x.png

webserveapi默認勾選就可以崭篡,在未上線之前,我們可以先不填域名白名單。

只需要在html的頁面里引入即可

<script charset="utf-8" src="https://map.qq.com/api/gljs?v=1.exp&key=你剛申請的key"></script>

一個完成的例子

<!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>創(chuàng)建地圖</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,//設(shè)置地圖旋轉(zhuǎn)角度
        pitch: 30, //設(shè)置俯仰角度(0~45)
        zoom: 12,//設(shè)置地圖縮放級別
        center: center//設(shè)置地圖中心點坐標
      });
    }
  </script>
</body>

</html>

把上面這段代碼保存到html文件中,用瀏覽器打開吩愧,就可以看到一個地圖,如下:

image.png

實現(xiàn)需求:汽車行駛在地圖上

我們要想讓車在地圖上跑起來,首先要畫出一條線。

由點連線

有了地圖之后疗涉,我們要在地圖上劃線的話需要用到這個MultiPolyline這個類拿霉,折線。折線一般用于運動軌跡顯示咱扣、路線規(guī)劃顯示 等場景中绽淘。

這個類是以圖層的方式對折線進行單條或批量繪制,以及刪改等操作闹伪。你可以在地圖上創(chuàng)建沪铭,修改,刪除偏瓤。

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
  }],
});

代碼效果圖

image.png

要畫線杀怠,必須要先有點,而點在地圖上表現(xiàn)為一個經(jīng)緯度厅克,即這樣的new TMap.LatLng(39.98481500648338, 116.30571126937866),有了一組點之后我們赔退,就能對點進行連線,最后形成一個折線。

當(dāng)然我們也可以對先進行修改硕旗,改變線的顏色窗骑,寬度,邊線寬度漆枚, 邊線顏色创译,線端頭方式

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類互订,這個類可以讓你往地圖上的多個標注點,可自定義標注的圖標痘拆。

該類的相關(guān)文檔解釋

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的樣式仰禽,一共有三種,車輛開始時纺蛆,車輛行進時吐葵,車輛結(jié)束時。
在geometries中定義樣式在那個地方使用桥氏。

做完上面一步温峭,車輛已經(jīng)出現(xiàn)在了軌跡上的起點,但還不會自己走字支,
如圖

image.png

在騰訊地圖中如果要讓一個地圖走凤藏,需要使用的
MultiMarker的moveAlong方法,具體用法

marker.moveAlong({
  'car': {
    path,
    speed: 250
  }
}, {
  autoRotation: true
})

path是marker行走的路徑,speed是速度堕伪,autoRotation表示是否在行進途中自動將旋轉(zhuǎn)

最終效果及源碼

完整的源碼是這樣的

<!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>

最終的效果

寫在最后

騰訊位置服務(wù)提供了很多示例揖庄,如果做個需求沒有頭緒的話,可以先看看騰訊地圖的示例中心欠雌。

如果你是高手蹄梢,想做更多自定義擴展的功能,可以直接查看騰訊提供的API文檔富俄,里面包含了所有類的屬性禁炒,方法。

作者:拿我格子衫來

鏈接:https://fizzz.blog.csdn.net/article/details/111764120

來源:CSDN

著作權(quán)歸作者所有霍比。商業(yè)轉(zhuǎn)載請聯(lián)系作者獲得授權(quán)幕袱,非商業(yè)轉(zhuǎn)載請注明出處。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末悠瞬,一起剝皮案震驚了整個濱河市凹蜂,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖玛痊,帶你破解...
    沈念sama閱讀 217,185評論 6 503
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件汰瘫,死亡現(xiàn)場離奇詭異,居然都是意外死亡擂煞,警方通過查閱死者的電腦和手機混弥,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,652評論 3 393
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來对省,“玉大人蝗拿,你說我怎么就攤上這事≥锵眩” “怎么了哀托?”我有些...
    開封第一講書人閱讀 163,524評論 0 353
  • 文/不壞的土叔 我叫張陵,是天一觀的道長劳秋。 經(jīng)常有香客問我仓手,道長,這世上最難降的妖魔是什么玻淑? 我笑而不...
    開封第一講書人閱讀 58,339評論 1 293
  • 正文 為了忘掉前任嗽冒,我火速辦了婚禮,結(jié)果婚禮上补履,老公的妹妹穿的比我還像新娘添坊。我一直安慰自己,他們只是感情好箫锤,可當(dāng)我...
    茶點故事閱讀 67,387評論 6 391
  • 文/花漫 我一把揭開白布贬蛙。 她就那樣靜靜地躺著,像睡著了一般谚攒。 火紅的嫁衣襯著肌膚如雪阳准。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,287評論 1 301
  • 那天五鲫,我揣著相機與錄音,去河邊找鬼岔擂。 笑死位喂,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的乱灵。 我是一名探鬼主播塑崖,決...
    沈念sama閱讀 40,130評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼痛倚!你這毒婦竟也來了规婆?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 38,985評論 0 275
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎抒蚜,沒想到半個月后掘鄙,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,420評論 1 313
  • 正文 獨居荒郊野嶺守林人離奇死亡嗡髓,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,617評論 3 334
  • 正文 我和宋清朗相戀三年操漠,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片饿这。...
    茶點故事閱讀 39,779評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡浊伙,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出长捧,到底是詐尸還是另有隱情嚣鄙,我是刑警寧澤,帶...
    沈念sama閱讀 35,477評論 5 345
  • 正文 年R本政府宣布串结,位于F島的核電站哑子,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏奉芦。R本人自食惡果不足惜赵抢,卻給世界環(huán)境...
    茶點故事閱讀 41,088評論 3 328
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望声功。 院中可真熱鬧烦却,春花似錦、人聲如沸先巴。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,716評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽伸蚯。三九已至摩渺,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間剂邮,已是汗流浹背摇幻。 一陣腳步聲響...
    開封第一講書人閱讀 32,857評論 1 269
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留挥萌,地道東北人绰姻。 一個月前我還...
    沈念sama閱讀 47,876評論 2 370
  • 正文 我出身青樓,卻偏偏與公主長得像引瀑,于是被迫代替她去往敵國和親狂芋。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,700評論 2 354

推薦閱讀更多精彩內(nèi)容