vue3使用百度地图实现个性化地图和轨迹

vue3使用百度地图实现个性化地图和轨迹

最终效果如图:
在这里插入图片描述

步骤如下:

一、百度地图在vue3中的引入

1.首先在百度地图开发中心中申请ak(不多介绍)
2.两种引入方式:在 index.html 中直接引入;使用npm导包。(我使用的是npm导包,但是我试了直接引入的,也是可以的)

<script type="text/javascript" src="https://api.map.baidu.com/api?v=3.0&ak=应用AK"></script>

3.若不想带有百度地图水印,可在 index.html 中使用以下代码去掉

 <style type="text/css">.BMap_cpyCtrl {display: none;}</style><style type="text/css">.anchorBL{display:none;}</style>

4.在 index.html 中引入路书和聚合点

  <!-- 路书功能 --><script type="text/javascript" src="https://api.map.baidu.com/library/LuShu/1.2/src/LuShu_min.js"></script><!-- 聚合点 --><script type="text/javascript" src="//api.map.baidu.com/library/TextIconOverlay/1.2/src/TextIconOverlay_min.js"></script><script type="text/javascript"  src="//api.map.baidu.com/library/MarkerClusterer/1.2/src/MarkerClusterer_min.js"></script>

5.index.html页面最终如图:
在这里插入图片描述

二、页面内容

1.一个有宽高的div和自定义信息窗口

 <div style="width: 800px;height: 600px" id="containerGL">...<div ref="customInfoWindow" class="custom-info-window" v-show="showTap">自定义的信息窗口内容{{onedata}}</div>

2.新建异步加载文件并引入页面
我是在api/baidumapApi里新建bmgl.js文件

在这里插入图片描述
bmgl.js内容

const ak = '你的ak'/**
* 异步加载百度地图
* @returns {Promise}
* @constructor
*/
export function loadBaiDuMap() {return new Promise(function (resolve, reject) {try {console.log('BMap is defined:', BMapGL === undefined || BMapGL)resolve(BMapGL)} catch (err) {window.init = function () {resolve(BMapGL)}let script = document.createElement('script')script.type = 'text/javascript'script.src = `http://api.map.baidu.com/api?v=1.0&type=webgl&ak=${ak}&callback=init`script.onerror = rejectdocument.body.appendChild(script)}})
}

在页面引入:

import { loadBaiDuMap } from "@/api/baidumapApi/bmgl.js"

3.自定义图标并创建标注

           //点数据let cityData = ref([{ enitInt: 121.46374, enitLat: 31.22581, name: '人民广场', online: 1 },{ enitInt: 121.44566, enitLat: 31.22389, name: '静安寺', online: 0 },{ enitInt: 121.4832, enitLat: 31.23843, name: '外滩', online: 1 },])// 创建点cityData.value.forEach(item => {let myIcon1 = new BMapGL.Icon('../../../../../src/assets/images/onLine.png', new BMapGL.Size(40, 40));let myIcon2 = new BMapGL.Icon('../../../../../src/assets/images/noOnLine.png', new BMapGL.Size(40, 40));const point = new BMapGL.Point(item.enitInt, item.enitLat)// 创建标注let marker = new BMapGL.Marker(point, { icon: item.online == 1 ? myIcon1 : myIcon2 });// 将标注添加到地图中map.addOverlay(marker)//点击标注事件marker.addEventListener('click', (e: any) => {let infoWindow = new BMapGL.InfoWindow(customInfoWindow.value, {maxWidth: 350,minWidth: 350,closeOnClick: true})marker.openInfoWindow(infoWindow)showTap.value = truelngdata.value = item.enitIntlatdata.value = item.enitLataddrName.value = item.namevedioVisible.value = true})})

4.创建轨迹线

         //轨迹线var paths = [];cityData.value.forEach(item => {const point = new BMapGL.Point(item.enitInt, item.enitLat)paths.push(point)})//添加折线const polyline = new BMapGL.Polyline(paths,{enableEditing: false,//是否启用线编辑,默认为falseenableClicking: true,//是否响应点击事件,默认为trueicons: [],strokeWeight: '2',//折线的宽度,以像素为单位strokeOpacity: 0.8,//折线的透明度,取值范围0 - 1strokeColor: "#416EBF" //折线颜色});map.addOverlay(polyline);

5.个性化地图样式

去官网上下载自己的个性地图

①登录官网后,点击"控制台–特色服务平台–个性化地图",在该页面可以找到地图模板,选择适合你需求的模板并发布样式。这样你就能在"我的地图"中找到该地图。
在这里插入图片描述
②复制JSON文件(也可以将JSON文件下载到本地,此方法自行搜索)
在这里插入图片描述
③在map里使用

        // 本地个性化地图,通过JSON文件的方式获取var styleJson =[{"featureType": "land","elementType": "geometry","stylers": {"visibility": "on","color": "#091220ff"}
