高德地图的使用

JS API 结合 Vue 使用

高德地图 jsapi 下载、引入

npm add @amap/amap-jsapi-loader

import AMapLoader from '@amap/amap-jsapi-loader'

使用2.0版本的loader需要在window对象下先配置 securityJsCode  JS API 安全密钥使用

JS API 使用 script 标签同步加载增加代理服务器设置脚本,并将「您申请的安全密钥」替换为您的安全密钥;(注意您这个设置必须是在JS API 脚本加载之前进行设置,否则设置无效。)

window._AMapSecurityConfig = {
  securityJsCode: '「您申请的安全密钥」'
}

使用ts时,上面这里会显示类型错误,因此需要在类型文件中配置Window的类型
interface Window {
  _AMapSecurityConfig: {
    securityJsCode: string
  }
}

 页面地图初始化加载

自定义地图-设置地图显示样式 自定义地图-地图

AMapLoader.load({
    key: '', // 申请好的Web端开发者Key,首次调用 load 时必填
    version: '2.0' // 指定要加载的 JSAPI 的版本,缺省时默认为 1.4.15
})
  .then((AMap) => {
      // 地图初始化
      // Map构造函数第一个传参的map为初始化地图的容器的id,第二个传参是配置对象
      const map = new AMap.Map('map', {
        viewMode:"3D",    //是否为3D地图模式
        mapStyle: 'amap://styles/whitesmoke', //设置地图的显示样式
        zoom: 12 //设置地图的缩放级别
      })    
  })
  .catch((e) => {
    console.error(e) //加载错误提示
  })

根据后台返回的经纬度数组,自定义绘制行车路径,参考官方文档 - 路线规划

使用插件 AMap.Driving-根据起点和终点规划自动行车路径

AMapLoader.load({
  key: '', // 申请好的Web端开发者Key,首次调用 load 时必填
  version: '2.0' // 指定要加载的 JSAPI 的版本,缺省时默认为 1.4.15
})
  .then((AMap) => {
    // 地图初始化
    const map = new AMap.Map('map', {
      // viewMode:"3D",    //是否为3D地图模式
      mapStyle: 'amap://styles/whitesmoke', //设置地图的显示样式
      zoom: 12 //设置地图的缩放级别
    })

    // 使用插件 AMap.Driving
    AMap.plugin('AMap.Driving', function () {
      const driving = new AMap.Driving({
        map: map, // 配置参数map,意思是在那个地图中绘制行车路径
        showTraffic: false, // 关闭道路情况(设置是否显示实时路况信息)
        hideMarkers: true // 关闭沿途标记(设置隐藏路径规划的起始点图标 )
      })

      // logisticsInfo是后端返回的行车路径的数组
      if (logistics.value?.logisticsInfo && logistics.value.logisticsInfo.length >= 2) {
        const list = [...logistics.value.logisticsInfo]

        // 起点 start
        const start = list.shift()
        // 终点 end
        const end = list.pop()

        // 传入起点和终点的经纬度信息,获取对应的驾车路线规划
        driving.search(
          [start?.longitude, start?.latitude],
          [end?.longitude, end?.latitude],
          function () {
            // 未出错时,result即是对应的路线规划方案
            // 在这里绘制沿途运输位置
          }
        )
      }
    })
  })
  .catch((e) => {
    console.error(e) // 加载错误提示
  })

使用插件 AMap.Driving-自定义绘制路径,也就是把路途的途径点告知地图让其渲染路径

 参考官方文档 途经点参数 路线规划-途经点

 

// 途经点 opts 是一个对象,属性waypoints就是绘制途经点参数
const opts = {
  // 途经点参数,最多支持传入16个途经点
  waypoints: list.map((item) => [item.longitude, item.latitude])
}
driving.search(
  [start?.longitude, start?.latitude],
  [end?.longitude, end?.latitude],
  opts,
  function () {
  }
)

实现业务:关闭途径标记( hideMarkers: true)并且实现自定义绘制起点-终点-和当前运输位置 ,其实就是绘制一个标记,参考官方实例 自定义图标-点标记

