vue3.0引入百度地图并标记点的实现代码

首先新建一个js,主要用来引入百度地图的js,代码如下:

export function baiduMap() {
    return new Promise(function(resolve, reject) {
        window.baiduMap = function() {
            resolve()
        }

        var script2 = document.createElement('script')
        script2.type = 'text/javascript'
        script2.src = `http://api.map.baidu.com/library/SearchInfoWindow/1.5/src/SearchInfoWindow_min.js`

        var link = document.createElement('link')
        link.rel = 'stylesheet'
        link.href = `http://api.map.baidu.com/library/SearchInfoWindow/1.5/src/SearchInfoWindow_min.css`

        document.head.appendChild(link)
        document.head.appendChild(script2)

        var script = document.createElement('script')
        script.type = 'text/javascript'
        script.src = `http://api.map.baidu.com/api?v=3.0&ak=你的ak&callback=baiduMap`
        script.onerror = reject
        document.head.appendChild(script)
    })
}

获取生成密匙: ak密匙(百度地图)

其次,创建baidu-map.vue,代码如下:

<template>
  <el-dialog title="门店地图分布" v-model="open" width="70%"  draggable>
    <div id="map" :style="{height:mapHeight}">
      <div id="allmap" ref="allmap" ></div>
    </div>
  </el-dialog>

</template>
<script setup name="BaiduMap">
import {baiduMap} from '@/api/post/baiduMap'
import {getLineShopMap} from '@/api/post/line'
import {nextTick} from "vue";

const mapHeight = ref('70vh')
const open = ref(false)
const allmap = ref(null)

function map(id) {
  open.value = true
  getLineShopMap(id).then(res => {
    var markerArr = []
    var data = res.data
    for (var i = 0; i < data.length; i++) {
      var point = data[i].lng + "," + data[i].lat;
      var shop = '{ title: "' + data[i].shopname + '",areaname: "' + data[i].name + '", point: "' + point + '", receiver: "' + data[i].receiver + '", mobile: "' + data[i].mobile + '" }';
      var shopobj = eval('(' + shop + ')');
      markerArr.push(shopobj);
    }
    nextTick(res => {
      baiduMap().then(thatMap => {
        // 创建地图实例
        var map = new BMap.Map("map");
        var point = new BMap.Point(113.312213, 23.147267); //地图中心点,广州市
        map.centerAndZoom(point, 13); // 初始化地图,设置中心点坐标和地图级别。
        map.enableScrollWheelZoom(true); //启用滚轮放大缩小
        //地图、卫星、混合模式切换
        map.addControl(new BMap.MapTypeControl({mapTypes: [BMAP_NORMAL_MAP, BMAP_SATELLITE_MAP, BMAP_HYBRID_MAP]}));
        //向地图中添加缩放控件
        var ctrlNav = new window.BMap.NavigationControl({
          anchor: BMAP_ANCHOR_TOP_LEFT,
          type: BMAP_NAVIGATION_CONTROL_LARGE
        });
        map.addControl(ctrlNav);
        //向地图中添加缩略图控件
        var ctrlOve = new window.BMap.OverviewMapControl({
          anchor: BMAP_ANCHOR_BOTTOM_RIGHT,
          isOpen: 1
        });
        map.addControl(ctrlOve);
        //向地图中添加比例尺控件
        var ctrlSca = new window.BMap.ScaleControl({
          anchor: BMAP_ANCHOR_BOTTOM_LEFT
        });
        map.addControl(ctrlSca);

        var point = new Array(); //存放标注点经纬信息的数组
        var marker = new Array(); //存放标注点对象的数组
        var info = new Array(); //存放提示信息窗口对象的数组
        var searchInfoWindow = new Array();//存放检索信息窗口对象的数组

        for (var i = 0; i < markerArr.length; i++) {
          var p0 = markerArr[i].point.split(",")[0]; //
          var p1 = markerArr[i].point.split(",")[1]; //按照原数组的point格式将地图点坐标的经纬度分别提出来
          point[i] = new window.BMap.Point(p0, p1); //循环生成新的地图点
          marker[i] = new window.BMap.Marker(point[i]); //按照地图点坐标生成标记
          map.addOverlay(marker[i]);
          marker[i].setAnimation(BMAP_ANIMATION_BOUNCE); //跳动的动画
          //显示marker的title,marker多的话可以注释掉
          var label = new window.BMap.Label(markerArr[i].title, {offset: new window.BMap.Size(20, -10)});
          marker[i].setLabel(label);
          // 创建信息窗口对象  receiver: "'+data[i].receiver+'", mobile:
          info[i] = "<p style='font-size:14px;line-height:20px'>" + "</br>门店名称:" + markerArr[i].title + "</br>所在区域:" + markerArr[i].areaname + "</br>接收人:" + markerArr[i].receiver + "</br> 门店电话:" + markerArr[i].mobile + "</br></p>";
          //创建百度样式检索信息窗口对象
          searchInfoWindow[i] = new BMapLib.SearchInfoWindow(map, info[i], {
            title: markerArr[i].title,      //标题
            width: 290,             //宽度
            // height : 40,              //高度
            panel: "panel",         //检索结果面板
            enableAutoPan: true,     //自动平移
            searchTypes: [
              BMAPLIB_TAB_SEARCH,   //周边检索
              //    BMAPLIB_TAB_TO_HERE,  //到这里去
              //   BMAPLIB_TAB_FROM_HERE //从这里出发
            ]
          });

          //添加点击事件
          marker[i].addEventListener("click",
              (function (k) {
                // js 闭包
                return function () {
                  //将被点击marker置为中心
                  // map.centerAndZoom(point[k], 13);
                  // console.log(searchInfoWindow[k])
                  //在marker上打开检索信息窗口
                  searchInfoWindow[k].open(marker[k]);
                }
              })(i)
          );
        }
      });
    })
  })
}

