技术点:使用vue和element实现地图选点功能

使用vue+element+腾讯地图组件实现地图选点功能

效果:

选点

完整代码

<template>
  <div id="app">
    <el-button @click="openMapPickPop">选点</el-button>
    <div>
      <b>经度:</b>
      <b>{{ currentPicked?.latlng.lat }}</b>
    </div>
    <div>
      <b>纬度:</b>
      <b>{{ currentPicked?.latlng.lng }}</b>
    </div>
    <div>
      <b>城市:</b>
      <b>{{ currentPicked?.cityname }}</b>
    </div>
    <div>
      <b>位置信息:</b>
      <b>{{ currentPicked?.poiaddress }}{{ currentPicked?.poiname }}</b>
    </div>
  </div>
</template>

<script setup>
  import { ref, reactive, computed, watch, onMounted } from "vue";
  import { ElMessageBox } from "element-plus";

  const mapApiKey = "UU2BZ-B6RKG-QCTQW-IA6XO-5NHSH-Q6BYM";
  const IFRAME_HTML = `<iframe id="mapPage" width="600" height="400" frameborder="0"
              src="https://apis.map.qq.com/tools/locpicker?search=1&type=1&key=${mapApiKey}&referer=myapp"></iframe>`;

  const currentPicked = ref({
    latlng: {},
  });

  function openMapPickPop($event) {
    if ($event.relatedTarget) return;
    ElMessageBox({
      title: "选择地址",
      message: IFRAME_HTML,
      customClass: "location-picker-box",
      dangerouslyUseHTMLString: true,
      closeOnPressEscape: false,
    })
      .then(() => {
        window.removeEventListener("message", handleMapPickedMessage, false);

        console.log("选择了地图", currentPicked.value);
      })
      .catch(e => {
        if (e != "cancel") throw e;
        window.removeEventListener("message", handleMapPickedMessage, false);
      });

    window.addEventListener("message", handleMapPickedMessage, false);
  }
  function handleMapPickedMessage(event) {
    /**
     * 接收位置信息,用户选择确认位置点后选点组件会触发该事件,回传用户的位置信息
     */
    let loc = event.data;
    // 防止其他应用也会向该页面post信息,需判断module是否为'locationPicker'
    if (loc && loc.module != "locationPicker") return;
    currentPicked.value = loc;
    // console.log(" currentPicked.value ", currentPicked.value );
  }
</script>

<style>
  html .location-picker-box {
    width: auto;
    max-width: none;
  }
</style>

实现步骤

步骤一:拿到腾讯地图组件的iframe

去腾讯地图申请账号,拿到自己的key,否则无法调用腾讯地图的组件
腾讯地图组件示例地址

拿到这个iframe
在这里插入图片描述

注意:key需要注册账号·自己去申请,拿到唯一的key之后腾讯才知道是谁调用的这个组件,然后计次

  const mapApiKey = "UU2BZ-B6RKG-QCTQW-IA6XO-5NHSH-Q6BYM";
  const IFRAME_HTML = `<iframe id="mapPage" width="600" height="400" frameborder="0"
              src="https://apis.map.qq.com/tools/locpicker?search=1&type=1&key=${mapApiKey}&referer=myapp"></iframe>`;

步骤二:在用户点击时调用方法,该方法内调出腾讯的iframe

用别的方法也行,此处是使用了el-element的this.$msgBox,如果使用的其他组件库你也可以使用其他的

  function openMapPickPop($event) {
    if ($event.relatedTarget) return;
    ElMessageBox({
      title: "选择地址",
      message: IFRAME_HTML,
      customClass: "location-picker-box",
      dangerouslyUseHTMLString: true,
      closeOnPressEscape: false,
    })
      .then(() => {
        window.removeEventListener("message", handleMapPickedMessage, false);

        console.log("选择了地图", currentPicked.value);
      })
      .catch(e => {
        if (e != "cancel") throw e;
        window.removeEventListener("message", handleMapPickedMessage, false);
      });

    window.addEventListener("message", handleMapPickedMessage, false);
  }

步骤三:用户选点后,通过页面通信将选中的值传给页面内的变量

  function handleMapPickedMessage(event) {
    /**
     * 接收位置信息,用户选择确认位置点后选点组件会触发该事件,回传用户的位置信息
     */
    let loc = event.data;
    // 防止其他应用也会向该页面post信息,需判断module是否为'locationPicker'
    if (loc && loc.module != "locationPicker") return;
    currentPicked.value = loc;
    // console.log(" currentPicked.value ", currentPicked.value );
  }

完成拉!!!!

  • 7
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
为了解决上述问题,我们可以采用以下技术: 1. 前端框架:Vue.js Vue.js是一款流行的前端框架,可以用于构建单页面应用程序和复杂的用户界面。Vue.js具有简单易用、灵活可扩展、性能优秀等特,非常适合用于开发企业级应用程序。 2. UI框架:Element UI Element UI是一款基于Vue.js的UI框架,提供了一系列美观、易用的组件,可以用于构建企业级应用程序的界面。Element UI具有简单易用、丰富的组件库、响应式布局等特,非常适合用于快速构建企业级应用程序的界面。 3. 后端框架:Spring Boot Spring Boot是一款流行的后端框架,可以用于构建基于Java的企业级应用程序。Spring Boot具有简单易用、快速开发、自动配置等特,非常适合用于构建高效、可靠的企业级应用程序。 4. 数据库:MySQL MySQL是一款流行的关系型数据库,可以用于存储企业级应用程序的数据。MySQL具有性能优异、安全可靠、易用等特,非常适合用于存储企业级应用程序的数据。 在前后端代码的整合方面,可以采用以下方法: 1. 前端代码开发 使用Vue.jsElement UI开发前端页面,包括员工列表页面、员工信息修改页面和员工新建页面。 2. 后端代码开发 使用Spring Boot开发后端代码,包括员工数据的增删改查等接口。 3. 数据库开发 使用MySQL开发数据库,包括员工数据、工资数据、考勤数据等表结构设计。 4. 前后端连接 通过RESTful API将前后端连接起来,实现数据的传输和交互。 综上所述,采用Vue.jsElement UI作为前端框架,Spring Boot作为后端框架,MySQL作为数据库,通过RESTful API将前后端连接起来,可以快速高效地解决上述问题,并实现员工数据的管理。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

易风有点疯

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值