vue项目引入百度地图BMapGL鼠标绘制和BMap辅助工具

这篇具有很好参考价值的文章主要介绍了vue项目引入百度地图BMapGL鼠标绘制和BMap辅助工具。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

目录

引言

1、引用百度地图

2、在项目中使用百度地图

2-1、页面结构部分

2-2、js逻辑部分

3-1、页面结构部分


Vue.js 是一个用于构建用户界面的渐进式 JavaScript 框架。它旨在平易近人、灵活且可扩展,重点是声明式渲染和基于组件的架构。Vue 的反应性和可组合性使其成为开发复杂单页应用程序的热门选择。

引言

记录一下vue项目使用百度地图所用的api和踩过的坑,减少以后引用少走弯路。旨在记录,第一次开贴,不足之处请多多指教。废话不多说,开撸!

1、引用百度地图

这里账号密钥不多说,上链接,自己注册。

首先要在你项目的index.html里面加上以下代码: 这个是BMap

<script type="text/javascript" src="//api.map.baidu.com/api?v=3.0&ak=您的密钥"></script>

这个是BMapGL

<script src="//api.map.baidu.com/api?type=webgl&v=1.0&ak=您的密钥"></script>

如果需要使用辅助工具BMapGLLib ,还得把以下两个也放入

<link href="//mapopen.cdn.bcebos.com/github/BMapGLLib/DrawingManager/src/DrawingManager.min.css" rel="external nofollow"  rel="stylesheet">
<script type="text/javascript" src="//mapopen.cdn.bcebos.com/github/BMapGLLib/DrawingManager/src/DrawingManager.min.js"></script>

2、在项目中使用百度地图

2-1、页面结构部分

(1)创建地图容器元素

<div class="map-body" :id="mapId"></div>

(2)设置容器样式大小

.map-body {
  position: relative;
  height: 500px;
  border: 1px solid #dcdfe6;
}

2-2、js逻辑部分

(1)创建地图实例

createMap(lgt, lat) {
      // this.maploading=true;
      this.map = new BMapGL.Map(this.mapId, { enableMapClick: false }) // 创建Map实例,GL版命名空间为BMapGL(鼠标右键控制倾斜角度)
      this.map.centerAndZoom(new BMapGL.Point(lgt, lat), 11)      // 初始化地图,设置中心点坐标和地图级别
      this.map.enableScrollWheelZoom(true)// 开启鼠标滚轮缩放
    },

(2)把地图赋值给全局变量,方便后续使用