让当前的运输位置显示在地图的正中间并且设置缩放比例,参考官方文档 setFitView-setZoom方法

参考手册-地图 JS API

// 创建一个标记点函数
const getMarker = (point: Location, image: string, width = 25, height = 30) => {
  // 创建一个 Icon,这种方式可以设置图标的大小
  const Icon = new AMap.Icon({
    // 图标尺寸
    size: new AMap.Size(width, height),
    // 图标的取图地址
    image: image,
    // 图标所用图片大小
    imageSize: new AMap.Size(width, height)
  })
  // 将 icon 传入 marker
  const marker = new AMap.Marker({
    position: [point?.longitude, point?.latitude],
    // 将一张图片的地址设置为 icon
    icon: Icon,
    // 设置了 icon 以后,设置 icon 的偏移量,以 icon 的 [center bottom] 为原点
    offset: new AMap.Pixel(-width / 2, -height)
  })
  return marker
}
const startMarker = getMarker(start!, startImg) // 起点icon标记
const endMarker = getMarker(end!, endImg)  // 终点icon标记

// 往地图上增加标记
map.add([startMarker, endMarker])

driving.search(
  function () {
    // 绘制当前运输位置,后端返回 currentLocationInfo 就是当前的运输位置 标记
    const curr = logistics.value?.currentLocationInfo   // 当前的运输位置经纬度
    const currMarker = getMarker(curr!, carImg, 33, 20) // 当前运输位置标记
    map.add([currMarker]) // 往地图上增加当前运输位置标记

    // 2s后定位当中间进行缩放
    setTimeout(() => {
      map.setFitView([currMarker]) // 定位到当前运输的位置
      map.setZoom(10) // 一定比例的缩放
    }, 2000)
  }
)

 下面贴出完整绘制物流信息地图的代码

import startImg from '@/assets/start.png'
import endImg from '@/assets/end.png'
import carImg from '@/assets/car.png'

const initMap = () => {
  AMapLoader.load({
    key: '', // 申请好的Web端开发者Key,首次调用 load 时必填
    version: '2.0' // 指定要加载的 JSAPI 的版本,缺省时默认为 1.4.15
  })
    .then((AMap) => {
      // 地图初始化
      const map = new AMap.Map('map', {
        // viewMode:"3D",    //是否为3D地图模式
        mapStyle: 'amap://styles/whitesmoke', //设置地图的显示样式
        zoom: 12 //设置地图的缩放级别
      })
      AMap.plugin('AMap.Driving', function () {
        const driving = new AMap.Driving({
          map: map,
          //   panel: 'panel'
          showTraffic: false,
          hideMarkers: true
        })
        if (logistics.value?.logisticsInfo && logistics.value.logisticsInfo.length >= 2) {
          const list = [...logistics.value.logisticsInfo]
          //   创建标记函数
          const getMarker = (point: Location, image: string, width = 25, height = 30) => {
            // 创建一个 Icon,这种方式可以设置图标的大小
            const Icon = new AMap.Icon({
              // 图标尺寸
              size: new AMap.Size(width, height),
              // 图标的取图地址
              image: image,
              // 图标所用图片大小
              imageSize: new AMap.Size(width, height)
            })
            // 将 icon 传入 marker
            const marker = new AMap.Marker({
              position: [point?.longitude, point?.latitude],
              // 将一张图片的地址设置为 icon
              icon: Icon,
              // 设置了 icon 以后,设置 icon 的偏移量,以 icon 的 [center bottom] 为原点
              offset: new AMap.Pixel(-width / 2, -height)
            })
            return marker
          }
          // 起点 start
          const start = list.shift()
          const startMarker = getMarker(start!, startImg)
          // 终点 end
          const end = list.pop()
          const endMarker = getMarker(end!, endImg)
          map.add([startMarker, endMarker])
          // 途经点 opts
          const opts = {
            // 途经点参数,最多支持传入16个途经点
            waypoints: list.map((item) => [item.longitude, item.latitude])
          }
          driving.search(
            [start?.longitude, start?.latitude],
            [end?.longitude, end?.latitude],
            opts,
            function () {
              // 未出错时,result即是对应的路线规划方案
              // 绘制运输位置
              const curr = logistics.value?.currentLocationInfo
              const currMarker = getMarker(curr!, carImg, 33, 20)
              map.add([currMarker])
              // 2s后定位当中间进行缩放
              setTimeout(() => {
                map.setFitView([currMarker])
                map.setZoom(10)
              }, 2000)
            }
          )
        }
      })
    })
    .catch((e) => {
      console.error(e) //加载错误提示
    })
}

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

