vue中引入百度地图

2023-11-03

vue中引入百度地图

一、通过vue注册的方式引入

注:vue百度地图官网
安装百度地图
$ npm install vue-baidu-map --save
引入

使用百度地图首先需要去百度地图开放平台申请ak密钥,登录百度账号后:控制台->应用管理->我的应用->创建应用即可,创建完成后即可看到生成的ak密钥
地图密钥申请

1)全局注册,在工程的main.js中引入

import Vue from "vue";
import baiduMap from "vue-baidu-map";

Vue.use(baiduMap, { ak: mapAK });

2)局部注册,在使用地图的页面引入
地图组件存放在vue-baidu-map/components 文件夹下,可根据需要按模块引用

import baiduMap from "vue-baidu-map/components/map/Map.vue";
import bmMarker from "vue-baidu-map/components/overlays/Marker.vue";
import bmInfoWindow from "vue-baidu-map/components/overlays/InfoWindow.vue";

export default {
  components: {
    baiduMap,
    bmMarker,
    bmInfoWindow
  }
}
使用

更多详细使用参考官网API文档:javaScript APIweb服务API

<template>
  <baidu-map class="bm-view" ak="mapAK">
  </baidu-map>
</template>

二、通过js引入

1)引入map

① 基础map
定义一个loadMap.js

/**
 * 动态加载百度地图api函数
 * @param {String} ak  百度地图AK,必传
 */
 export default function loadBMap(ak) {
  return new Promise((resolve, reject) => {
    if (typeof window.BMap !== "undefined") {
      resolve(window.BMap);
      return true;
    }
    window.onBMapCallback = function () {
      resolve(window.BMap);
      return true;
    };
    const script = document.createElement("script");
    script.type = "text/javascript";
    script.src =
      `https://api.map.baidu.com/api?v=3.0&ak=${ak}&callback=onBMapCallback&s=1`;
    script.onerror = reject;
    document.head.appendChild(script);
    return true;
  });
}

② BmapGL(基于百度地图JavaScript GL版API封装的React组件库,有需要可引入)
定义一个bmpgl.js

 export default function BMPGL(ak) {
  return new Promise((resolve, reject) => {
    window.init = function () {
      // eslint-disable-next-line
      resolve(BMapGL)
    };
    const script = document.createElement("script");
    script.type = "text/javascript";
    script.src = `https://api.map.baidu.com/api?v=1.0&type=webgl&ak=${ak}&callback=init`;
    script.onerror = reject;
    document.head.appendChild(script);
  });
}
引入
import loadBMap from "../loadMap";
import BMPGL from "../bmpgl";