data() {
    return {
    map: "",
    mapId: "", //我这里采用了动态id这个不是必须的,看自己需求来
    }
created() {
        this.mapId = 'map' + new Date().getTime();
     }

(3)设置中心点坐标 这里我们使用BMapGL命名空间下的Point类来创建一个坐标点。Point类描述了一个地理坐标点,其中116.404表示经度,39.915表示纬度。(为天安门坐标)

const point = new BMapGL.Point(116.404, 39.915);

注意: 在使用百度地图JavaScript API服务时,需使用百度BD09坐标,如使用其他坐标( WGS84、GCJ02)进行展示,需先将其他坐标转换为BD09,详细说明请参考坐标转换说明,请勿使用非官方的转换方法。

(4)地图初始化

created() {
        this.mapId = 'map' + new Date().getTime();
        const point = new BMapGL.Point(116.404, 39.915);
        //创建地图
        this.$nextTick(() => {
          this.createMap(point.lng, point.lat);
        })
      },

到现在为止,百度地图就在你页面上创建成功了。 附图片:3、在项目中使用百度地图辅助工具BMapGLLib

bmapgl,vue.js,前端,javascript

 

现在的需求就是需要在页面上标注点,画矩形,圆形的一些标注线。百度地图的辅助工具就刚好自带了这两个功能。

3-1、页面结构部分

(1)辅助工具栏html结构和css样式

 

<ul class="drawing-panel">
     <li class="bmap-btn bmap-marker" @click="draw('marker')"
       :style="{ 'background-position-y': actNav === 'marker' ? '-52px' : '0px' }"></li>
     <li class="bmap-btn bmap-polyline" @click="draw('polyline')"
       :style="{ 'background-position-y': actNav === 'polyline' ? '-52px' : '0px' }"></li>
     <li class="bmap-btn bmap-rectangle" @click="draw('rectangle')"
       :style="{ 'background-position-y': actNav === 'rectangle' ? '-52px' : '0px' }"></li>
     <li class="bmap-btn bmap-polygon" @click="draw('polygon')"
       :style="{ 'background-position-y': actNav === 'polygon' ? '-52px' : '0px' }"></li>
     <li class="bmap-btn bmap-circle" @click="draw('circle')"
       :style="{ 'background-position-y': actNav === 'circle' ? '-52px' : '0px' }"></li>
   </ul>
.drawing-panel {
  z-index: 999;
  position: absolute;
  top: 14rem;
  margin-left: 2.5rem;
  padding-left: 0;
  border-radius: .25rem;
  height: 47px;
  box-shadow: 0 2px 6px 0 rgba(27, 142, 236, 0.5);
}
.bmap-btn {
  border-right: 1px solid #d2d2d2;
  float: left;
  width: 64px;
  height: 100%;
  background-image: url(//api.map.baidu.com/library/DrawingManager/1.4/src/bg_drawing_tool.png);
  cursor: pointer;
}
.drawing-panel .bmap-marker {
  background-position: -65px 0;
}
.drawing-panel .bmap-polyline {
  background-position: -195px 0;
}
.drawing-panel .bmap-rectangle {
  background-position: -325px 0;
}
.drawing-panel .bmap-polygon {
  background-position: -260px 0;
}
.drawing-panel .bmap-circle {
  background-position: -130px 0;
}

结构搭完效果如下:

bmapgl,vue.js,前端,javascript

 

3-2、js逻辑部分

上面地图初始完后就能使用鼠标绘制工具进行需求的绘制

(1)实例化鼠标绘制工具

 

draw(drawingType) {
      console.log(drawingType, '666')
      this.actNav = drawingType
      /**这里看需求可以把它设置为全局变量。
      *我这里需求需要,故设置了全局变量,以下代码就注释掉了*/
      // const styleOptions = {
      //   strokeColor: '#5E87DB',   // 边线颜色
      //   fillColor: '#5E87DB',     // 填充颜色。当参数为空时,圆形没有填充颜色
      //   strokeWeight: 2,          // 边线宽度,以像素为单位
      //   strokeOpacity: 1,         // 边线透明度,取值范围0-1
      //   fillOpacity: 0.2          // 填充透明度,取值范围0-1
      // };
      // const labelOptions = {
      //   borderRadius: '2px',
      //   background: '#FFFBCC',
      //   border: '1px solid #E1E1E1',
      //   color: '#703A04',
      //   fontSize: '12px',
      //   letterSpacing: '0',
      //   padding: '5px'
      // };
      // 实例化鼠标绘制工具
      const drawingManager = new BMapGLLib.DrawingManager(this.map, {
        //isOpen: true,        // 是否开启绘制模式
        enableCalculate: false, // 绘制是否进行测距测面
        enableSorption: true, // 是否开启边界吸附功能
        sorptiondistance: 20, // 边界吸附距离
        circleOptions: this.styleOptions, // 圆的样式
        polylineOptions: this.styleOptions, // 线的样式
        polygonOptions: this.styleOptions, // 多边形的样式
        rectangleOptions: this.styleOptions, // 矩形的样式
        labelOptions: this.labelOptions,  // label样式
      })
      // 进行绘制
      if (drawingManager._isOpen && drawingManager.getDrawingMode() === drawingType) {
        drawingManager.close();
      } else {
        drawingManager.setDrawingMode(drawingType);
        drawingManager.open();
      }
      /** 我这里需求是圆形和矩形还有点的标注,
      *还有两种就没有写它的监听事件,也是差不多的,
      *可以对照一下官方api和我写的就基本上差不多了,
      *如果有谁需要,我有时间也可以继续把剩下两种监听事件补上 */
      // 监听事件
      if (drawingType == 'rectangle') {
        // 监听矩形绘制完成事件
        drawingManager.addEventListener("overlaycomplete", (e) => {
          // 获取矩形对象
          const rectangle = e.overlay;
          // 获取矩形的四个顶点
          const points = rectangle.getPath();
          console.log(points, "顶点");
          this.scope_point = points;
        });
      } else if (drawingType == 'circle') {
        // 监听圆形绘制完成事件
        drawingManager.addEventListener("overlaycomplete", (e) => {
          // 获取圆形对象
          const circle = e.overlay;
          // 获取圆形的圆心
          const center = circle.getCenter();
          console.log(center, "圆心");
          // 获取圆形的半径
          const radius = circle.getRadius();
          console.log(radius, "半径");
          this.scope_point = center;
          this.scope_radius = radius;
        });
      } else if (drawingType == 'marker') {
        drawingManager.addEventListener("overlaycomplete", (e) => {
          // 获取标注对象
          const marker = e.overlay;
          // 获取标注的经纬度坐标
          this.point = marker.getPosition();
          // 创建地理编码服务实例
          const geocoder = new BMapGL.Geocoder();
          // 将经纬度坐标解析为地址信息
          geocoder.getLocation(this.point, (result) => {
            this.newForm.address = result.address;
            console.log(this.point, result.address, "地址");
          });
        });
      }
    },

效果如图所示(我只需要这三种,其他注释掉了):

 

bmapgl,vue.js,前端,javascript

4、在项目中使用BMap实例

注意: 大坑来啦!!! BMapGL 类创建的地图实例不支持 addOverlay 方法,并且还不支持直接使用鼠标绘制工具(BMapLib.DrawingManager 类)在地图上绘制矩形框,故只能换成BMap)写完才知道,只能硬着头皮往下写,因为我需要展示出刚刚画的那些标注。。。

(1)重新初始化一个地图实例(BMap)

 

this.map = new BMap.Map(this.mapId, { enableMapClick: false });
 this.map.centerAndZoom(new BMap.Point(point_location[1], point_location[0]), 11)      // 初始化地图,设置中心点坐标和地图级别我这里的point_location是后台返回的坐标,跟上面的类似
 this.map.enableScrollWheelZoom(true)// 开启鼠标滚轮缩放

(2)创建标记点

// 创建标记点的坐标
const point = new BMap.Point(point_location[1], point_location[0]);//point_location后台返回字段
console.log(point, "坐标")
// 创建标记点对象
const marker = new BMap.Marker(point);
// 将标记点添加到地图上
this.map.addOverlay(marker);

(3)创建矩形框对象

// 创建矩形框对象
 const rectangle = new BMap.Polygon([
   new BMap.Point(this.rectangle[3], this.rectangle[2]), //rectangle后台返回的坐标
   new BMap.Point(this.rectangle[5], this.rectangle[4]),
   new BMap.Point(this.rectangle[7], this.rectangle[6]),
   new BMap.Point(this.rectangle[9], this.rectangle[8]),
 ], this.styleOptions); //styleOptions之前的全局变量
 // 将矩形框添加到地图上
 this.map.addOverlay(rectangle);
 // 设置地图视野,使得矩形框完全显示在地图视野内
 this.map.setViewport(rectangle.getPath());

4)创建圆形对象文章来源地址https://www.toymoban.com/news/detail-794304.html

