VUE3 使用百度地图 【点击获取对应坐标】

目录

文档

编码

第一步 申请api秘钥

第二步 引入

 第三步 创建组件

第四步 使用组件

效果图:


文档

百度地图官方文档

https://lbsyun.baidu.com/index.php?title=jspopularGL/guide/geoloaction

百度地图官方示例

https://lbsyun.baidu.com/jsdemo.htm#aCreateMap

编码

第一步 申请api秘钥

https://lbsyun.baidu.com/index.php?title=jspopular/guide/getkey

第二步 引入

在vue项目的index.html文件中引入

 第三步 创建组件

<script lang="ts">
export default {
  name: `baidu-map`
};
</script>
<script setup lang="ts">
import { getCurrentInstance, nextTick, onMounted } from "vue";
const { proxy } = getCurrentInstance();

const props = defineProps({
  x: {
    type: Number,
    default: 113.31071
  },
  y: {
    type: Number,
    default: 23.14828
  }
});

onMounted(() => {
  nextTick(() => {
    init();
  });
});

const init = async () => {
  const BMap = window.BMap;
  //显示级别,如省市区街,0-20
  let showLevel = 10;

  const map = new BMap.Map("baidu-map");
  //地图中心点,默认广州市
  let point = new BMap.Point(113.31071, 23.14828);
  // 初始化图标
  let Icon_0 = new BMap.Icon(
    "/src/assets/svg/punctuation.svg",
    new BMap.Size(64, 64),
    {anchor: new BMap.Size(18, 32), imageSize: new BMap.Size(36, 36)}
  );

  //已有坐标,则根据已有坐标显示定位图标
  if(props.x && props.y){
    point = new BMap.Point(props.x, props.y);
    showLevel = 17;
    //设置初始坐标图标位置
    let myMarker = new BMap.Marker(
      new BMap.Point(props.x, props.y),
      {icon: Icon_0}
    );
    map.addOverlay(myMarker);
  }

  //设置中心坐标,显示级别
  map.centerAndZoom(point, showLevel);
  //获取当前定位
  map.addControl(new BMap.GeolocationControl());
  //开启鼠标滚轮缩放
  map.enableScrollWheelZoom(true);
  // 添加控件
  let opts = {type: "BMAP_NAVIGATION_CONTROL_SMALL"};
  map.addControl(new BMap.NavigationControl(opts));

  //创建点击事件
  map.addEventListener("click", function (e) {

    //向父组件传值
    proxy.$emit("childClick", e.point);
    //清除地图上所有覆盖物
    map.clearOverlays();
    //设置点击后图标显示
    let myMarker = new BMap.Marker(
      new BMap.Point(e.point.lng, e.point.lat),
      {icon: Icon_0}
    );
    map.addOverlay(myMarker);
  });
}
</script>

<template>
  <div>
    <div id="baidu-map" />
  </div>
</template>
<style>
#baidu-map {
  height: calc(70vh - 86px);
}
</style>

第四步 使用组件

效果图:

传递经纬度的效果:

未传递效果: