vue中如何使用高德地图

vue中使用高德地图api

  1. 引入高德js api
  2. webpack配置高德api
  3. 组件中使用高德api
引入高德js

首先注册高德api帐号,申请到key
然后在vue-cli创建的 html中引入
在这里插入图片描述

webpack配置高德api

vue-cli 3.0 之后webpack的配置使用了vue.config.js来配置
在vue.config.js中添加如下代码,

module.exports = {
  configureWebpack: {
    externals: { BMap: "BMap" }
  }
};
webpack配置高德api
<template>
  <div style="height: 100%">
    <div id="mapContainer" style="width: 100%;height: 100%"></div>
  </div>

</template>

<script>
  import AMap from 'AMap'
  import {getInitData} from "../../api/map"
  import {MessageError} from "../../utils/util"

  export default {
    name: "Map",
    data() {
      return {
        map: null,
        marker: '',
        snMarker: new Map()
      }
    },
    methods: {
      /**
       *  这个方法包含2个字方法
       *  1、加载地图
       *  2、加载数据
       */
      init() {
        this.initMap()
        this.initMarkerData()
      },
      initMap() {
        this.map = new AMap.Map('mapContainer', {
          zoom: 8,
          // dragEnable: false
        })
        // 工具栏
        AMap.plugin('AMap.ToolBar', () => {
          let toolbar = new AMap.ToolBar()
          this.map.addControl(toolbar)
        })
        //设置默认范围
        const bounds = new AMap.Bounds([70.530899, 23.234521], [138.537735, 55.384418])
        this.map.setBounds(bounds)
      },
    
      /* 这是普通的标记点*/
      async initMarkerData() {
        let marks = await getInitData() || []
        marks.result.map(mark => {
          let iconPath = mark.online ? '/static/success.png' : '/static/fail.png'
          let marker = new AMap.Marker({
            map: this.map,
            position: [mark.longitude, mark.latitude],
            icon: new AMap.Icon({
              size: new AMap.Size(55, 55),
              image: iconPath,
              imageOffset: new AMap.Pixel(0, 0)
            })
          })
          let info = []
          info.push(`<div style="padding-left: 4px">设备号:<b>${mark.deviceSn}</b></div>`)
          info.push(`<div>速度: <b>${mark.speed}</b></div>`)
          info.push(`<div>经度: <b>${mark.longitude}</b></div>`)
          info.push(`<div>纬度: <b>${mark.latitude}</b></div>`)
          info.push(`<div>方向: <b>${mark.direction}</b></div>`)
          marker.on('click', (e) => {
            let infoWindow = new AMap.InfoWindow({
              content: info.join('<br/>'),
            })
            infoWindow.open(this.map, e.target.getPosition())
          })
          this.snMarker.set(mark.deviceSn, marker)
        })

      },
      /* 这里是根据某个点查询的方法*/
      search() {
        let deviceSearch = new AMap.PlaceSearch({
          map: this.map
        })
        AMap.event.addListener(null, "select", (e) => {
          // deviceSearch.set
        })
      }
    },
    mounted() {
      this.init()
    },
    destroyed() {
      this.map.destroy()
    }
  }
</script>

<style scoped lang='less'>
  /*@import 'index';*/
</style>
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值