数据挖掘(6.1)--神经网络

目录 神经网络简介 BP算法 Delta学习规则的基本原理 BP神经网络的结构 BP神经网络的算法描述 神经网络训练一般步骤 后向传播算法的主要步骤 优缺点 BP算法简单举例 神经网络简介 神经网络是一种计算模型,它受到人脑处理信息的生物神经网络过程的启发。人…

第44步 深度学习图像识别:ResNet50建模(Tensorflow)

基于WIN10的64位系统演示 一、写在前面 (1)ResNet50 ResNet50是一种深度学习模型,由微软研究院的研究人员在2015年提出。"ResNet"的全称是"Residual Network",意为"残差网络","…

React 基本介绍

目录 1、React是什么 2、React 三大颠覆性的特点 2.1 组件 2.2 JSX 2.3 Virtual DOM 3、Flux 架构(redux) 3.1 Flux 3.2 redux 4、打包工具(webpack) 4.1 webpack与RequireJS、browserify 4.2 模块规范 4.3 非 JavaSc…

实验篇(7.2) 17. 站对站安全隧道 - FortiGate作为SSL客户端(SSL) ❀ 远程访问

【简介】虽然常用的站到站的连接用的是IPsec VPN,但是在某些特殊情况下,UDP500或4500端口被阻断,IPsec VPN无法连接,那么还有其它办法实现站到站的连接吗?SSL VPN也可以的。 实验要求与环境 OldMei集团深圳总部部署了域…

【云原生】二进制k8s集群(下)部署高可用master节点

