vue使用百度地图实现地点查询

效果
在这里插入图片描述
在这里插入图片描述
代码
首先在index.html中引入script:

<head>
  <meta charset="utf-8">
  <meta http-equiv="X-UA-Compatible" content="IE=edge">
  <meta name="viewport" content="width=device-width,initial-scale=1.0">
  <link rel="icon" href="<%= BASE_URL %>favicon.ico">
  <title>地图</title>
  <script type="text/javascript" src="//api.map.baidu.com/api?type=webgl&v=1.0&ak=地图密钥"></script>
</head>

页面中:

<template>
  <div class="hello">
    <div id="l-map"></div>
    <div id="r-result">
      请输入:<input
        type="text"
        id="suggestId"
        size="20"
        value="百度"
        style="width: 150px"
      />
    </div>
    <div
      id="searchResultPanel"
      style="
        border: 1px solid #c0c0c0;
        width: 150px;
        height: auto;
        display: none;
      "
    ></div>
  </div>
</template>
  
  <script>
export default {
  name: "baiduMap",
  data() {
    return {
      autocomplete: null,
    };
  },
  methods: {
    initMap() {
      let map = new BMapGL.Map("l-map");
      map.centerAndZoom("北京", 12); // 初始化地图,设置城市和地图级别。

      this.autocomplete = new BMapGL.Autocomplete({
        //建立一个自动完成的对象
        input: "suggestId",
        location: map,
      });
      this.autocomplete.addEventListener("onhighlight", function (e) {
        //鼠标放在下拉列表上的事件
        var str = "";
        var _value = e.fromitem.value;
        var value = "";
        if (e.fromitem.index > -1) {
          value =
            _value.province +
            _value.city +
            _value.district +
            _value.street +
            _value.business;
        }
        str =
          "FromItem<br />index = " +
          e.fromitem.index +
          "<br />value = " +
          value;

        value = "";
        if (e.toitem.index > -1) {
          _value = e.toitem.value;
          value =
            _value.province +
            _value.city +
            _value.district +
            _value.street +
            _value.business;
        }
        str +=
          "<br />ToItem<br />index = " +
          e.toitem.index +
          "<br />value = " +
          value;
        document.getElementById("searchResultPanel").innerHTML = str;
      });
      let myValue;
      this.autocomplete.addEventListener("onconfirm", function (e) {
        //鼠标点击下拉列表后的事件
        var _value = e.item.value;
        myValue =
          _value.province +
          _value.city +
          _value.district +
          _value.street +
          _value.business;
        document.getElementById("searchResultPanel").innerHTML =
          "onconfirm<br />index = " +
          e.item.index +
          "<br />myValue = " +
          myValue;

        setPlace();
      });

      function setPlace() {
        map.clearOverlays(); //清除地图上所有覆盖物
        function myFun() {
          var pp = local.getResults().getPoi(0).point; //获取第一个智能搜索的结果
          map.centerAndZoom(pp, 18);
          map.addOverlay(new BMapGL.Marker(pp)); //添加标注
        }
        var local = new BMapGL.LocalSearch(map, {
          //智能搜索
          onSearchComplete: myFun,
        });
        local.search(myValue);
      }
    },
  },
  mounted() {
    this.initMap();
  },
};
</script>
<style lang="scss" scoped>
body,
html {
  width: 100%;
  height: 100%;
  margin: 0;
  font-family: "微软雅黑";
  font-size: 14px;
}
#l-map {
  height: 360px;
  width: 100%;
}
#r-result {
  width: 100%;
}
</style>

  
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
要在 Vue 中添加百度地图搜索和定位功能,可以按照以下步骤进行: 1. 在 index.html 中引入百度地图的 JavaScript API: ```html <script type="text/javascript" src="http://api.map.baidu.com/api?v=3.0&ak=您的密钥"></script> ``` 注意将“您的密钥”替换为您的百度地图开发者密钥。 2. 在 Vue 组件中创建地图和搜索框: ```html <template> <div id="map"></div> <div id="search"> <input type="text" v-model="keyword" placeholder="请输入搜索关键字" /> <button @click="search">搜索</button> </div> </template> <script> export default { data() { return { map: null, keyword: '', }; }, mounted() { // 创建地图 this.map = new BMap.Map('map'); // 定位到当前位置 this.getLocation(); }, methods: { getLocation() { // 获取当前位置 const geolocation = new BMap.Geolocation(); geolocation.getCurrentPosition((resp) => { this.map.centerAndZoom(resp.point, 15); }); }, search() { // 搜索 const local = new BMap.LocalSearch(this.map, { onSearchComplete: (results) => { if (local.getStatus() === BMAP_STATUS_SUCCESS) { // 显示搜索结果 this.showResults(results); } }, }); local.search(this.keyword); }, showResults(results) { // 在地图上显示搜索结果 this.map.clearOverlays(); for (let i = 0; i < results.getCurrentNumPois(); i++) { const poi = results.getPoi(i); const marker = new BMap.Marker(poi.point); this.map.addOverlay(marker); } }, }, }; </script> ``` 在这个示例中,我们创建了一个包含地图和搜索框的组件,并在 mounted 钩子中创建了地图和定位到当前位置。当用户在搜索框中输入关键字并点击搜索按钮时,我们使用百度地图的 LocalSearch 对象进行搜索,并在地图上显示搜索结果。 注意,由于涉及到地图的 DOM 操作,我们需要在 mounted 钩子中进行相关操作,而不能在 created 钩子中进行。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值