defineExpose({
  map
})

</script>
<style>
#allmap {
  height: 100%;
  overflow: hidden;
}
</style>

最后,在你需要用到的界面引用

引用界面的script的代码

import BaiduMap from "./baidu-map";
const mapRef = ref(null);

/**
 * 查看地图
 * @param selection
 */
function openMap() {
  mapRef.value.map(form.value.id)
}

最终效果

参考:博客

以上就是vue3.0引入百度地图并标记点的详细内容,更多关于vue3.0百度地图标记点的资料请关注我们其它相关文章!

(0)

相关推荐

  • vue整合百度地图显示指定地点信息

    目录 一.安装相关依赖 二.在main.js中引用 三.创建地图工具 map.js 四.绘制地图 先看看效果图 一.安装相关依赖 npm i --save vue-baidu-map 二.在main.js中引用 import BaiduMap from "vue-baidu-map" Vue.use(BaiduMap,{   ak: '你的密钥(百度地图开放API官网可免费申请)' }) 三.创建地图工具 map.js export function MP(ak) {       re

  • 关于Vue 3.0引入百度地图不兼容的解决办法

    目录 关于Vue 3.0引入百度地图 不兼容的解决办法 1. 问题:Vue 3.0引入百度地图 不兼容 2. 解决办法 3.vue页面 引入并执行 4.完成, 地图如下 关于Vue 3.0引入百度地图 不兼容的解决办法 1. 问题:Vue 3.0引入百度地图 不兼容 百度地图开发平台文档 封装的vue版本暂时还没有 到 vue 3.0 如果 用npm 引入并使用的话,会出现报错 at eval (bindEvent.js?4fab:8) at Array.forEach (<anonymous>

  • Vue使用百度地图实现城市定位

    本文实例为大家分享了Vue使用百度地图实现城市定位的具体代码,供大家参考,具体内容如下 Vue项目运行环境:Vue 2.0,Vue Cli 3.0 步骤一:登录 百度地图开放平台 在 控制台---->应用管理---->我的应用 下面创建一个应用. 目的是获取 ak 步骤二:在public文件夹的index.html文件中 导入百度地图,拼上你的ak 步骤三:在项目的根目录中创建vue.config.js文件 如果有vue.config.js文件的话,直接添加以下代码即可. vue.config

  • vue全局接入百度地图的实现示例

    目录 前言 一.获取ak密钥 二.整合步骤 总结 前言 本文主要教大家如何把百度地图整合到我们的vue项目中 一.获取ak密钥 1.登录网址 https://lbsyun.baidu.com/ 注册百度地图开放平台账号,填写认证信息,并且创建应用 创建完应用后可以在类似界面获取到我们的AK密钥 注意:IP白名单要合理配置 我这里为了方便测试才设置的0.0.0.0/0 二.整合步骤 获取到ak密钥之后就可以与我们的VUE项目进行整合 1.npm下载包 代码如下(示例): npm install -

  • vue3.0引入百度地图并标记点的实现代码

    首先新建一个js,主要用来引入百度地图的js,代码如下: export function baiduMap() { return new Promise(function(resolve, reject) { window.baiduMap = function() { resolve() } var script2 = document.createElement('script') script2.type = 'text/javascript' script2.src = `http://

  • 详解vue.js下引入百度地图jsApi的两种方法

    前言 今天有个项目需要用到百度地图,一般我们在移动端使用百度地图,都是直接通过这样的方式,直接引入百度地图的jsApi. <script type="text/javascript" src="http://api.map.baidu.com/api?v=2.0&ak=D9b45bc6f98deafc489e9ac1bc7f7612"></script> 这种方法的原理,就是直接给全局widow对象添加一个BMap对象,从而可以使我们

  • Android 百度地图POI搜索功能实例代码

    在没介绍正文之前先给大家说下poi是什么意思. 由于工作的关系,经常在文件中会看到POI这三个字母的缩写,但是一直对POI的概念和含义没有很详细的去研究其背后代表的意思.今天下班之前,又看到了POI这三个字母,决定认认真真的搜索一些POI具体的含义. POI是英文的缩写,原来的单词是point of interest, 直译成中文就是兴趣点的意思.兴趣点这个词最早来自于导航地图厂商.地图厂商为了提供尽可能多的位置信息,花费了很大的精力去寻找诸如加油站,餐馆,酒店,景点等目的地,这些目的地其实都可

  • 带有定位当前位置的百度地图前端web api实例代码

    废话不多说,直接给大家贴代码了,具体代码如下所示, 关键代码如下: <!DOCTYPE html> <html lang="zh-cn"> <head> <meta name="viewport" content="initial-scale=1.0, user-scalable=no" /> <meta http-equiv="Content-Type" content=

  • Vue3.0之引入Element-plus ui样式的两种方法

    目录 第一种:CDN 第二种:通过 npm 安装,并希望配合 webpack 使用 安装:官网欢迎star:github npm install element-plus --save 第一种:CDN 目前可以通过 unpkg.com/element-plus 获取到最新版本的资源,在页面上引入 js 和 css 文件即可开始使用.<! – 引入样式 -->< link rel=“stylesheet” href=“https://unpkg.com/element-plus/lib/t

  • 百度地图api如何使用

    如果想用百度地图api,首先需要先获取一个百度地图api的密钥,然后引入百度地图的api,接下来,我们详细介绍下获取.引入api密钥的技巧,以及通过代码给大家详解下百度地图api如何使用,具体请看下文. 首先 ,如果想调用百度地图api,你需要获取一个百度地图api的密钥. 申请密钥很简单,在百度地图api的首页就有相关链接,填写相关信息百度就会给你一个密钥了. 接下来,就是引入百度地图的api 关键代码如下: 复制代码 代码如下: <script type="text/javascrip

  • JS开发中百度地图+城市联动实现实时触发查询地址功能

    缘由: 由于项目需要实现一个根据省市区+详细地址的路径进行查询地址的功能. 所用技术:百度地图API+jQuery 实现步骤: 1.省市区三级联动(ps:已经忘记这个小插件的出处的) 引入area.js /* * 全国三级城市联动 js版 */ function Dsy(){ this.Items = {}; } Dsy.prototype.add = function(id,iArray){ this.Items[id] = iArray; } Dsy.prototype.Exists = f

  • 如何将百度地图包装成Vue的组件的方法步骤

    (1)在index.html文件中引入百度地图 <script type="text/javascript" src="http://api.map.baidu.com/api?v=2.0&ak=piXQ5CgHFqEefqCVbhhBFfe6HjF7l4zW "></script> (2)在webpack.base.conf.js文件内添加external选项,在module.exports内部,和entry平级: external

  • JavaScript接入百度地图API的方法步骤

    目录 一.百度地图API接入 二.在HTML中使用百度地图API 1.在html中引入百度地图js文件 2.在网页中定义一个DIV用于显示地图 3.在网页中显示地图 4.添加可选控件 5.定位功能 6.添加地图标记 7.给地图标记添加点击事件 8.添加信息窗口 9.路径规划 10.正逆地址解析 一.百度地图API接入 1.搜索百度地图开发平台 2.注册百度账号 3.登陆并申请成为开发者 4.在百度地图开发平台的首页选择控制台,在控制台中创建应用 创建好应用以后就能在控制台我的应用中看到这个应用,

随机推荐