本次部署说明 在上一篇文章中,就已经完成了二进制k8s集群部署的搭建,但是单机master并不适用于企业的实际运用(因为单机master中,仅仅只有一台master作为节点服务器的调度指挥,一旦宕机。就意味着整个集群的瘫痪&#…

【软考网络管理员】2023年软考网管初级常见知识考点(23)- 路由器的配置

涉及知识点 华为路由器的配置,华为路由器命令大全,软考大纲路由命令,静态路由和动态路由的配置命令,软考网络管理员常考知识点,软考网络管理员网络安全,网络管理员考点汇总。 原创于:CSDN博主-…

数字化转型的难点是什么?该如何突破?

01为什么要进行数字化转型? 数字化转型不仅是企业提高效率和竞争力的必经之路,也是市场发展趋势的体现。 提升业务效率:数字化转型可以采用自动化流程、数据分析和智能化技术,从而提高企业业务的自动化水平,优化流程…

贝叶斯算法人生

哈喽大家好,我是咸鱼 之前看到过耗子叔写的一篇文章《程序算法与人生选择》,这篇文章中耗子叔结合计算机中的经典算法(排序、动态规划等等),让大家在人生道路的选择上获得了一些启发 我最近看了一些关于贝叶斯思想的…

数字图像处理-图像复原与重建

文章目录 一、图像退化/复原过程的模型二、噪声模型2.1噪声的空间和频率特性2.2一些重要的噪声概率密度函数2.2.1高斯噪声2.2.2瑞利噪声2.2.3爱尔兰(伽马)噪声2.2.4指数噪声2.2.5均匀噪声2.2.6脉冲(椒盐)噪声 2.3周期噪声 三、只存…

为什么有了HTTP,还需要WebSocket协议?

目录 WebSocket是什么? WebSocket怎样建立连接? WebSocket的实际用途 WebSocket 与 HTTP 的选择 HTTP是基于TCP协议的,同一时间里,客户端和服务器只能有一方主动发数据,是半双工通信。 通常,打开某个网…

Redis从入门到精通【进阶篇】之高可用主从详解

文章目录 0.前言1.详解1.1 主从复制概述1.2 主从复制原理1.2.1.全量复制1.2.2.增量复制1.2.3.详细描述1.3 更深入理解1.4 常见面试题 2. 总结3. Redis从入门到精通系列文章 0.前言 Redis是一个高性能的键值存储系统,广泛应用于Web应用、缓存、消息队列等领域。在实…

论文解读:End-to-End Object Detection with Transformers

发表时间:2020 论文地址:https://arxiv.org/pdf/2005.12872.pdf 项目地址:https://github.com/facebookresearch/detr 提出了一种将对象检测视为集合预测问题的新方法。我们的方法简化了检测流程,有效地消除了许多手工设计的组件…

python自动化办公——读取PPT写入word表格

Python自动化办公——读取PPT内容写入word表格 文章目录 Python自动化办公——读取PPT内容写入word表格一、需求分析二、导入依赖三、代码四、结果及总结 一、需求分析 📖由于我们知识图谱课程需要将课堂小组汇报的PPT总结成word文档,而我觉得一页一页复…

python爬虫并做可视化分析--前程无忧

一.数据采集 1.采集逻辑 2.数据schema 招聘信息Schema { "岗位名称": "财务会计主管", "薪资":"1.3-2万", "地址": "*******", "经验要求": "5-7年", "公司名": "***…

JavaWeb小记——重定向和内部转发

目录 重定向 原理图 重定向语句 重定向特点 内部转发 原理图 请求转发特点 路径的书写 请求域对象request 特点 请求转发特点 重定向特点 重定向 原理图 重定向语句 response.setStatus(302); response.setHeader("location","http://www.baidu.c…

MS1826 HDMI 多功能视频处理器 4*4矩阵切换器

基本介绍 MS1826 是一款多功能视频处理器,包含 4 路独立 HDMI 音视频输入通道、4 路独立 HDMI 音视频输出通道以及四路独立可配置为输入或者输出的 SPDIF、I2S 音频信号。支持 4 个独立的字 库定制型 OSD;可处理隔行和逐行视频或者图形输入信号&#xff…

【计算机网络】网络安全,HTTP协议,同源策略,cors,jsonp

❤️ Author: 老九 ☕️ 个人博客:老九的CSDN博客 🙏 个人名言:不可控之事 乐观面对 😍 系列专栏: 文章目录 网络安全非对称加密中间人攻击XSSSQL注入CSRF HTTP协议同源策略corsjsonp 网络安全 非对称加密…

推荐好用的AI工具集

AI技术未来已来,我们要拥抱变化 ,笔记试用好用AI工具,也在代码中试用chatGPT 一、工具集 解决任何问题:ChatGPT 写文案:Jasper Al 、Copysmith 生成真人视频:Synthesia、 CogView2 AI AI 解决法律问题…

MySQL面试题--索引概念以及底层

目录 概述 索引的底层数据结构 二叉树 B树 B树 B树与B树对比: 面试回答 大纲 回答 概述 索引(index)是帮助MySQL高效获取数据的数据结构(有序)。 在数据之外,数据库系统还维护着满足特定查找算法的数据结构(B树&#xff0…

springboot 国家公务员招聘网站-计算机毕设 附源码80528

springboot 国家公务员招聘网站 目 录 摘要 1 绪论 1.1研究背景与意义 1.2开发现状 1.3系统开发技术的特色 1.4springboot框架介绍 1.5论文结构与章节安排 2 2国家公务员招聘网站系统分析 2.1 可行性分析 2.2 系统流程分析 2.2.1数据增加流程 2.3.2数据修改流程 2.…