百度地图的搜索、控件、点击获取城市名称和经纬度

本文章主要内容:1、展示百度地图;2、百度地图控件;3、实现搜索城市的功能,返回附近地址名称;4、点击地图返回当前地址名称和经纬度;5、自定义图片。

引入百度地图脚本文件

<script type="text/javascript" src="https://api.map.baidu.com/api?v=2.0&ak=引入自己的ak"></script>

<template>
  <div class="map_ent">
    <el-input v-model="mapAddress" id="addressInput" placeholder="请输入查询的地址" :prefix-icon="Search" clearable
      @input="iptChange" @focus="iptFocus" @blur="iptBlur" />
    <div ref="mapDom" class="map"></div>
  </div>
</template>

<script setup>
import { ref, onMounted } from 'vue';
import { Search } from '@element-plus/icons-vue';
import addressImg from '../../../assets/img/map/map_icon.png';

onMounted(() => {
  initMap();
})

const mapDom = ref(null);//地图容器
const map = ref();//地图实例
const zoom = ref(15);//缩放值
const mapAddress = ref();//地址
const timer = ref(null);

const initMap = () => {
  map.value = new BMap.Map(mapDom.value);//创建地图实例
  let point = new BMap.Point(103.834265, 36.061047);//中心点坐标

  map.value.centerAndZoom(point, zoom.value);//设置中心点和缩放级别
  map.value.enableScrollWheelZoom(true); //滚轮缩放

  // var scaleCtrl = new BMap.ScaleControl();  // 添加比例尺控件
  // map.value.addControl(scaleCtrl);
  // var cityCtrl = new BMap.CityListControl();  // 添加城市列表控件
  // map.value.addControl(cityCtrl);
  // var cityCtrl = new BMap.CityListControl();  // 添加城市列表控件
  // map.value.addControl(cityCtrl);

  // type值 1、BMAP_NAVIGATION_CONTROL_LARGE 2、BMAP_NAVIGATION_CONTROL_SMALL 3、BMAP_NAVIGATION_CONTROL_PAN 4、BMAP_NAVIGATION_CONTROL_ZOOM
  map.value.addControl(new BMap.NavigationControl({ type: BMAP_NAVIGATION_CONTROL_ZOOM }));//平移缩放控件
  map.value.addControl(new BMap.ScaleControl());//比例尺控件
  map.value.addControl(new BMap.OverviewMapControl());//右侧缩略图控件
  map.value.addControl(new BMap.MapTypeControl());//地图类型控件
  // map.value.addControl(new BMap.CopyrightControl());//版权控件
  map.value.addControl(new BMap.GeolocationControl());//定位当前位置的控件  

  // map.value.setMapStyleV2({
  //   styleId: 'ad885ff0cb73e6ba061a4d8e9276c1c3'
  // });

  map.value.addEventListener("click", function (e) {
    console.log('点地图中的经纬度坐标', e.point.lng, e.point.lat);
    const point = new BMap.Point(e.point.lng, e.point.lat);
    // console.log('point转化后的经纬度坐标', point);
    const geocoder = new BMap.Geocoder();
    geocoder.getLocation(point, (result) => {
      if (result) {
        console.log('解析成功', result);
        // 清除当前地图上的覆盖物
        map.value.clearOverlays();
        // 在当前地图上添加标注
        map.value.addOverlay(new BMap.Marker(point, zoom.value));
        // 显示当前地址
        mapAddress.value = result.surroundingPois[0]?.title || result.address;
      }
    })
  })
}

const iptChange = () => {
  // fun1()
  if (timer.value) {
    clearTimeout(timer.value);
  };
  timer.value = setTimeout(() => {
    console.log('改变的值', mapAddress.value);
    fun1()
  }, 1000);
}

const iptFocus = () => {
  console.log('输入框获取焦点', mapAddress.value);
  // if (!mapAddress.value) return;
  if (!mapAddress.value) {
    mapAddress.value = '';
  }
  fun1()
}

const iptBlur = () => {
  console.log('输入框失去焦点');
}
const fun1 = () => {
  var ac = new BMap.Autocomplete({
    input: "addressInput",
    // 作用:指定一个地图中心点,用于限制搜索范围。可以是一个BMap.Point对象,表示经纬度坐标。如果不指定,将在全球范围内搜索。
    // 示例:location: new BMap.Point(116.404, 39.915),这里指定了北京市中心的经纬度坐标作为搜索范围的中心点。
    location: map.value,
    // 作用:设置初始输入值,用于在自动完成功能初始化时显示一些提示。
    // 示例:value: "北京市",在输入框中预先显示 “北京市”,以便触发自动完成的提示。
    value: mapAddress.value
  });
  ac.setInputValue(mapAddress.value);
  // 监听自动完成的 onconfirm 事件
  ac.addEventListener("onconfirm", function (e) {
    console.log('回显的数据', e);
    const myCity = e.item.value;
    mapAddress.value = myCity.province + myCity.city + myCity.district + myCity.street + myCity.business;
    // mapAddress.value = myCity;
    var myGeo = new BMap.Geocoder();
    myGeo.getPoint(mapAddress.value, function (point) {
      if (point) {
        console.log('解析成功point', point);
        map.value.centerAndZoom(point, zoom.value);
        let myIcon = new BMap.Icon(
          addressImg,
          new BMap.Size(200, 200)
        );
        myIcon.setImageSize(new BMap.Size(200,200));//设置图片大小,实现了缩放的效果
        map.value.clearOverlays(); //清除地图上所有覆盖物
        map.value.addOverlay(new BMap.Marker(point, { icon: myIcon }));
        // map.value.addOverlay(new BMap.Marker(point));
      } else {
        alert("您选择地址没有解析到结果!");
      }
    })
    // 在这里可以将选中的推荐地址显示在页面上或者进行其他处理
  });
}





</script>

<style scoped>
.map {
  width: 700px;
  height: 500px;
}
</style>

效果

1、百度地图的显示

2、搜索功能以及回显

3、搜索的结果以及自定义图片

4、点击获取城市名称

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值