VUE3 使用百度地图 【点击获取对应坐标】
目录
文档
百度地图官方文档
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>
第四步 使用组件
效果图:
传递经纬度的效果:
未传递效果: