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>
相关推荐
小段闯天涯2 分钟前
vscode 插件推荐安装
vscode·1024程序员节
ProMer_Wang11 分钟前
C#探索之路基础夯实篇(6):C#在Unity中的自定义特性
unity·c#·1024程序员节
聪明的墨菲特i23 分钟前
VUE组件学习 | 六、v-if, v-else-if, v-else组件
前端·vue.js·学习·前端框架·vue
V+zmm101341 小时前
警务辅助人员管理系统小程序ssm+论文源码调试讲解
java·小程序·毕业设计·mvc·课程设计·1024程序员节
好想当只懒羊羊1 小时前
数据结构:堆的应用
1024程序员节
sheng12345678rui3 小时前
mfc100.dll丢失的解决方法-电脑基础知识
数据库·microsoft·电脑·dll修复工具·1024程序员节
xwz小王子4 小时前
李飞飞团队新突破:低成本高泛化机器人训练法,零样本迁移成功率90%!
人工智能·机器人·人机交互·1024程序员节
Stardep4 小时前
算法2—八大常用排序算法(下)
c语言·数据结构·笔记·算法·排序算法·1024程序员节
lizz6665 小时前
使用 Git 命令将本地项目上传到 GitLab
git·1024程序员节
榴莲千丞5 小时前
第七章利用CSS和多媒体美化页面
前端·css·1024程序员节