分享一下我的基于vue的百度地图围栏管理源码实现

之前,公司需要我来开发项目中的围栏管理功能。业务需求也不是太难,就是实现在百度地图上使用百度地图工具来绘制一块区域,给该区域添加项目相关的区域信息,然后保存到数据库,另外实现对保存到数据库的围栏的增删改查功能。
因为公司的项目是一个基于vue的前后端分离的项目。所以开发这一功能时,我一开始想到尝试网上有没有关于百度地图的插件可以使用的。我找到了
vue-baidu-map 这一插件。由于没有太多时间来了解这一插件,便pass了。但是开发者们可以去了解一下。
使用百度地图插件的案例 : https://www.cnblogs.com/WorkingBoy/p/15424905.html 可以点击看看这位博主的案例。

为了学习百度地图引入vue项目,我选择了最原始的方法,通过手动js引入。
下面是js代码 : 可以命名为 bmpjl.js

const ak = '你的密钥' // 百度的地图密钥
/**
 * 异步加载百度地图
 * @returns {Promise}
 * @constructor
 */
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 = reject
      document.body.appendChild(script)
    }
  })
}
export {
    loadBaiDuMap }
/**
 * 异步加载百度地图,以及绘制工具
 * @returns {Promise}
 * @constructor
 */
function loadBaiDuDrawMap() {
   
  return loadBaiDuMap().then(BMapGL => {
   
    let loaded = false
    try {
   
      loaded = (BMapGLLib && BMapGLLib.DrawingManager)
    } catch (err) {
   
      loaded = false
    }
    if (!loaded) {
   
      console.log('BMapLib.DrawingManager loading!')
      let script = document.createElement('script')
      script.type = 'text/javascript'
      script.src = 'http://mapopen.cdn.bcebos.com/github/BMapGLLib/DrawingManager/src/DrawingManager.min.js'
      document.body.appendChild(script)
      let link = document.createElement('link')
      link.rel = 'stylesheet'
      link.href = 'http://mapopen.cdn.bcebos.com/github/BMapGLLib/DrawingManager/src/DrawingManager.min.css'
      document.body.appendChild(link)
    } else {
   
      console.log('BMapLib.DrawingManager is loaded!')
    }
    return BMapGL
  })
}
export {
    loadBaiDuDrawMap }

引入百度地图前,你需要去网上搜索百度地图官方文档 ,即 百度地图开发者平台 链接地址是 https://www.baidu.com/link?url=hY2nl1O5PMifStkUFQsDmEbycTTly1JfAarPlyzFc7ICq-Mn4oWR8JWsQp0Wy3dL&wd=&eqid=f47ede5a0003ee7600000006629185d0

进入官网后,选择控制台菜单 -> 应用管理 -> 我的应用 .