mounted() {
	const p = loadBMap(this.mapAK); // 加载引入BMap
    p.then(() => {
      this.initMap();
    });
}
methods: {
    initMap() {
      const that = this;
      this.map = new window.BMap.Map("map-container", {
        enableMapClick: false
      }); // 新建地图实例,enableMapClick:false :禁用地图默认点击弹框
      // 初始化位置
      const point = new window.BMap.Point(
        this.longitude,
        this.latitude
      );
      this.map.centerAndZoom(point, 15);
      this.mk = new window.BMap.Marker(point, { enableDragging: true }); // 创建一个图像标注实例,enableDragging:是否启用拖拽,默认为false
      this.map.addOverlay(this.mk); // 将覆盖物添加到地图中
      this.mk.addEventListener("dragend", (e) => {
        that.getAddrByPoint(e.point, true); // 拖拽结束后调用逆地址解析函数,e.point为拖拽后的地理坐标
      });
      const navigationControl = new window.BMap.NavigationControl({
        // 创建一个特定样式的地图平移缩放控件
        anchor: window.BMAP_ANCHOR_TOP_RIGHT, // 靠右上角位置
        type: window.BMAP_NAVIGATION_CONTROL_LARGE // LARGE控件类型
      });
      this.map.addControl(navigationControl); // 将控件添加到地图
      if (this.unloadLocation) {
        // 如果未加载位置信息,则定位到当前位置
        this.geolocation();
      }
    },
    /**
     * 逆地址解析函数(根据坐标点获取详细地址)
     * @param {Object} point   百度地图坐标点,必传
     */
    getAddrByPoint(point, movePoint = false) {
      // 设置手动定位的坐标
      if (this.unloadLocation || movePoint) {
        this.unloadLocation = false;
        // 逆地理地址解析
        this.getGeocoding(point); // 调用百度web服务api接口进行逆地理地址解析
        this.longitude = point.lng; // 记录当前选中地址经度
        this.latitude = point.lat; // 记录当前选中地址纬度
        this.mk.setPosition(point); // 重新设置标注的地理坐标
        this.map.panTo(point); // 将地图的中心点更改为给定的点
      }
    },
    geolocation() {
      BMPGL(this.mapAk).then((BMapGL) => {
        const geolocation = new BMapGL.Geolocation();
        geolocation.getCurrentPosition(function(r) {
          if (this.getStatus() === window.BMAP_STATUS_SUCCESS) {
            this.longitude = r.lng;
            this.latitude = r.lat;
          } else {
            alert(`failed${this.getStatus()}`);
          }
        });
      });
    },
  }
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

vue中引入百度地图 的相关文章

