百度地图的DrawingManager使用

本文详细介绍了如何使用BMapLib.DrawingManager类在百度地图上实现圆形、矩形等围栏的绘制功能,包括样式设置、绘制模式的定义及遇到的问题与解决方案。

背景

当需要绘制圆形、矩形等围栏需求的时候,就需要鼠标绘制管理类。下面谈谈BMapLib.DrawingManager的使用以及遇到的问题。

类BMapLib.DrawingManager使用

参考地址
可以动态加载DrawingManager_min.js,以下是把该js下载到项目中修改使用。

应用

定义一个绘制模式文件

export const BMAP_DRAWING_MARKER = 'marker'
export const BMAP_DRAWING_POLYLINE = 'polyline'
export const BMAP_DRAWING_CIRCLE = 'circle'
export const BMAP_DRAWING_RECTANGLE = 'rectangle'
export const BMAP_DRAWING_POLYGON = 'polygon'

公用API文件


  drawingManager(map) {
    // 绘制框的样式设置
    // http://api.map.baidu.com/library/DrawingManager/1.4/docs/symbols/BMapLib.DrawingManager.html
    let styleOptions = {
      strokeColor: #f00, // 边线颜色。
      fillColor: '#1989fa', // 填充颜色。当参数为空时,圆形将没有填充效果。
      strokeWeight: 2, // 边线的宽度,以像素为单位。
      // strokeOpacity: 0.8,     //边线透明度,取值范围0 - 1。
      fillOpacity: 0.2, // 填充的透明度,取值范围0 - 1。
      strokeStyle: 'solid' // 边线的样式,solid或dashed。
    }
    /* global BMapLib */
    return new BMapLib.DrawingManager(map, {
      isOpen: false, // 是否开启绘制模式
      enableDrawingTool: false, // 是否显示工具栏
      // drawingType: BMAP_DRAWING_CIRCLE,
      enableCalculate: false, // 绘制是否进行测距
      drawingToolOptions: {
        anchor: BMAP_ANCHOR_TOP_RIGHT, // 位置
        offset: new BMap.Size(5, 5), // 偏离值
        scale: 0.8, // 工具栏缩放比例
        drawingTypes: [
          BMAP_DRAWING_MARKER, // 画点
          BMAP_DRAWING_CIRCLE, // 画圆
          BMAP_DRAWING_POLYLINE, // 画线
          BMAP_DRAWING_POLYGON, // 画多边形
          BMAP_DRAWING_RECTANGLE // 画矩形
        ]
      },
      rectangleOptions: styleOptions, // 矩形的样式
      circleOptions: styleOptions, // 圆形的样式
      polygonOptions: styleOptions // 多边形的样式
    })
  },

遇到的坑

刚开始是动态加载DrawingManager_min.js,项目是https访问,由于该js内部引用了外部http协议的脚本,导致部分功能无法使用。所以将该js下载到本地修改源码再用。引用时需注意下面几个变量须在引用的地方声明,全局已没有这些变量。
在这里插入图片描述
如下可见该js内部引用了外部http协议的脚本
在这里插入图片描述
因为https地址中,如果加载了http资源,浏览器将认为这是不安全的资源,将会默认阻止。也可在文档中添加了<meta http-equiv="Content-Security-Policy" content="upgrade-insecure-requests">完美解决。

<think>好的,用户想在Vue中使用百度地图DrawingManager进行绘制,需要示例教程或解决方案。首先,我需要回忆一下百度地图在Vue中的基本集成方法,然后考虑如何引入DrawingManager库。用户之前提供的引用中提到过在Vue中引入百度地图的方式,比如通过BMap.Map实例化,并且引用[2]里有具体的代码示例,这可能可以作为基础。 接下来,DrawingManager百度地图的一个库,需要单独引入。根据引用[1],文档地址是存在的,可能需要检查是否正确加载了该库。用户可能遇到的问题是未正确加载库文件,导致DrawingManager不可用。此外,引用[4]提到卫星地图下鼠标绘制的问题,可能需要处理相关样式或事件冲突。 步骤应该是先配置百度地图的API密钥,然后在Vue组件中正确引入BMap和DrawingManager库。需要确保在全局引入BMap之后,再加载DrawingManager,否则可能会找不到依赖。这可能需要在index.html中通过script标签引入,或者使用异步加载的方法。 然后,在Vue的mounted生命周期钩子中初始化地图和DrawingManager实例。设置绘制工具的参数,比如是否开启各种图形绘制,以及监听绘制完成的事件,获取覆盖物并处理。例如,用户可能需要保存绘制的图形数据或将其显示在地图上。 另外,需要注意坐标系的转换,引用[2]提到了坐标转换,可能涉及将绘制的点坐标转换为其他格式。同时,覆盖物的编辑功能,如引用[3]中的示例,可能需要设置线、面的可编辑属性,或者在绘制完成后添加交互功能。 用户可能遇到的常见问题包括地图未正确显示、DrawingManager未加载、事件监听不生效等。需要检查网络请求是否成功加载了所需的JS文件,以及是否正确处理了异步加载的顺序。此外,卫星地图下的显示问题可能需要通过DOM操作调整样式,如引用[4]中的jQuery代码,但在Vue中可能需要使用refs来操作DOM元素。 最后,生成相关问题时要围绕DrawingManager使用、优化、事件处理和常见问题解决,帮助用户进一步深入学习和解决问题。</think>在Vue中集成百度地图DrawingManager的完整解决方案如下: ### 一、基础集成步骤 1. **安装依赖** ```bash npm install vue-baidu-map --save ``` 2. **全局配置**(main.js) ```javascript import Vue from 'vue' import BaiduMap from 'vue-baidu-map' Vue.use(BaiduMap, { ak: '您的百度地图密钥', // 必须显式声明需要使用的扩展库 libraries: ['DrawingManager'] }) ``` 3. **组件实现** ```vue <template> <baidu-map class="bm-view" :scroll-wheel-zoom="true"> <bm-drawing-manager ref="drawingManager" :circleOptions="circleOptions" :polylineOptions="polylineOptions" @overlaycomplete="handleOverlayComplete" /> </baidu-map> </template> <script> export default { data() { return { circleOptions: { strokeColor: "#ff0000", fillColor: "#ff0000", strokeOpacity: 0.8 }, polylineOptions: { strokeColor: "#00ff00", strokeWeight: 2 } } }, methods: { handleOverlayComplete(e) { const overlay = e.overlay console.log('绘制完成:', overlay) // 获取坐标示例:overlay.getPath() 获取路径坐标 }, activateDrawing(type) { // 手动激活绘制模式 this.$refs.drawingManager.drawingManager.open({ shape: type // 'polygon'|'polyline'|'rectangle'|'circle'|'marker' }) } } } </script> ``` ### 二、关键功能实现 1. **坐标转换**(使用百度API): ```javascript const convertor = new BMap.Convertor() convertor.translate([new BMap.Point(116.404, 39.915)], 1, 5, data => { if(data.status === 0) { console.log('转换后坐标:', data.points) } }) ``` 2. **覆盖物编辑**(引用[3]特性): ```javascript overlay.enableEditing() // 启用编辑 overlay.disableEditing() // 禁用编辑 ``` ### 三、常见问题解决 1. **卫星地图绘制异常**(引用[4]方案): ```css /* 强制显示绘制控件 */ .BMapLib_Drawing { display: block !important; } ``` 2. **异步加载问题**: ```javascript // 确保地图容器已渲染 this.$nextTick(() => { this.map = new BMap.Map('mapContainer') this.drawingManager = new BMapLib.DrawingManager(map, {...}) }) ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值