Vue引入百度地图API,添加点击地图拾取坐标并且标记和地址搜索功能

参考官方文档

html页面

<template>
  <el-form>
    <el-row :gutter="24">
      <el-col :span="12">
        <el-col :span="12">
          <el-form-item label="位置经度" prop="lng">
            <el-input
              v-model="model.lng"
              type="number"
              class="input_number"
              @mousewheel.native.prevent
            />
          </el-form-item>
        </el-col>
        <el-col :span="12">
          <el-form-item label="位置维度" prop="lat">
            <el-input
              v-model="model.lat"
              type="number"
              class="input_number"
              @mousewheel.native.prevent
            />
          </el-form-item>
        </el-col>
        <el-col :span="24">
          <baidu-map
            class="bm-view"
            ak="QFgFQorrB84maOZh0pPGC8kUiP0mGIhx"
            :center="center"
            :zoom="zoom"
            :scroll-wheel-zoom="true"
            @ready="createMap"
          >
            <!--            搜索-->
            <bm-local-search :keyword="model.address" :auto-viewport="true"
                             style="display: none"></bm-local-search>
            <!--            标记-->
              <bm-marker :position="{lng: model.lng, lat: model.lat}"/>
          </baidu-map>
          <el-input v-model="model.address" placeholder="搜索地点"
                    style="margin-left: 10px;width: 200px;position: absolute;top: 25%;opacity: 0.9"
                    prefix-icon="el-icon-search"></el-input>
        </el-col>
      </el-col>
    </el-row>
  </el-form>
</template>

方法

<script>
  import BaiduMap from 'vue-baidu-map/components/map/Map.vue'
  
  export default {
    components: {
      BaiduMap,
      BmLocalSearch
    },
    data () {
      return {
        center: {lng: 0, lat: 0},
        zoom: 10,
        model: {
          lng: '',
          lat: '',
          address: ''
        }
      }
    },
    methods: {
      createMap ({BMap, map}) {
        // 百度地图API功能
        this.center.lng = 117.2
        this.center.lat = 34.26
        this.zoom = this.zoom
        const viewthis = this
        map.addEventListener('click', function (e) {
          viewthis.model.lng = e.point.lng
          viewthis.model.lat = e.point.lat
        })

        // 区域图
        var datas = new Array('徐州市-#665599')
        var bdary = new BMap.Boundary()
        for (var i = 0; i < datas.length; i++) {
          getBoundary(datas[i], bdary)
        }

        // 设置区域图
        function getBoundary (data, bdary) {
          data = data.split('-')
          bdary.get(data[0], function (rs) {
            // 获取行政区域
            var count = rs.boundaries.length // 行政区域的点有多少个
            // var pointArray = []
            for (var i = 0; i < count; i++) {
              var ply = new BMap.Polygon(rs.boundaries[i], {
                strokeWeight: 2,
                strokeColor: '#ff0000',
                fillOpacity: 0.1,
                fillColor: data[1]
              }) // 建立多边形覆盖物
              map.addOverlay(ply) // 添加覆盖物
            }
          })
        }
      }
    }
  }
</script>

样式

<style scoped>
  .bm-view {
    width: 100%;
    height: 300px;
  }
</style>

效果图
点击拾取坐标
点击拾取坐标地址搜索
搜索地址

  • 17
    点赞
  • 24
    收藏
    觉得还不错? 一键收藏
  • 21
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值