vue3+vue-baidu-map-3x 实现地图定位

文档地址:一个是2一个是3

https://dafrok.github.io/vue-baidu-map/#/zh/index

vue-baidu-map-3x

1.首先要到百度地图开放平台上建一个账号,如果有百度账号可以直接登录百度地图-百万开发者首选的地图服务商,提供专属的行业解决方案

2.点击控制台,完善信息

3.信息完善之后,打开的是这个页面(我这里完善的信息选择的是个人)

4.然后点击应用管理下的我的应用,此时打开的页面如果已有应用可以直接用那个ak值,如果没有请点击创建应用,根据自己的需要进行选择生成,第三张图片上的白名单,如果本地跑的话可以直接输入*,但要注意上线之后改掉,创建好后就有一个ak啦,一会在代码里把这个ak粘进去就可以啦

5,程序:我这里用了两个功能,一个是定位,一个是搜索

先安装

复制代码
pnpm install vue-baidu-map-3x --save

html

复制代码
<!-- 百度地图 -->
    <baidu-map
      class="map"
      ak="L3on1qvFT4RG1weFYRIxGbG8WOXpqzAi"
      v="3.0"
      type="API"
      :zoom="15"
      :center="centerVal"
    >
      <!-- 定位 -->
      <bm-geolocation
        anchor="BMAP_ANCHOR_BOTTOM_RIGHT"
        :show-address-bar="true"
        :auto-location="true"
        @locationSuccess="successFn"
        @locationError="errorFn"
      />
      <!-- 自定义组件 -->
      <bm-control>
        <a-input-search
          v-model:value="addressSear"
          placeholder="请输入地点"
          enter-button="搜索"
          size="large"
          @search="onSearch"
        />
      </bm-control>
    </baidu-map>

script

复制代码
<script lang="ts">
  import { defineComponent, ref } from 'vue';
  import { BaiduMap, BmGeolocation, BmControl } from 'vue-baidu-map-3x';
  export default defineComponent({
    name: 'a',
    components: { BaiduMap, BmGeolocation, BmControl },
    emits: ['success'],
    setup(props, { emit }) {
      //搜索框内容
      const addressSear = ref('');
      // 百度地图默认定位
      const centerVal = ref('北京');
      // 定位存储的位置
      const positonStr = ref('');

      // 搜索框-赋值,让地图跟着变化
      const onSearch = () => {
        centerVal.value = addressSear.value;
      };
      // 定位失败
      const errorFn = () => {
        alert('定位失败');
      };
      // 定位成功
      const successFn = (e: any) => {
        // 定位赋值
        positonStr.value =
          e.addressComponent.province +
          e.addressComponent.city +
          e.addressComponent.district +
          e.addressComponent.street +
          e.addressComponent.streetNumber;
      };
      return { errorFn, successFn, addressSear, centerVal, onSearch };
    },
  });

完整程序

复制代码
<template>
  <........
  >
    <!-- 百度地图 -->
    <baidu-map
      class="map"
      ak="L3on1qvFT4RG1weFYRIxGbG8WOXpqzAi"
      v="3.0"
      type="API"
      :zoom="15"
      :center="centerVal"
    >
      <!-- 定位 -->
      <bm-geolocation
        anchor="BMAP_ANCHOR_BOTTOM_RIGHT"
        :show-address-bar="true"
        :auto-location="true"
        @locationSuccess="successFn"
        @locationError="errorFn"
      />
      <!-- 自定义组件 -->
      <bm-control>
        <a-input-search
          v-model:value="addressSear"
          placeholder="请输入地点"
          enter-button="搜索"
          size="large"
          @search="onSearch"
        />
      </bm-control>
    </baidu-map>
  </.............>
</template>
<script lang="ts">
  import { defineComponent, ref } from 'vue';
  import { BaiduMap, BmGeolocation, BmControl } from 'vue-baidu-map-3x';
  export default defineComponent({
    name: '.........',
    components: { BaiduMap, BmGeolocation, BmControl },
    emits: ['success'],
    setup(props, { emit }) {
      .................
      //搜索绑定变量
      const addressSear = ref('');
      //定位, 可使用如"广州市海珠区"的地区字符串,也可以使用对象如 {lng: 116.404, lat: 39.915} 表示经纬度
      const centerVal = ref('北京');
      // 定位按钮的当前位置
      const positonStr = ref('');
      
      // 弹窗保存
      async function handleSubmit() {
        if (!positonStr.value) {
          positonStr.value = centerVal.value;
        }
        emit('success', positonStr.value);
        ........
      }
      // 搜索框
      const onSearch = () => {
        centerVal.value = addressSear.value;
      };
      // 定位失败
      const errorFn = () => {
        alert('定位失败');
      };
      // 定位成功
      const successFn = (e: any) => {
        // 定位赋值
        positonStr.value =
          e.addressComponent.province +
          e.addressComponent.city +
          e.addressComponent.district +
          e.addressComponent.street +
          e.addressComponent.streetNumber;
      };
      return {  handleSubmit, errorFn, successFn, addressSear, centerVal, onSearch };
    },
  });
</script>
<style scoped>
  .map {
    width: 100%;
    height: 300px;
  }
</style>
相关推荐
小浣熊熊熊熊熊熊熊丶3 小时前
飞牛NAS 安装 Teslamate 教程(docker版)
1024程序员节
Java陈序员3 小时前
自建 Claude Code 镜像!一站式开源中转服务!
docker·node.js·vue·claude·claude code
程高兴3 小时前
模糊PID控制的永磁同步电机矢量控制系统-SIMULINK
matlab·1024程序员节
呆头鸭L3 小时前
Electron进程通信
前端·javascript·electron·前端框架·vue
木斯佳7 小时前
前端八股文面经大全: 蓝色光标前端一面OC(2026-03-23)·面经深度解析
前端·面试·vue·校招·js·面经
海海不瞌睡(捏捏王子)7 小时前
Unity知识点概要
unity·1024程序员节
unable code8 小时前
[网鼎杯 2020 玄武组]SSRFMe
网络安全·web·ctf·1024程序员节
蜡台1 天前
SPA(Single Page Application) Web 应用(即单页应用)架构模式 更新
前端·架构·vue·react·spa·spa更新
Betelgeuse761 天前
Django 项目远程服务器部署教程:从开发到生产
python·django·vue
初级见习猿工1 天前
使用pdfjs-dist在Vue 3中实现PDF文件浏览器预览
javascript·vue·pdfjs-dist