利用vue+高德地图API 实现用户的运动轨迹

高德地图网址:https://lbs.amap.com/api/jsapi-v2/guide/abc/prepare

任务一:实现地图显示

先完成准备工作,这一步是后面工作的基础。准备工作部分参考了:

https://blog.csdn.net/qq_59863007/article/details/125902045

http://t.zoukankan.com/fontomas-p-13253963.html

  1. 注册,拿到key

  2. 安装 :npm i @amap/amap-jsapi-loader --save

  3. 在 public/index.html 中加入:

    <script src="https://webapi.amap.com/maps?v=1.4.15&key=您申请的key值&callback=init"></script>
    
  4. 在main.js页面中配置安全密钥

   window._AMapSecurityConfig = {securityJsCode: '你的安全密钥' //*  安全密钥}

5 .创建地图组件,后续我调用组件实现
5.1 创建组件

<template><div><!-- 用来显示地图 --><!-- 可以不写宽度,但一定要有高度 --><div id="container"  ></div><h2>{{fathermsg}}<></div>
</template>
<script>export default {name: 'Map2 ',data() {return {}},props: {fathermsg:{}}
</script>
<style scoped>#container{width: 100%;height: 500px;}
</style>

注: props: {
fathermsg:{}
} 用来接收前端传来的值 ;

5.2 在 main.js中注册组件

// 高德地图组件
import Map2 from "@/components/Map2"
// 全局组件挂载
Vue.component('Map2', Map2)

5.3 调用组件

<template><div><Map2 :fathermsg="pmsg" ></Map2></div></template><script>import Map2 from '../components/Map2/index.vue'export default {name: 'hw3',components:{Map2},data(){return{pmsg:"这是父组件"}}}
</script><style scoped></style>

注: <Map2> </Map2>是组件名称

想给组件传值的话,写成 <Map2 :fathermsg="pmsg" ></Map2>

pmsg会赋给 fathermsg 然后传过去,那边接受的值也是fathermsg 。

到这里:可以实现地图的显示,而且父组件的消息能够传到子组件才对


接下来的任务就不细分了,直接上代码,任务包括:

任务二:添加标记点

任务三:轨迹数据的相互传输

任务四:根据数据实现轨迹效果并沿着运动

任务五:轨迹删除,标记点删除

…/components/Map2/index.vue的代码

<template><div><!-- 用来显示地图 --><!-- 可以不写宽度,但一定要有高度 --><div id="container"  ></div><el-buttonicon="el-icon"size="mini"@click="addTrack">轨迹回放</el-button><el-buttonicon="el-icon-delete"size="mini"@click="delTrack">轨迹删除</el-button></div>
</template><script>//引入高德地图//import AMap from '@amap/amap-jsapi-loader'export default {name: 'Map2 ',data() {return {map: null,marker: null,msg:"这是子组件",temp:[],polyline:[],passedPolyline:[],startMarker:null,// 用于测试的轨迹数据,父组件传来的polylinefather也是这种格式lineArr: [[116.478935,39.997761],[116.478939,39.997825],[116.478912,39.998549],[116.478912,39.998549],[116.478998,39.998555],[116.478998,39.998555],[116.479282,39.99856],[116.479658,39.998528],[116.480151,39.998453],[116.480784,39.998302],[116.480784,39.998302],[116.481149,39.998184],[116.481573,39.997997],[116.481863,39.997846],[116.482072,39.997718],[116.482362,39.997718],[116.483633,39.998935],[116.48367,39.998968],[116.484648,39.999861]],}},props: {polylinefather:{type:[String,Number,Array],},pmsg:{}},
//mounted()负责初始化的工作包括:1.生成地图2.确定初始中心点3.生成初始标记点mounted() {//生成一个地图对象,确定初始中心点var map=new window.AMap.Map('container', { // eslint-disable-line no-unused-varszoom:10,//级别center:[116.478935,39.997761],//中心点坐标viewMode:'2D'//使用2D视图});// 生成一个标记点marker:let lng=116.38;let lat=39.90;this.marker = new window.AMap.Marker({position: new window.AMap.LngLat( lng,lat),   // 经纬度对象,也可以是经纬度构成的一维数组[116.39, 39.9]title: '',});// 将创建的点标记添加到已有的地图实例:map.add(this.marker);this.map=map;console.log("marker添加成功");},
//方法调用,实现轨迹的生成和删除methods: {// 添加轨迹addTrack() {// 重新根据传来的值,选取第一个坐标,创建一个 标记点Marker实例和设置地图的中心点:var lng=this.polylinefather[0][0];var lat=this.polylinefather[0][1];// 1.重新设置地图中心点var position = new AMap.LngLat(lng, lat);  // 标准写法//2.重建一个标记点 marker// 2.1需要移除已创建的 markerthis.map.remove(this.marker);// 2.2创建新的 markerthis.marker = new window.AMap.Marker({position: new window.AMap.LngLat( lng,lat),   // 经纬度对象,也可以是经纬度构成的一维数组[116.39, 39.9]title: '',});// 2.3将创建的点标记添加到已有的地图实例:this.map.add(this.marker);// 用折线绘制轨迹this.polyline = new window.AMap.Polyline({map: this.map,path: this.polylinefather,// 添加dirImg可以自定义路线的箭头,支持Image和CanvasshowDir: true,dirImg:'https://a.amap.com/jsapi_demos/static/images/mass0.png',strokeColor: "#28F", //线颜色// strokeOpacity: 1,     //线透明度strokeWeight: 10, //线宽strokeStyle: "solid"  //线样式});// 创建了一个车辆的点用于运动this.startMarker = new AMap.Marker({map: this.map,size: new window.AMap.Size(50, 52),// 第一个点为起点position: this.polylinefather[0],icon: "https://a.amap.com/jsapi_demos/static/demo-center-v2/car.png",offset: new AMap.Pixel(-35, -20),});console.log("轨迹绘制2");this.startAnimation();console.log("运动2");},// 开始运动startAnimation() {// 加载插件MoveAnimationwindow.AMap.plugin("AMap.MoveAnimation", () => {// 运动过的轨迹样式this.passedPolyline = new window.AMap.Polyline({map: this.map,strokeColor: "#AF5", //线颜色strokeWeight: 6, //线宽});// 绑定运动事件this.startMarker.on("moving", (e) => {this.passedPolyline.setPath(e.passedPath);this.map.setCenter(e.target.getPosition(), true);});// 开始运动this.startMarker.moveAlong(this.polylinefather, {// 每段动画持续时长, 单位:msduration: 500,// 覆盖物是否沿路径旋转autoRotation: true,});});},// 删除轨迹delTrack() {// 移除已创建的 markerthis.map.remove(this.marker);console.log("轨迹删除方法开始")// 起点删除if (this.startMarker) {this.startMarker.remove();this.startMarker = null;}// 折线删除if (this.polyline) {this.polyline.setMap(null);this.polyline = null;}// 走过的折线删除if (this.passedPolyline) {this.passedPolyline.setMap(null);this.passedPolyline = null;}}}}
</script><style scoped>#container{width: 100%;height: 500px;}
</style>

views/index.vue代码

<template><div><Map2 :pmsg="pmsg" :polylinefather="polyline04" ></Map2></div></template><script>import Map2 from '../components/Map2/index.vue'export default {name: 'hw3',components:{Map2},data(){return{polyline04:[ [ 116.478935, 39.997761 ], [ 116.478939, 39.997825 ], [ 116.478912, 39.998549 ], [ 116.478912, 39.998549 ], [ 116.478998, 39.998555 ], [ 116.478998, 39.998555 ], [ 116.479282, 39.99856 ], [ 116.479658, 39.998528 ], [ 116.480151, 39.998453 ], [ 116.480784, 39.998302 ], [ 116.480784, 39.998302 ], [ 116.481149, 39.998184 ], [ 116.481573, 39.997997 ], [ 116.481863, 39.997846 ], [ 116.482072, 39.997718 ], [ 116.482362, 39.997718 ], [ 116.483633, 39.998935 ], [ 116.48367, 39.998968 ], [ 116.484648, 39.999861 ] ],pmsg:"这是父组件"}}}
</script><style scoped></style>

最终效果:

轨迹回放,标记点为轨迹的第一个点

轨迹删除,轨迹和标记点都删除了

最后总结:

刚开始用的百度地图的api,试了一下,发现传过去的值渲染有问题,最后才选了高德地图的api。

  1. 高德地图的api使用需要注意的点是Map对象生成这一步可能会存在问题,可能会报错
    如: ‘map’ is assigned a value but never used 和 ‘AMap’ is not defined
    解决方案见这位up主的评论区:
    https://www.bilibili.com/video/BV1EZ4y1z72F/?spm_id_from=333.999.0.0&vd_source=a56e9c2852c4b906ac796aa4c61964ec
  2. 还有一点就是this.map和map的使用 需要注意 这点我踩了很多坑
  3. 掌握前端的 debugger 手段
    https://blog.csdn.net/leaning_java/article/details/122828550
  4. 复习了下 vue 中 父子组件
    https://www.bilibili.com/video/BV1TW4y1r7vV/?spm_id_from=333.337.search-card.all.click&vd_source=a56e9c2852c4b906ac796aa4c61964ec
  5. 复习了 父子组件之间的 通信
    https://www.bilibili.com/video/BV1Zy4y1W7Xo/?spm_id_from=333.337.search-card.all.click&vd_source=a56e9c2852c4b906ac796aa4c61964ec
  6. 进阶知识,以后再看vue 利用高德地图的巡航轨迹, 做带进度条和倍速的轨迹回放_Jusme_wx的博客-CSDN博客_高德轨迹回放进度条

利用vue+高德地图API 实现用户的运动轨迹相关推荐

  1. Vue+高德地图API的使用(定位打卡)

    接上之前的项目 Vue+高德地图API的使用 Vue+高德地图API的使用(插件的使用) 1.页面布局 绘制页面 <div class="Clock"><!-- ...

  2. 关于在vue2.X中使用高德地图api获取用户定位

    最近开发的MOA考试端需要获取到当前考试用户的定位,公司没有自己的定位组件,所以需要接入高德地图api 废话不多说,直接上操作步骤. 1.首先上高德地图API的官网,高德地图API官网, 跟着以上的步 ...

  3. vue 高德地图api爬坑之路(一)初始化

    由于使用vue-amap插件有点问题,所以使用了原生高德地图api. 集成: public/index.html 添加 <script type="text/javascript&qu ...

  4. Vue+高德地图api

    文章目录 前言 一.准备工作 1.申请应用 2.引入 3.创建地图 二.使用高德地图 1.覆盖物 (1) 点标记 (2) 海量点标记 (3) 轨迹回放 2.矢量图形 (1) 多边形 3.图层 (1) ...

  5. Vue+高德地图API的使用

    浏览器搜索 高德开放平台 或者 高德地图API 链接地址:https://lbs.amap.com/ 二.创建Vue项目 Vue2跟Vue3的差别不大,用哪个都可以 使用npm 安装 高德地图 按 N ...

  6. Vue+高德地图API的使用(插件的使用)

    接上次地图显示 官方文档:根据自己需求引入想要的插件 在AMapLoader.load中的plugins引入你所需要的插件 //这里是我引入的插件 plugins: ["AMap.ToolB ...

  7. vue 高德地图api爬坑之路(三)Autocomplete 和 PlaceSearch

    添加页面控件 <div class="search-div" ><el-input id="tipInput" v-model="i ...

  8. Vue+高德地图API的使用(电子围栏)

    页面绘制 <template><!-- 围栏数据以表格的形式展示 --><el-table :data="fencingData" border st ...

  9. vue 高德地图API根据地址获取经纬度/根据经纬度获取地址

     1.引入 <script type="text/javascript" src="https://webapi.amap.com/maps?v=1.4.14&am ...

最新文章

  1. 设计模式建议学习顺序
  2. spark 算子例子_Spark性能调优方法
  3. 怎么用java实现打字功能_怎么用JAVA编写一个打字游戏
  4. VS2013在Release情况下使用vector有时候会崩溃的一个可能原因
  5. java collections读书笔记(3) vector(2)
  6. html%3c arial%3e,【博客园】样式美化+网站统计访问+添加网易云背景音乐
  7. Spark 基础 —— RDD(一)
  8. 接口自动化测试框架搭建(5、封装get.post请求方法)--python+HTMLTestRunnerCN+request+unittest+mock+db
  9. cad卸载_永远不舍得卸载的6款CAD插件,完全免费,让你三小时做一套图!
  10. (10.1.3.4)UI设计,扁平化还是拟物化?
  11. 举个栗子!Tableau 技巧(131):用烛台图 Candlestick Chart 分析价格波动
  12. 2005高考作文题目汇总
  13. 如何在Windows中使用截图工具进行屏幕截图
  14. 【10个精品网站】找素材、找图片、PDF在线工具、免费图片降噪修复、免费可商用字体、PPT模板
  15. Cocos2d-x瓦片地图及本地存储
  16. android的边框设置
  17. bytebuddy实现原理分析 源码分析 (二)
  18. 关于项目管理的通俗讲解
  19. 【增加苏宁】2020双十一淘宝领喵币+京东全名营业+支付宝+苏宁の自动化任务
  20. 【问题解决】OpenWrt报错nf_conntrack: automatic helper assignment is deprecated and it will be removed soon.

热门文章

  1. 对智能电视的几个看法和观点
  2. 少儿编程pythonppt-五年级的孩子学编程有没有意义?
  3. mmorpg游戏设计之2D游戏地图的九宫格子
  4. 编写ASCOM平台的驱动
  5. html a标签 onload,动态加载script和css标签的onload问题
  6. Kubernetes CKA认证运维工程师笔记-Docker快速入门
  7. Amazon 发展历程与前景
  8. 防水蓝牙耳机哪个好?防水音质好的蓝牙耳机推荐
  9. c 语言编程 脚本之家,wincc c脚本实例wincc赋值程序
  10. Android面试要点