vue2接入高德地图实现折线绘制、起始点标记和轨迹打点的完整功能(提供Gitee源码)

news2024/10/1 15:27:37

目录

一、申请密钥

二、安装element-ui

三、安装高德地图依赖

四、完整代码

五、运行截图

六、官方文档

七、Gitee源码


一、申请密钥

登录高德开放平台,点击我的应用,先添加新应用,然后再添加Key。

如图所示填写对应的信息,系统就会自动生成。

二、安装element-ui

没安装的看官方文档:Element - The world's most popular Vue UI framework

三、安装高德地图依赖

npm i @amap/amap-jsapi-loader --save

四、完整代码

我也是参考着官方文档写的,把刚才申请好的安全密钥和Key替换进去,然后自己改一下起始点的经纬度信息和轨迹点信息就行了。

思路就是先初始化地图,创建起始点的Marker,再通过for循环遍历list集中的轨迹点CircleMarker并同时为每个轨迹点添加点击事件,把信息窗体(InfoWindow)放进去,这样就能查看每个轨迹点的详细信息了,最后通过创建Polyline实例绘制完整的轨迹路径。

<template>
  <div>
    <div id="container" class="container"></div>
  </div>
</template>

<script>
import AMapLoader from "@amap/amap-jsapi-loader";
window._AMapSecurityConfig = {
  // 安全密钥
  securityJsCode: "你的申请的安全密钥",
};
export default {
  name: "HomeView",
  data() {
    return {
      // 地图实例
      map: null,
      // 地址逆解析
      geoCoder: null,
      // 搜索提示
      AutoComplete: null,
      // 搜索节流阀
      loading: false,
      //起点经纬度
      startPosition:{
        time: '2023-12-19 10:28:10',
        lon: 121.1342347,
        lat: 32.0551446
      },
      //终点经纬度
      endPosition:{
        time: '2023-12-19 10:31:10',
        lon: 121.1835337,
        lat: 32.0486566
      },
      //轨迹点列表
      list:[
        {
          time: '2023-12-19 10:28:10',
          lon: 121.1342347,
          lat: 32.0551446
        },
        {
          time: '2023-12-19 10:28:30',
          lon: 121.1406307,
          lat: 32.0553588
        },
        {
          time: '2023-12-19 10:29:10',
          lon: 121.1475297,
          lat: 32.0555119
        },
        {
          time: '2023-12-19 10:29:30',
          lon: 121.1579859,
          lat: 32.0558791
        },
        {
          time: '2023-12-19 10:29:50',
          lon: 121.1679751,
          lat: 32.0563687
        },
        {
          time: '2023-12-19 10:30:10',
          lon: 121.1820965,
          lat: 32.0571032
        },
        {
          time: '2023-12-19 10:30:20',
          lon: 121.1866958,
          lat: 32.0572256
        },
        {
          time: '2023-12-19 10:30:30',
          lon: 121.1869832,
          lat: 32.0557261
        },
        {
          time: '2023-12-19 10:30:40',
          lon: 121.1869473,
          lat: 32.0534614
        },
        {
          time: '2023-12-19 10:31:10',
          lon: 121.1835337,
          lat: 32.0486566
        }
      ]
    };
  },
  created() {
    this.initMap()
  },
  methods: {
    initMap() {
      AMapLoader.load({
        // 你申请的Key
        key: "你申请的Key",
        version: "2.0",
        // 需要用到的插件
        plugins: ["AMap.Geocoder", "AMap.AutoComplete"],
      })
          .then((AMap) => {
            this.map = new AMap.Map("container", {
              viewMode: "3D", //是否为3D地图模式
              zoom: 12, //初始化地图级别
              center: [116.324887,40.003069], //初始化地图中心点位置
            });
            //地址逆解析插件
            this.geoCoder = new AMap.Geocoder({
              city: "010", //城市设为北京,默认:“全国”
              radius: 1000, //范围,默认:500
            });
            // 搜索提示插件
            this.AutoComplete = new AMap.AutoComplete({ city: "全国" });
            this.trackPoint();
          })
          .catch((err) => {
            console.log(err)
            // 错误
          });
    },
    createStartPoint(){
      // 创建一个 Icon
      var startIcon = new AMap.Icon({
        // 图标尺寸
        size: new AMap.Size(25, 34),
        // 图标的取图地址
        image: '//a.amap.com/jsapi_demos/static/demo-center/icons/dir-marker.png',
        // 图标所用图片大小
        imageSize: new AMap.Size(135, 40),
        // 图标取图偏移量
        imageOffset: new AMap.Pixel(-9, -3)
      });

      // 将 icon 传入 marker
      var startMarker = new AMap.Marker({
        position: new AMap.LngLat(this.startPosition.lon,this.startPosition.lat),
        icon: startIcon,
        offset: new AMap.Pixel(-13, -30)
      });
      // 将 markers 添加到地图
      this.map.add([startMarker]);
    },
    createEndPoint(){
      // 创建一个 icon
      var endIcon = new AMap.Icon({
        size: new AMap.Size(25, 34),
        image: '//a.amap.com/jsapi_demos/static/demo-center/icons/dir-marker.png',
        imageSize: new AMap.Size(135, 40),
        imageOffset: new AMap.Pixel(-95, -3)
      });

      // 将 icon 传入 marker
      var endMarker = new AMap.Marker({
        position: new AMap.LngLat(this.endPosition.lon,this.endPosition.lat),
        icon: endIcon,
        offset: new AMap.Pixel(-13, -30)
      });
      this.map.add([endMarker]);
    },
    trackPoint(){
      this.createStartPoint();
      this.createEndPoint();
      let path = []
      for(let i = 0 ; i < this.list.length ; i++){
        path.push(new AMap.LngLat(this.list[i].lon, this.list[i].lat))
        this.createCircleMarker(this.list[i])
      }
      this.createLine(path)
      //自动缩放地图到合适大小
      this.map.setFitView();
    },
    createCircleMarker(data){
      let center = new AMap.LngLat(data.lon, data.lat);
      let radius = 7; //单位:px
      let circleMarker = new AMap.CircleMarker({
        center: center, //圆心
        radius: radius, //半径
        strokeColor: "blue", //轮廓线颜色
        strokeWeight: 2, //轮廓线宽度
        strokeOpacity: 1, //轮廓线透明度
        fillColor: "rgb(255,255,255)", //圆点填充颜色
        fillOpacity: 1, //圆点填充透明度
        zIndex: 10, //圆点覆盖物的叠加顺序
        cursor: "pointer", //鼠标悬停时的鼠标样式
      });
      let _that = this;
      //创建点标记的点击事件
      circleMarker.on("click", function (e) {
        //信息窗体的内容
        let content = [
          "<div><b>轨迹点信息</b>",
          "经度:"+data.lon,
          "纬度:"+data.lat,
          "时间:"+data.time,
          "</div>",
        ];
        //创建 infoWindow 实例
        let infoWindow = new AMap.InfoWindow({
          content: content.join("<br>"), //传入字符串拼接的 DOM 元素
          anchor: "top-left",
          autoMove:false
        });
        //打开信息窗体
        infoWindow.open(_that.map, e.lnglat);
      });
      //圆形 circleMarker 对象添加到 Map
      this.map.add(circleMarker);
    },
    createLine(path){
      //创建 Polyline 实例
      let polyline = new AMap.Polyline({
        path: path,
        showDir: true,
        strokeColor: "#039bc5", //线颜色
        strokeOpacity: 1,     //线透明度
        strokeWeight: 6, //线宽
        zIndex: 5, //圆点覆盖物的叠加顺序
        strokeStyle: "solid",  //线样式
      });
      this.map.add(polyline);
    }
  },
  mounted() {
  },
};
</script>