点击创建应用 输入应用名称 选择安排ap[服务等,提交即可获得一个自己的密钥。
开发者们也可以通过官方开发文档一步步学习,来创建自己的地图。文档里面除了 js方向,还有小程序,android方向等开发文档。

下面是在页面中引入之前的js文件,展示地图以及围栏管理功能的源码:这里我命名为weilan.vue

<template>
  <div class="home" style="width: 100%; height: 100%">
    <!-- BMapGLLib 控件,这里自己去优化一下吧,写成循环吧 ,,懒得写了 -->
    <!-- <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> -->
    <div class="search">
      <a-input
        v-model="queryParams.unitname"
        maxlength="250"
        :allowClear="true"
        style="width: 60%"
        placeholder="请输入单位名称"
      ></a-input>
      <a-button
        style="width: 30px; margin-left: 20px"
        type="primary"
        shape="circle"
        icon="search"
        @click="search()"
      />
    </div>
    <ul class="drawing-panel">
      <li :key="item.id" v-for="item in mapToolbar">
        <a href="javascript:;">
          <my-icon
            :type="item.icon"
            class="tool-icon"
            @click="item.action === 'polygon' ? draw(item.action) : ''"
          ></my-icon>
        </a>
      </li>
      <!-- <li>
        <a href="javascript:;"><my-icon type="icon-sousuo" class="tool-icon" @click="search"></my-icon></a>
      </li> -->
    </ul>

    <!-- 地图容器 -->
    <div id="container" class="mymap" @ready="handler"></div>

    <div id="r-result" class="minput">
      <label for="">请输入:</label>
      <a-input
        id="suggestCity"
        v-model="address"
        maxlength="250"
        :allowClear="true"
        style="width: 60%; margin-left: 20px"
        placeholder="请输入你想搜索的地点"
      />
    </div>
    <div
      id="searchResultPanel"
      style="
        border: 1px solid #c0c0c0;
        width: 150px;
        height: auto;
        display: none;
      "
    ></div>

    <!-- 新增覆盖物 -->
    <add-overlay
      ref="addoverlay"
      @addoverlay="addLocalOverlay"
      @canceloverlay="cancelOverlay"
    ></add-overlay>
  </div>
</template>

<script>
import {
    i, log } from "mathjs";
// 引入异步引入地图的方法
import {
    loadBaiDuDrawMap } from "./bmpgl";
import AddOverlay from "./Modals/AddOverlay.vue";
//围栏管理后台接口
import {
    sysAreaApi as Sapi } from "@/api";
//地图工具栏
const mapToolbar = [
  {
   
    id: 0,
    title: "正方形",
    icon: "icon-checkbox",
    action: "rectangle",
  },
  {
   
    id: 1,
    title: "多边形",
    icon: "icon-duobianxing",
    action: "polygon",
  },
  {
   
    id: 2,
    title: "圆圈",
    icon: "icon-big-circle",
    action: "circle",
  },
];
export default {
   
  name: "mapCom",
  components: {
   
    AddOverlay,
  },
  data() {
   
    return {
   
      map: null,
      actNav: "",
      myValue: "",
      mapToolbar,
      //绘制对象
      _drawingManager: null,
      //页面存储覆盖物的数组
      overlays: [],
      //查询地点
      
  • 5
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
<!DOCTYPE html> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <meta name="viewport" content="initial-scale=1.0, user-scalable=no" /> <style type="text/css"> body, html,#allmap {width: 100%;height: 100%;overflow: hidden;margin:0;font-family:"微软雅黑";} </style> <script src="https://mapopen.bj.bcebos.com/github/BMapGLLib/TrackAnimation/src/TrackAnimation.min.js"></script> <script type="text/javascript" src="https://api.map.baidu.com/api?type=webgl&v=1.0&ak=074dY2RoMMH4SyyTDbynsGczVA4j10fh"></script> <title>视角动画</title> </head> <body> <div id="allmap"></div> </body> </html> <script type="text/javascript"> // GL版命名空间为BMapGL // 按住鼠标右键,修改倾斜角和角度 var bmap = new BMapGL.Map("allmap"); // 创建Map实例 bmap.centerAndZoom(new BMapGL.Point(108.905101,34.374882), 19); // 初始化地图,设置中心点坐标和地图级别 bmap.enableScrollWheelZoom(true); // 开启鼠标滚轮缩放 var path = [{ 'lng': 108.536126, 'lat': 34.222125 }, { 'lng': 108.536455, 'lat': 34.222400 }, { 'lng': 108.536935, 'lat': 34.222533 }, { 'lng': 108.537364, 'lat': 34.222679 }, { 'lng': 108.537556, 'lat': 34.222759 }, { 'lng': 108.537633, 'lat': 34.222802 }, { 'lng': 108.537929, 'lat': 34.222794 }]; var point = []; for (var i = 0; i < path.length; i++) { point.push(new BMapGL.Point(path[i].lng, path[i].lat)); } var pl = new BMapGL.Polyline(point); setTimeout('start()', 3000); function start () { trackAni = new BMapGLLib.TrackAnimation(bmap, pl, { overallView: true, tilt: 30, duration: 20000, delay: 300 }); trackAni.start(); } </script>
05-18

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值