随机推荐

  • AI修复人像

    一 前言 最近闲来无事 翻了翻以前的老照片 看着多年前的老照片 感慨万千 仿佛又回到了以前的青春岁月 只可惜青春易逝 无法重来 意气风发 头角峥嵘的画面只能永远地留存在相片之中了 只叹当时没有多拍几张照片留作纪念 可惜当时设备也不好 照片效
  • 【Linux】低级IO

    需要云服务器等云产品来学习Linux的同学可以移步 gt 腾讯云 lt gt 阿里云 lt gt 华为云 lt 官网 轻量型云服务器低至112元 年 新用户首次下单享超低折扣 目录 一 文件的概念 二 C语言文件操作回顾 三 使用系统调用进
  • 山大网安靶场实验平台项目—个人记录(一)

    系列文章专栏地址 山东大学网络安全靶场实验平台 本期内容 完成项目框架设计 学习vue和element ui 了解基本语法 编写前端页面 组件 学习springboot为写后端作准备 项目框架设计 time 3 days 首先我们这个项目是
  • Vue3功能实战 —— 动态路由、路由签权、动态组件 使用示例

    前期回顾 Vue3 TS Vite 大屏可视化 项目实战 vue3可视化大屏 彩色之外的博客 CSDN博客大屏可视化项目实战 vue3可视化大屏https blog csdn net m0 57904695 article details
  • zabbix6.2.4企业微信群机器人告警

    zabbix6 2 4企业微信群机器人告警 基于https blog csdn net stars moon1024 article details 123042369调试 创建媒介 脚本如下 var Wechat token null t
  • linux 怎么样复制文件夹内所有文件到另一个文件夹?

    cp Rf home user1 root temp 将 home user1目录下的所有东西拷到 root temp 下而不拷贝user1目录本身 即格式为 cp Rf 原路径 目的路径
  • 集成底座双K8S集群扩展升级方案

    集成底座方案是应用于企业信息化建设的集成整合阶段 通过建立统一 标准 柔性 可复用 可扩展的IT架构 解决企业信息化建设过程中缺乏整体规划 集成整合难度大 安全管控不到位等问题 强化企业信息化的架构建设 集成整合 数据治理 安全管控的水平
  • 腾讯测开笔试题

    测开笔试题分享 一个数组里面有混序的正负数 按照以下要求重新排列 1 按照正负间隔的顺序排列 2 同一个符号的数相对顺序不变 3 若某一个符号的数较多 按原顺序放在最后 例如输入 1 2 3 7 9 5 3 4 7 8 11 3 2 期望输
  • .Net WinForm 中关于输入法打开却无法输入中文总结

    根据前面的兄弟们解决方法我做了下总结 希望对以后遇到此问题的同行提供点帮助 大家如果还有好的方法也请回复提供我 共同学习 出现这个问题时我的输入法设置为 注意我这里使用简体中文美式键盘 然后我删除了简体中文美式键盘 添加了英语 美国 美式键
  • Git命令语句

    一 关于Git 1 Git介绍 Git是一个开源的分布式版本控制系统 用于敏捷高效的处理任何或大或小的项目 Git是Linus Torvalds为了帮助管理Linux内核开发而开发的一个开放源码的版本控制软件 版本控制 版本控制是一种在开发
  • Android ActionBar的基本用法

    本文翻译了这篇文章 Using the Android action bar ActionBar Tutorial 1 ActionBar的简介 ActionBar位于Activity的顶部 可用来显示activity的标题 Icon Ac
  • 一周AI看点

    本期一周AI看点包括 技术前沿 行业 观点 应用以及投融资等方面 技术前沿 CCAI 2017 香港科技大学计算机系主任杨强 论深度学习的迁移模型在7月22 23日举办的CCAI 2017上 香港科技大学计算机与工程系主任 AAAI Fel
  • 案例:使用seaborn分析泰坦尼克号生还者数据

    目录 一 数据来源 数据的导入 二 主要分析的内容 定义问题 泰坦尼克号乘客基本信息分布情况 乘客的信息与生还数据是否有关联 三 数据清洗 3 1 查看是否有缺失值 3 2 查看数据基本信息 3 3 绘制年龄分布图 通过seaborn的di
  • 学习笔记-架构的演进之k8s的存储生态系统-3月day11

    文章目录 前言 块存储 文件存储 对象存储 总结 附 前言 随着 Kubernetes 的 CSI 规范成为容器业界统一的存储接入标准 现在几乎所有的云计算厂商都支持自家的容器通过 CSI 规范去接入外部存储 能够应用于 CSI 与 Fle
  • 获取JSON里面result的值 以及将里面的(List数组或对象)转换出来并读取到

    前言 记录一下今天的问题 首先我是在定时任务了 每次当项目启动时都需要调用别人的接口他来返回我数据 我并获取到他的数据进行同步更新 到我的数据库表里 那么怎么获取到呢 下面废话不多说 这是我打印出 返回给我的数据 为虚构数据 仅参考 suc
  • 2.深入了解bind函数

    bind函数 1 查看方法 2 详细解说 中文 bind函数 3 bind文档 1 查看方法 使用指令 man bind 2 详细解说 中文 bind函数 1 功能 bind函数把一个本地协议地址赋予一个套接字 对于网际网协议 协议地址是3
  • C# 集合总结

    1 Array ArrayList List lt 类型 gt 数组 连续分配的 查询速度快 但增删不方便 region 链表 2 LinkedList lt 类型 gt LinkedListNode lt 类型 gt 链表 非连续分配 每
  • 第33章_瑞萨MCU零基础入门系列教程之DHT11温湿度获取实验

    本教程基于韦东山百问网出的 DShanMCU RA6M5开发板 进行编写 需要的同学可以在这里获取 https item taobao com item htm id 728461040949 配套资料获取 https renesas do
  • LeetCode最长回文子串

    题目 给你一个字符串 s 找到 s 中最长的回文子串 思路 回文串是正着读与倒着读是一样的字符串 如 aaaccaaa abcba 可以发现其最大的特点就是对称 也就有一个对称中心 所以我们可以将字符串s的每个字符都设为对称中心 由中心向两
  • vue中引入百度地图

    vue中引入百度地图 一 通过vue注册的方式引入 注 vue百度地图官网 安装百度地图 npm install vue baidu map save 引入 使用百度地图首先需要去百度地图开放平台申请ak密钥 登录百度账号后 控制台 gt