!!!!!                
!!!!!此处json太长,进行了省略,请自行去官网复制
!!!!!},{"featureType": "scenicspots","elementType": "labels.text.stroke","stylers": {"color": "#ffffff00"}}]map.setMapStyleV2({ styleJson: styleJson })

三、最终地图代码

<template>
<div style="width: 100%;height: 100%;" id="containerGL"></div>
<div ref="customInfoWindow" class="custom-info-window" v-show="showTap">{{ addrName }}{{ lngdata }}{{ latdata }}</div>
</template>......onMounted(() => {initMap()
})
//是否展示窗口信息
const showTap = ref(false)
const customInfoWindow = ref(null)
//定义坐标字段
const lngdata = ref('')
const latdata = ref('')
const addrName = ref('')
//点数据
let cityData = ref([{ enitInt: 121.46374, enitLat: 31.22581, name: '人民广场', online: 1 },{ enitInt: 121.44566, enitLat: 31.22389, name: '静安寺', online: 0 },{ enitInt: 121.4832, enitLat: 31.23843, name: '外滩', online: 1 },
])
//初始化地图
function initMap() {// 传入密钥获取地图回调。loadBaiDuMap().then((BMapGL: any) => {// 创建地图实例let map = new BMapGL.Map("containerGL", { enableMapClick: false });// 本地个性化地图,通过JSON文件的方式获取var styleJson =[{"featureType": "land","elementType": "geometry","stylers": {"visibility": "on","color": "#091220ff"}
!!!!!                
!!!!!此处json太长,进行了省略,请自行去官网复制
!!!!!},{"featureType": "scenicspots","elementType": "labels.text.stroke","stylers": {"color": "#ffffff00"}}]map.setMapStyleV2({ styleJson: styleJson })// 添加比例尺控件map.addControl(new BMapGL.ScaleControl({anchor: "BMAP_ANCHOR_BOTTOM_LEFT",offset: new BMapGL.Size(20, -10),}));// 设置地图允许的最大最小级别map.setMinZoom(5)map.setMaxZoom(20)// 添加缩放控件map.addControl(new BMapGL.ZoomControl({anchor: "BMAP_ANCHOR_BOTTOM_RIGHT",offset: new BMapGL.Size(10, 10),}))map.disableDoubleClickZoom() //阻止双击放大// 保存地图map.value = map// 创建点坐标 axios => res 获取的初始化定位坐标const point = new BMapGL.Point(121.46374, 31.22581)// 初始化地图,设置中心点坐标和地图级别map.centerAndZoom(point, 15)//开启鼠标滚轮缩放map.enableScrollWheelZoom(true)//轨迹线var paths = [];cityData.value.forEach(item => {// 创建点let myIcon1 = new BMapGL.Icon('../../../../../src/assets/images/onLine.png', new BMapGL.Size(40, 40));let myIcon2 = new BMapGL.Icon('../../../../../src/assets/images/noOnLine.png', new BMapGL.Size(40, 40));const point = new BMapGL.Point(item.enitInt, item.enitLat)// 创建标注let marker = new BMapGL.Marker(point, { icon: item.online == 1 ? myIcon1 : myIcon2 });paths.push(point)// 将标注添加到地图中map.addOverlay(marker)marker.addEventListener('click', (e: any) => {let infoWindow = new BMapGL.InfoWindow(customInfoWindow.value, {maxWidth: 350,minWidth: 350,closeOnClick: true})marker.openInfoWindow(infoWindow)showTap.value = truelngdata.value = item.enitIntlatdata.value = item.enitLataddrName.value = item.name})})//添加折线const polyline = new BMapGL.Polyline(paths,{enableEditing: false,//是否启用线编辑,默认为falseenableClicking: true,//是否响应点击事件,默认为trueicons: [],strokeWeight: '2',//折线的宽度,以像素为单位strokeOpacity: 0.8,//折线的透明度,取值范围0 - 1strokeColor: "#416EBF" //折线颜色});map.addOverlay(polyline);}).catch((err) => {console.log(err)})
}

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

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

相关文章

CentOS7 Zookeeper3.8.3 单节点安装

CentOS7 Zookeeper3.8.3 单节点安装 1、把压缩包丢tools里&#xff0c;进tools cd /tools2、解压到training tar -zxvf /tools/apache-zookeeper-3.8.3-bin.tar.gz -C /training3、进training cd /training4、重命名 mv apache-zookeeper-3.8.3-bin zookeeper5、进zookeep…

