高德地图的使用

JS API 结合 Vue 使用

高德地图 jsapi 下载、引入

npm add @amap/amap-jsapi-loaderimport 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.DrivingAMap.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]// 起点 startconst start = list.shift()// 终点 endconst 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 传入 markerconst marker = new AMap.Marker({position: [point?.longitude, point?.latitude],// 将一张图片的地址设置为 iconicon: 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 传入 markerconst marker = new AMap.Marker({position: [point?.longitude, point?.latitude],// 将一张图片的地址设置为 iconicon: Icon,// 设置了 icon 以后,设置 icon 的偏移量,以 icon 的 [center bottom] 为原点offset: new AMap.Pixel(-width / 2, -height)})return marker}// 起点 startconst start = list.shift()const startMarker = getMarker(start!, startImg)// 终点 endconst end = list.pop()const endMarker = getMarker(end!, endImg)map.add([startMarker, endMarker])// 途经点 optsconst 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?.currentLocationInfoconst 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.hqwc.cn/news/7354.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Android:Lifecycle

整体架构 LifecycleOwner Lifecycle持有者 在ComponentActivity中new出来,所以Activity和Fragment自带 实现了LifecycleOwner接口的类 可以获得生命周期信息类Lifecycle Fragment和Activity都已经实现了该接口 Lifecycle Registry 生命周期注册器 可以提交生命周…

Nginx配置springboot+vue项目http跳转https

java生成证书 添加依赖 <dependency><groupId>org.bouncycastle</groupId><artifactId>bcpkix-jdk15on</artifactId><version>1.69</version></dependency> import org.bouncycastle.asn1.ASN1Encodable; import org.bounc…

Layout-静态模板结构搭建、字体图标引入、一级导航渲染、吸顶导航交互实现、Pinia优化重复请求【小兔鲜Vue3】

Layout-静态模板结构搭建 Layout模块静态模板搭建 LayoutNav.vue <script setup></script><template><nav class"app-topnav"><div class"container"><ul><template v-if"true"><li><a h…

Eclipse中有用的快捷键

Eclipse中有的快捷键自己记不清楚&#xff0c;但用起来又很方便&#xff0c;遇到了就放在这边备忘。 【CtrlO】快速定位某个类中的属性、方法 有时候&#xff0c;一个类中的属性、方法比较多&#xff0c;想用快捷键快速查找&#xff0c;提升效率。 举例&#xff1a;我想查找…

解决React18+ts项目导入模块的声明报错

路径配置 项目路径别名的配置 ts对指向src的目录提示是不支持的 所以需要手动配置符号指向 在vite.config.ts import path from path export default defineConfig({plugins:[react()],resolve:{alias:{"":path.resolve(__dirname, ./src)}} })但这时path模块引入会…

ubuntu git clone 失败

命令行报错如下&#xff1a; gitxxx.xx.com: Permission denied (publickey). fatal: 无法读取远程仓库。修改步骤&#xff1a; 1、.ssh权限配置问题 .ssh 文件夹权限 755 或 700 config 文件权限 644 id_rsa 文件权限 600 id_rsa.pub 文件权限 644 r&#xff1a;read 代表读…

基于pyqt和卷积网络CNN的中文汉字识别

直接上效果演示图&#xff1a; 通过点击按钮可以实现在画板上写汉字识别和加载图片识别两个功能。 视频演示和demo仓库地址在b站视频001期&#xff1a; 到此一游7758258的个人空间-到此一游7758258个人主页-哔哩哔哩视频 所有代码展示&#xff1a; 十分的简洁&#xff0c;主…

【Android Framework系列】第4章 PMS原理

1 PMS简介 PMS&#xff08;PackageManagerService&#xff09;是Android提供的包管理系统服务&#xff0c;它用来管理所有的包信息&#xff0c;包括应用安装、卸载、更新以及解析AndroidManifest.xml。通过解析每个安装应用的AndroidManifest.xml&#xff0c;将xml中的数据全部…

易基因: RRBS揭示基于DNA甲基化驱动基因的肾透明细胞癌预后模型的鉴定和验证|项目文章

大家好&#xff0c;这里是专注表观组学十余年&#xff0c;领跑多组学科研服务的易基因。 肾细胞癌&#xff08;RCC&#xff09;是最常见的肾癌亚型&#xff0c;每年超400万例新发病例&#xff0c;是泌尿系统恶性肿瘤导致的第二大死因。2%-70%的RCC为透明细胞RCC&#xff08;Cl…

HotSpot 垃圾收集器

HotSpot 垃圾收集器 HotSpot 虚拟机提供了多种垃圾收集器&#xff0c;每种收集器都有各自的特点&#xff0c;虽然我们要对各个收集器进行比较&#xff0c;但并非为了挑选出一个最好的收集器。我们选择的只是对具体应用最合适的收集器。 新生代垃圾收集器 Serial 垃圾收集器&am…

Spring Boot 整合 分布式搜索引擎 Elastic Search 实现 我附近的、酒店竞排

文章目录 ⛄引言一、我附近的酒店⛅需求分析⚡源码编写 二、酒店竞价排名⌚需求分析⏰修改搜索业务 ✅效果图⛵小结 ⛄引言 本文参考黑马 分布式Elastic search Elasticsearch是一款非常强大的开源搜索引擎&#xff0c;具备非常多强大功能&#xff0c;可以帮助我们从海量数据中…

账号安全总结-业务安全测试实操(27)

电子邮件账号泄露事件 电子邮箱业务基于计算机和通信网的信息传递业务,利用电信号传递和存储信息,为用户传送电子信函、文件数字传真、图像和数字化语音等各类型的信息。电子邮件最大的特点是,人们可以在任何地方、任何时间收、发信件,解决了时空的限制,大大提高了工作效…