vue百度地图实现下拉匹配地址并给选中项添加标注、定位

效果图

安装npm依赖

npm install vue-baidu-map

页面代码

新建页面test.vue

<template>
  <baidu-map class="bm-view" scroll-wheel-zoom :center="location" :zoom="zoom" ak="xx" @ready="mapReady">
    <bm-view class="map"></bm-view>
    <bm-control :offset="{width: '50px', height: '10px'}">
      <el-input v-model="inputValue" id="suggestId"></el-input>
    </bm-control>

    <bm-navigation anchor="BMAP_ANCHOR_BOTTOM_RIGHT"></bm-navigation>
  </baidu-map>
</template>

<script>

  import BaiduMap from 'vue-baidu-map/components/map/Map.vue'
  import BmView from 'vue-baidu-map/components/map/MapView.vue'
  import BmLocalSearch from 'vue-baidu-map/components/search/LocalSearch.vue'
  import BmNavigation from 'vue-baidu-map/components/controls/Navigation'
  import BmMarkerClusterer from 'vue-baidu-map/components/extra/MarkerClusterer'
  import BmMarker from 'vue-baidu-map/components/overlays/Marker'
  import BmInfoWindow from 'vue-baidu-map/components/overlays/InfoWindow'
  import BmAutoComplete from 'vue-baidu-map/components/others/AutoComplete'
  import BmControl from 'vue-baidu-map/components/controls/Control'

  export default {
    components: {
      BaiduMap, BmView, BmLocalSearch, BmNavigation, BmMarkerClusterer, BmMarker, BmInfoWindow, BmAutoComplete, BmControl
    },
    data() {
      return {
          geocoder: null,
          model: {},
          BMap: {},
          map: {},
          location: {
            lng: 113.93588,
            lat: 22.74894
          },
          zoom: 16,
          inputValue: "",
          keyword: ''
      }
    },
    methods: {
        mapReady ({BMap, map}) {
            this.BMap = BMap;
            this.map = map;
            this.geocoder = new BMap.Geocoder(); //创建地址解析器的实例
            this.map.centerAndZoom(new BMap.Point(113.93588, 22.74894), 14);

            const that = this
            //建立一个自动完成的对象
            var ac = new BMap.Autocomplete({
              "input" : "suggestId",
              "location" : this.map
            });

            // 鼠标点击下拉列表
            ac.addEventListener("onconfirm", function(e) {
              var v = e.item.value;
              var keyword = v.province +  v.city +  v.district +  v.street + v.business;

              //清除地图上所有覆盖物
              that.map.clearOverlays();

              //智能搜索
              var local = new BMap.LocalSearch(that.map, {
                onSearchComplete: function (){
                  var p = local.getResults().getPoi(0).point;    //获取第一个智能搜索的结果
                  that.map.centerAndZoom(p, 16);
                  that.map.addOverlay(new BMap.Marker(p));    //添加标注
                }
              });
              local.search(keyword);
            });

            // 点击百度地图上的搜索出来的红色标记点
            map.addEventListener("click", ({ point }) => {
              this.location.lng = point.lng;
              this.location.lat = point.lat;
              this.geocoder.getLocation(point, res => {
                this.inputValue = res.address;
                this.model.address = res.address;
                this.model.storeLongitude = point.lng
                this.model.storeLatitude = point.lat
                this.$forceUpdate();
              });
            });
        }
    }
  }
</script>

<style lang="scss">
  .map {
    width: 100%;
    height: 100%;
    flex: 1;
  }

  .address_wrap{
    width: 100%;
    height: 100%;
    ::v-deep{
      .bm-view {
        display: block;
        width: 100%;
        height: 100%;
        .BMap_noprint.anchorTL{
          width: 22%;
          top: 10px !important;
          left: 10px !important;
        }
      }
    }
  }

  .bm-view {
    display: block;
    width: 100%;
    height: 100%;
    .BMap_noprint.anchorTL{
      width: 22%;
      top: 10px !important;
      left: 10px !important;
    }
  }
</style>

其中baidu-map组件中的ak参数需要在百度地图开放平台新建应用获得。

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值