<style>
.container {
  margin-top: 10px;
  width: 1280px;
  height: 720px;
}
</style>

五、运行截图

六、官方文档

更多教程参考高德官方文档:折线-线-进阶教程-地图 JS API 2.0 | 高德地图API

七、Gitee源码

码云地址:vue2接入高德地图实现折线绘制+起始点标记+轨迹打点的完整功能

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2182614.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

第十九章(自定义类型:结构体)

1. 结构体类型的声明 2. 结构体变量的创建和初始化 3. 结构成员访问操作符 4. 结构体内存对⻬ 5. 结构体传参 一、结构体类型的声明 1.1结构体的声明 struct student {int age;int id[10];char name[10]; };1.2 结构体变量的初始化 struct student {int age;char id[10…

YOLOv1代码复现(论文复现)

YOLOv1代码复现&#xff08;论文复现&#xff09; 本文所涉及所有资源均在传知代码平台可获取 文章目录 YOLOv1代码复现&#xff08;论文复现&#xff09;论文介绍主要内容实验部分卷积网络结构计算损失核心代码 缺点 论文介绍 该论文就是YOLOv1&#xff0c;YOLOv1是YOLO系列目…

大模型部署——NVIDIA NIM 和 LangChain 如何彻底改变 AI 集成和性能

DigiOps与人工智能 人工智能已经从一个未来主义的想法变成了改变全球行业的强大力量。人工智能驱动的解决方案正在改变医疗保健、金融、制造和零售等行业的企业运营方式。它们不仅提高了效率和准确性&#xff0c;还增强了决策能力。人工智能的价值不断增长&#xff0c;这从它处…

Ubuntu网卡配置

一、低阶版本配置网卡步骤:(如Ubuntu 16.04.2 LTS) 编辑配置文件interfaces,添加网卡配置信息 我这边以root用户登录进服务器,就不需要普通用户每次在命令前添加sudo vim /etc/network/interfaces 1.动态获取ip设置: auto ens3 # 网卡设备名称ens3 iface ens3 ine…

Tdesign TreeSelect 树形选择 多选

这里写自定义目录标题 小程序原生开发 Tdesign TreeSelect 树形选择 多选可以选择不同一级分类下的数据 小程序原生开发 Tdesign TreeSelect 树形选择 多选可以选择不同一级分类下的数据 TreeSelect 树形选择 在原demo基础上修改 const chineseNumber 一二三四五六七八九十.…

音视频入门基础:FLV专题(9)——Script Tag简介

一、SCRIPTDATA 根据《video_file_format_spec_v10_1.pdf》第75页到76页&#xff0c;如果某个Tag的Tag header中的TagType值为18&#xff0c;表示该Tag为Script Tag&#xff08;脚本Tag&#xff0c;又称Data Tag、SCRIPTDATA tag&#xff09;。这时如果Filter的值不为1表示未加…

昇思MindSpore进阶教程--使能图算融合

大家好&#xff0c;我是刘明&#xff0c;明志科技创始人&#xff0c;华为昇思MindSpore布道师。 技术上主攻前端开发、鸿蒙开发和AI算法研究。 努力为大家带来持续的技术分享&#xff0c;如果你也喜欢我的文章&#xff0c;就点个关注吧 正文开始 图算融合是MindSpore特有的网络…

十二生肖国庆姓氏专属头像

关注▲洋洋科创星球▲领取十二生肖国庆姓氏专属头像定制&#xff01; 庆祝祖国75周年华诞&#xff0c;在这个举国欢庆的国庆节时刻&#xff0c;我们特别为您准备了一份独特的礼物——十二生肖国庆姓氏专属头像定制。 十二生肖&#xff0c;又称属相&#xff0c;是中国传统文化中…

Linux 安装redis主从模式+哨兵模式3台节点

下载 https://download.redis.io/releases/ 解压 tar -zxvf redis-7.2.4.tar.gz -C /opt chmod 777 -R /opt/redis-7.2.4/安装 # 编译 make # 安装&#xff0c; 一定是大写PREFIX make PREFIX/opt/redis-7.2.4/redis/ install配置为系统服务 cd /etc/systemd/system/主服务…

盒子是什么? -- 第四课

文章目录 前言一、盒子是什么&#xff1f;二、元素介绍1.边框 - border2.内边距 - padding3. 外边距属性 -- margin 三、拓展知识1.块元素垂直外边距的合并2. 嵌套块元素垂直外边距的合并 四、背景属性五、元素的浮动1.浮动2.清除浮动3.元素定位4. 特殊定位 -- 黏性定位5. z-in…

Python selenium库学习使用实操二

系列文章目录 Python selenium库学习使用实操 文章目录 系列文章目录前言一、模拟登录二、表单录入 前言 在上一篇文章中&#xff0c;我们完成Selenium环境的搭建&#xff0c;和简单的自动化。今天继续深入学习。今天的目标是完成模拟登录&#xff0c;和表单录入。 一、模拟登…

什么是网络准入控制系统?2024年有哪些好用的网络准入控制系统?

网络准入控制系统&#xff08;Network Access Control, NAC&#xff09;是一种网络安全解决方案&#xff0c;旨在确保只有符合特定安全策略的设备和用户才能访问网络资源。NAC系统通过在设备连接到网络之前对其进行身份验证、授权和健康状态检查&#xff0c;从而防止未经授权的…

YOLOv11改进 | 注意力篇 | YOLOv11引入GAM注意力机制

1.GAM介绍 摘要&#xff1a;为了提高各种计算机视觉任务的性能&#xff0c;人们研究了各种注意机制。然而&#xff0c;现有的方法忽略了保留通道和空间信息以增强跨维交互的重要性。因此&#xff0c;我们提出了一种通过减少信息减少和放大全球交互表示来提高深度神经网络性能的…

vue3 实现拖拽排序效果 sortablejs

效果图 依赖安装 npm i sortablejs -S <template><div class"warp"><div class"parent-box" v-for"pItem in sortData" :key"pItem.name"><h2 class"parent-name">{{ pItem.name }}</h2>&l…

程序计数器(学习笔记)

程序计数器是一块较小的内存空间&#xff0c;它的作用可以看做是当前线程所执行的字节码的信号指示器&#xff08;偏移地址&#xff09;&#xff0c;Java编译过程中产生的字节码有点类似编译原理的指令&#xff0c;程序计数器的内存空间存储的是当前执行的字节码的偏移地址 因为…

唱响红色志愿,赞歌献给祖国——杭州建德市庆祝中华人民共和国成立75周年联欢盛宴纪实

作者&#xff1a;华夏之音/李望 通讯员&#xff1a;王江平 9月30日上午&#xff0c;金桂的香气与红旗的鲜艳交相辉映&#xff0c;杭州建德市党群服务中心、建德市新时代文明实践中心内洋溢着一股浓厚的节日氛围。在这里&#xff0c;一场名为“唱响红色志愿、赞歌献给祖国”的联…

企业架构系列(15)ArchiMate第13节:战略视角

战略视角提供了对企业高层战略方向和构成的不同视角建模&#xff0c;使建模者能够专注于某些特定方面。 一、战略视角概览 战略视角主要包括&#xff1a; 战略视角&#xff1a;提供企业战略、能力、价值流和资源以及预期成果的高层概述。能力地图视角&#xff1a;提供企业能力…

MySQL基础篇 part1

为什么使用数据库和数据库基本概念 想在vscode用markdown了&#xff0c;为什么不直接拿pdf版本呢&#xff1f; DB:数据库(Database) 即存储数据的“仓库”&#xff0c;其本质是一个文件系统。它保存了一系列有组织的数据。 DBMS:数据库管理系统(Database Management System)…

Oracle控制文件全部丢失如何使用RMAN智能恢复?

1.手动删除所有控制文件模拟故障产生 2.此时启动数据库发现控制文件丢失 3.登录rman 4.列出故障 list failure; 5.让RMAN列举恢复建议 advise failure; 6.使用RMAN智能修复 repair failure;

当AI遇上金融科技,创新业务场景和案例涌现

大家好&#xff0c;我是Shelly&#xff0c;一个专注于输出AI工具和科技前沿内容的AI应用教练&#xff0c;体验过300款以上的AI应用工具。关注科技及大模型领域对社会的影响10年。关注我一起驾驭AI工具&#xff0c;拥抱AI时代的到来。 在这个信息爆炸的时代&#xff0c;我们每天…