// 创建圆心坐标
 const center = new BMap.Point(this.rectangle[1], this.rectangle[0]);//rectangle后台返回的圆形坐标
 // 创建圆形标注对象
 const circle = new BMap.Circle(center, this.scope_radius, this.styleOptions);
 // 将圆形标注添加到地图上
 this.map.addOverlay(circle);

到了这里,关于vue项目引入百度地图BMapGL鼠标绘制和BMap辅助工具的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • layui引入百度地图

      获取AK是需要注册一个百度地图开放平台账号,链接地址: 百度地图开放平台 | 百度地图API SDK | 地图开发 (baidu.com)

    2024年02月10日
    浏览(31)
  • 小程序引入高德/百度地图坐标系详解

    官网最近更新时间:最后更新时间: 2021年08月17日 高德官网之在原生小程序中使用的常见问题 链接 目前在小程序中使用 高德地图只支持以下功能 :地址描述、POI 和实时天气数据 小结:从高德api中获取数据然后更新到腾讯地图的map上 其实还是使用的腾讯地图 只不过数据的来

    2024年02月09日
    浏览(37)
  • 【QT--使用百度地图API显示地图并绘制路线】

    先吐槽一下下,本身qt学的就不咋滴,谁想到第一件事就是让写一个上位机工具,根据CAN总线传来的位置信息,在地图上去绘制路线,并获取当前路段的限速信息等。当听到这个需求的时候,第一时间是有点懵逼的。自己原本是没接触过这方面的知识,而且qt学的也特别的垃圾

    2024年01月24日
    浏览(28)
  • 百度地图3D棱柱鼠标事件

    百度地图2D API   JavaScript API | 百度地图API SDK 百度地图3D API   jspopularGL | 百度地图API SDK 3D棱柱效果如下 一. 渲染地图 这块加了一个地图样式  是从百度地图 API 上扣的 二. 获取行政边界点位  并添加鼠标点击事件 首先 调用了百度地图获取市级行政边界的方法  Boundary() 去获

    2024年02月09日
    浏览(29)
  • QGraphicsView 如何实现百度地图按照鼠标点进行放大缩小效果

    前段时间用了QGraphicsView做了一些工作,然而如何实现QGraphicsView的放大缩小的效果也很简单,照鼠标某一点进行缩放,仅靠以下代码对view进行缩放会导致view上的item在放大缩小的过程中跑偏了。 我们看一下仅靠以上代码实现的放大缩小的效果。 从下图中我们看到把图中小矩形

    2024年02月05日
    浏览(43)
  • 从零开始学习调用百度地图网页API:二、初始化地图,鼠标交互创建信息窗口

    注 :需要将 你的ak 替换,从百度地图官网注册申请。 脚本中使用BMap创建Map实例,centerAndZoom()初始化地图设置中心点为北京,地图等级15。enableScrollWheelZoom()鼠标滚轮可缩放窗口。addEventListener监听鼠标点击事件,发生后,传递事件e至function(e),执行openInfoWindow,在鼠标点击坐

    2024年02月07日
    浏览(37)
  • 从零开始学习调用百度地图网页API:三、鼠标点击绘图功能

    注:需要将 你的ak 替换,ak从百度地图官网注册申请,选择浏览器类型api。 绘制线段 显示对象的位置信息 显示任意点坐标 最初的实现方法,在 显示坐标 按钮多次被点击后,会导致再点击 不显示 按钮,无法remove事件。依然会在地图上点击后出现坐标信息。 这是因为addEve

    2024年02月07日
    浏览(27)
  • 从零开始Vue项目中使用MapboxGL开发三维地图教程(四)改变鼠标style、地图置于单击feature中心、量测距离和polgon面积和中心点坐标

    总章节 从零开始Vue项目中使用MapboxGL开发三维地图教程 (一) MapboxGL介绍以及前期vue项目的搭建 (二) Mapbox地图样式 (三) 添加全屏,缩放旋转和比例控制面板以及自定义图标、标记点击弹窗、地图平移等功能 (四) 改变鼠标style、地图置于单击feature中心、量测距离和polgon面积和中

    2024年02月09日
    浏览(33)
  • [JavaScript游戏开发] 绘制冰宫宝藏地图、人物鼠标点击移动、障碍检测

    第一章 2D二维地图绘制、人物移动、障碍检测 第二章 跟随人物二维动态地图绘制、自动寻径、小地图显示(人物红点显示) 第三章 绘制冰宫宝藏地图、人物鼠标点击移动、障碍检测 第四章 绘制Q版地图、键盘上下左右地图场景切换 本章内容融合了第一章、第二章的部分内容,

    2024年02月15日
    浏览(35)
  • 解决百度地图的父元素出现滚轮之后启用鼠标缩放模式之后出现偏移的现象

    最近在做项目的时候,有个功能是点击详情按钮的时候在一个弹框里展现出来列表的详情 因为详情弹框里面的数据有其他的表格数据,然后在弹框的下边使用百度地图展示后端发送过来的坐标点,然后把坐标点转换之后使用百度地图的方法制作覆盖物上去。这里边就出现了一

    2024年03月18日
    浏览(32)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包