高德地图的使用

news2024/9/20 18:40:19

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) //加载错误提示
    })
}

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

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

相关文章

不定长(可变) 位置参数 *args和关键字参数 **kwargs 详解

位置参数: 传参时前面不带 "变量名", 顺序不可变, 按顺序赋给相应的局部变量def test(one,two,three):print(one - two * three)test(1,2,3) def test(one,two,three):print(one - two * three)test(3,2,1) 注意位置参数,需要注意 1 、 不…

STM32外设系列—BH1750

文章目录 一、BH1750简介二、BH1750原理图三、BH1750数据手册3.1 指令集3.2 IIC通信读/写 四、BH1750程序设计4.1 IIC程序4.2 BH1750初始化程序4.3 读取BH1750测量结果4.4 获取光照强度4.5 相关宏定义 五、应用实例六、拓展应用6.1 实时调节LED亮度6.2 实时调整颜色阈值 一、BH…

【Flutter】 Flutter 状态管理 BLoC 简明使用指南

文章目录 一、前言二、Flutter BLoC 的安装和配置三、Flutter BLoC 的基本使用四、Flutter BLoC 的简单示例五、总结 一、前言 🎉想要精通 Flutter,掌握更多技巧和最佳实践?好消息来了!👉 Flutter专栏->Flutter De…

波动率预言机:开启新的DeFi风险管理策略和衍生市场

Chainlink 喂价一直是 DeFi 生态系统的基础构建块,为越来越多的加密货币、大宗商品和法定货币提供准确、防篡改和聚合的价格参考数据。高质量的价格数据的可用性在 DeFi 的增长过程中起到了重要作用,使其总锁定资产价值在高峰期达到了 1700 亿美元&#…

基于云计算技术B/S架构的医院信息管理系统源码(HIS)

云HIS系统源码,采用云端SaaS服务的方式提供 基于云计算技术的B/S架构的云HIS系统,采用云端SaaS服务的方式提供,使用用户通过浏览器即能访问,无需关注系统的部署、维护、升级等问题,系统充分考虑了模板化、配置化、智能…

MySQL基础之概述

MySQL 启动、终止 //以管理员身份运行cmd net start mysql80 net stop mysql80客户端连接 客户端cmd “开始”找到MySQL 环境变量普通cmd mysql [-h 127.0.0.1] [-P 3306] -u root -p mysql -u root -p[ ] 内的参数可省略,若连接本地MySQL,则无需指定…

机器学习笔记 - 结合深度学习的基于内容的图像实例检索 利用现成的DCNN模型进行检索

一、简述 上一篇,基于内容的图像实例检索综述。 https://mp.csdn.net/mp_blog/creation/editor/131415155https://mp.csdn.net/mp_blog/creation/editor/131415155 一种方案是,为分类任务而进行大规模训练的DCNN直接充当图像检索任务的现成特征检测器,也就是说,可以…

Live800:为什么越来越多的企业选择在线客服系统?

现今,越来越多的企业开始使用在线客服系统,这是因为互联网时代已经席卷全球,企业需要尽可能地利用新技术,优化客户体验和服务。一个强大的在线客服系统可以帮助企业实现客服信息的统一管理,这样可以为企业带来巨大的好…

Vue Router 相关理解 基本路由 多级路由

6.1.相关理解 6.1.1.vue-router 的理解 vue的一个插件库,专门用来实现SPA应用 6.1.2.对SPA应用的理解 单页Web应用(single page web application,SPA)整个应用只有一个完整的页面点击页面中的导航链接不会刷新页面&#xff0c…

Find My资讯|苹果Find My技术应用于车内丢失设备

美国专利商标局正式授予苹果两项泰坦项目新专利,分别是扩展其针对车内丢失设备的“Find My”设备服务,以及用于自动驾驶汽车的高级传感器系统,其中传感器系统还涵盖了带有摄像头系统的车辆,而摄像头系统除可3D重建场景之外&#x…

通过网络流量监测分析解决堡垒主机部署后未经授权访问的3389端口问题

1. 前言 堡垒主机是网络安全的重要组成部分,但在部署后仍可能存在一些主机可以绕过堡垒主机直接访问之前的3389端口。本文将介绍如何利用网络流量监测分析方法解决这个问题,提供一种有效的解决方案,加强对网络的访问控制和安全监测。 2. 网…

[NOI2016] 网格

题目描述 跳蚤国王和蛐蛐国王在玩一个游戏。 他们在一个 �n 行 �m 列的网格上排兵布阵。其中的 �c 个格子中 (0≤�≤�⋅�)(0≤c≤n⋅m),每个格子有一只蛐蛐,其余的格子中&#xff…

小红书美妆品牌投放流程有哪些,品牌规划

越来越多的品牌开始重视新媒体,很多品牌和商家纷纷将目光瞄准了小红书,但是由于各平台都有自己的规则,盲目踏入不熟悉的领域肯定是有点冒险的。那么小红书美妆品牌投放流程有哪些,以及品牌规划。 小红书品牌投放指南是指小红书平台…

享元模式(Flyweight)

别名 缓存(Cache)。 定义 享元是一种结构型设计模式,它摒弃了在每个对象中保存所有数据的方式 ,通过共享多个对象所共有的相同状态,让你能在有限的内存容量中载入更多对象。 前言 1. 问题 假如你希望在长时间工作…

互联网+洗鞋店软件多门店多网点预约下单小程序

互联网洗鞋店软件小程序功能介绍: 1.用户端(上门取件、送货到店、寄存网点) 2.取货员端(取件员拍照,清洗过程,包装拍照) 3.多门店管理(用户进入小程序,根据定位自动匹配就近门店&…

Golang每日一练(leetDay0106) 超级丑数、右侧小于当前元素的个数

目录 313. 超级丑数 Super Ugly Number 🌟🌟 315. 计算右侧小于当前元素的个数 Count-of-smaller-numbers-after-self 🌟🌟🌟 🌟 每日一练刷题专栏 🌟 Rust每日一练 专栏 Golang每日一练…

easypoi 导出word并插入echart图片和文件

一 pom 文件引入&#xff1a;<!-- 目前的版本对应 poi 4.1.2 和 xmlbeans 3.1.0 , poi 3.17 和 xmlbeans 2.6.0 --><dependency><groupId>org.apache.poi</groupId><artifactId>poi</artifactId><version>4.1.2</version&…

新人必看的Java基础知识点大梳理

一个Java程序可以认为是一系列对象的集合&#xff0c;而这些对象通过调用彼此的方法来协同工作。下面简要介绍下类、对象、方法和实例变量的概念。 对象&#xff1a;对象是类的一个实例&#xff0c;有状态和行为。例如&#xff0c;一条狗是一个对象&#xff0c;它的状态有&…

树莓派Pico|SHELL中microPython命令行|pico sdk开发环境搭建|点灯代码|必备开发工具|gcc涉及的include文件目录

文章目录 SHELL中microPython命令行SHELL中基于microPython的控制代码Hello Pico 代码SHELL中简单点灯代码SHELL中循环亮灯代码 基于pico sdk开发环境搭建及点灯代码必备开发工具Mingw-w64&#xff1a;著名C/C编译器GCCarm-none-eabi&#xff1a;交叉编译工具Git&#xff1a;开…

js翻转数组

arr [red, green, "blue", "pink", "purple"];var arr1 [];for (var i 1; i < arr.length; i) {console.log(arr1.length)arr1[arr1.length] arr[arr.length - i];console.log(arr1.length)}console.log(arr1);