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>
相关推荐
漫天转悠26 分钟前
VScode中配置ESlint+Prettier详细步骤(图文详情)
vscode·vue
希忘auto3 小时前
详解Redis的常用命令
redis·1024程序员节
落魄实习生13 小时前
AI应用-本地模型实现AI生成PPT(简易版)
python·ai·vue·ppt
bpmf_fff15 小时前
二九(vue2-05)、父子通信v-model、sync、ref、¥nextTick、自定义指令、具名插槽、作用域插槽、综合案例 - 商品列表
vue
yaosheng_VALVE19 小时前
探究全金属硬密封蝶阀的奥秘-耀圣控制
运维·eclipse·自动化·pyqt·1024程序员节
dami_king19 小时前
SSH特性|组成|SSH是什么?
运维·ssh·1024程序员节
java_heartLake21 小时前
Vue3之状态管理Vuex
vue·vuex·前端状态管理
小马超会养兔子1 天前
如何写一个数字老虎机滚轮
开发语言·前端·javascript·vue
小阳生煎1 天前
多个Echart遍历生成 / 词图云
vue
小马超会养兔子2 天前
如何写一个转盘
开发语言·前端·vue