【深蓝学院】移动机器人运动规划--第7章 集群机器人运动规划--笔记

文章目录 0. Contents1. Multi-Agent Path Finding (MAPF)1.1 HCA*1.2 Single-Agent A*1.3 ID1.4 M*1.5 Conflict-Based Search(CBS)1.6 ECBS1.6.1 heuristics1.6.2 Focal Search 2. Velocity Obstacle (VO&#xff0c;速度障碍物)2.1 VO2.2. RVO2.3 ORCA 3. Flocking model&am…

ccadmin - 可免费试用的 FreeSWITCH web管理后台

ccadmin - FreeSWITCH web管理后台 简介免费测试在线预览功能说明 简介 顶顶通呼叫中心中间件Web后台管理系统简称CCAdmin-Web&#xff0c;用于管理和配置顶顶通呼叫中心中间件。因为顶顶通呼叫中心中间件是基于FreeSWITCH开发的&#xff0c;所以CCAdmin本质上也是一个FreeSWI…

全闪存加速信创数据库数仓一体机解决方案

立足行业&#xff0c;深度解读 在新的大数据生态中&#xff0c;传统数据库/数据仓库技术和产品成为大数据生态中的组成部分&#xff0c;对结构化数据的存储和计算进行支撑。 数据库&数据仓库一体机是高端、核心数据管理产品&#xff0c;在我国党政、银行、交通等领域广泛…

Function calling流程总结 和 用于构建Agent的Function calling流程

Function calling流程总结的步骤如下&#xff1a; 自定义函数&#xff1a;根据用户需求&#xff0c;自定义函数chen_ming_algorithm&#xff0c;用于处理特定的任务。创建字典&#xff1a;根据自定义函数&#xff0c;创建一个字典chen_ming_function&#xff0c;其中包含自定义…

RuoYi-Vue-Plus功能分析-jackson配置

文章目录 前言一、配置文件二、配置类三、注解四、json工具类1. 工具内容2. 使用工具 前言 前端在给我发送请求的时候一般包含三个部分url&#xff0c;header&#xff0c;body。那么就会涉及我们后端如何接收这些请求参数并且我们处理完毕参数后前端又如何接收参数 通过url传…

Java8 - LocalDateTime时间日期类使用详解

&#x1f3f7;️个人主页&#xff1a;牵着猫散步的鼠鼠 &#x1f3f7;️系列专栏&#xff1a;Java全栈-专栏 &#x1f3f7;️个人学习笔记&#xff0c;若有缺误&#xff0c;欢迎评论区指正 前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&…

苹果备忘录导出方法

文章目录 前言方法1&#xff1a;iCloud 导出方法2&#xff1a;Pages 文稿导出&#xff08;最推荐&#xff09;方法3&#xff1a;借助Mac软件导出总结 前言 苹果生态真是让我们又爱又恨&#xff0c;其得益于无缝整合、安全性和应用程序生态系统&#xff0c;能够让在用户在自己的…

【LeetCode】一周中的第几天+ 一年中的第几天

2023-12-30 文章目录 一周中的第几天方法一&#xff1a;模拟思路步骤 方法二&#xff1a;调用库函数方法三&#xff1a;调用库函数 [1154. 一年中的第几天](https://leetcode.cn/problems/day-of-the-year/)方法一&#xff1a;直接计算思路&#xff1a; 方法二&#xff1a;调用…

如何p掉照片上的路人?一分钟教你快速去除

我们旅游的时候&#xff0c;拍照是必不可少的一个环节。但是&#xff0c;有时候照片的背景中会出现一些路人&#xff0c;让照片的美观度大打折扣。那么照片如何p掉路人呢&#xff1f;今天&#xff0c;我就来给大家分享几个实用的小技巧&#xff0c;让你轻松成为“P图大师”。 …

【Mysql】InnoDB 中 B+ 树索引的注意事项

一、根页面万年不动 在之前的文章里&#xff0c;为了方便理解&#xff0c;都是先画存储用户记录的叶子节点&#xff0c;然后再画出存储目录项记录的内节点。 但实际上 B 树的行成过程是这样的&#xff1a; 每当为某个表创建一个 B 树索引&#xff0c;都会为这个索引创建一个根…

学不动系列-git-hooks和husky+lintstage

git-hooks 为了保证提交的代码符合规范&#xff0c;可以在上传代码时进行校验。常用husky来协助进行代码提交时的eslint校验。husky是基于git-hooks来实现&#xff0c;在使用husky之前&#xff0c;我们先来研究一下git-hooks。 构建git-hooks测试项目 需要使用git-hooks就需…