vue 引用百度地图

news2024/12/26 13:47:03

address.vue

<template>
  <div>
    <!-- 地图 -->
    <el-drawer
      :visible.sync="type1"
      direction="rtl"
      size="50%"
      append-to-body
      class="map-drawer"
      :before-close="beforeClose"
    >
      <div style="width: 100%;height: 100%;">
        <div slot="title" class="title_info_weight">选择地点</div>
        <el-input
          placeholder="请输入关键字"
          suffix-icon="el-icon-search"
          v-model="keyword"
          style="
            z-index: 10;
            top: 10px;
            position: absolute;
            left: 16px;
            width: 350px;
          "
        >
        </el-input>
        <baidu-map
          class="bm-view"
          :center="mapData.center"
          :zoom="mapData.zoom"
          @ready="mapHandler"
          @click="getLocation"
          :scroll-wheel-zoom="true"
        >
          <bm-local-search
            :keyword="keyword"
            :auto-viewport="true"
            :location="location"
            :panel="false"
            style="display: none"
            @searchcomplete="onSearchComplete"
            @infohtmlset="onInfohtmlset"
            @markersset="onMarkersset"
          ></bm-local-search>
          <!-- 点击加点 -->
          <!-- <bm-marker :position="{ lng: longitude, lat: latitude }"></bm-marker> -->
          <!-- 弹框 -->
          <bm-info-window
            :position="{ lng: longitude, lat: latitude }"
            :show="infoWindowShow"
            title="请选择详细位置"
            @clickclose="infoWindowClose"
          >
            <div
              v-for="(item, index) in surroundingPois"
              :key="index"
              :class="{ activeColor: colorIndex === index }"
              @click="pointcheck(item, index)"
            >
              <p style="line-height: 1.2; font-size: 14px">{{ item.title }}</p>
            </div>
            <div
              v-if="surroundingPois.length == 0"
              style="line-height: 1.2; font-size: 14px"
            >
              {{ address.addressStr }}
            </div>
          </bm-info-window>
        </baidu-map>
      </div>
      <div class="avue-dialog__footer">
        <el-button @click="type1 = false">取 消</el-button>
        <el-button @click="onSure" type="primary">确 定</el-button>
      </div>
    </el-drawer>
  </div>
</template>

<script>
import '@riophae/vue-treeselect/dist/vue-treeselect.css'// 下拉框全局组件样式

export default {
  data() {
    return {
      //地图
      mamParams: {
        Zoom: 12
      },
      mapFrom: [98.490276, 25.020283],
      //地图数据
      colorIndex: -1,
      mapData: {
        center: { lng: 0, lat: 0 },
        zoom: 13,
      },
      BMap: null, //BMap类
      map: null, //地图对象
      mk: "", //Marker实例
      address: {
        lng: 0, //经度
        lat: 0, //纬度
        addressStr: "",
        title: "",
        province: "", // 省
        city: "", // 市
        district: "", // 区
      },
      location: "腾冲", //检索城市
      type1: false,
      latitude: "",
      longitude: "",
      surroundingPois: [], //选中位置周围数据
      infoWindowShow: false,//控制地图信息窗口显示
      keyword:"",
    }
  },
  methods:{
    //返回
    goBack() {
      this.$router.$avueRouter.closeTag();
      window.history.back();
    },
    // 点击选择地址
    onChangeCity() {
      this.$refs.cityRef.blur()
      this.type1 = true
    },
    //标注气泡内容创建后的回调函数获取气泡内的信息
    onInfohtmlset(res) {
      console.log('res', res)
      this.longitude = res.point.lng;
      this.latitude = res.point.lat;
      this.infoWindowShow = false;
      // this.address.region = res.province + res.city;
      this.eventManList.gisx = res.point.lng;
      this.eventManList.gisy = res.point.lat;
      this.address.addressStr = res.address;
    },
    onMarkersset(res) {
      //标注添加完成后的回调函数
      this.infoWindowShow = false;
    },
    //直接选点,展示附近点位
    getLocation(e) {
      this.colorIndex = -1;
      if (e.overlay) {
        this.infoWindowShow = false;
      } else {
        this.infoWindowShow = true;
      }
      this.longitude = e.point.lng;
      this.latitude = e.point.lat;
      const myGeo = new BMap.Geocoder(); // 创建地址解析器的实例
      myGeo.getLocation(e.point, (rs) => {
        this.surroundingPois = rs.surroundingPois;
        let adr = rs.addressComponents;
        // this.address.region = adr.province + adr.city + adr.district+adr.street+adr.streetNumber; // 省市区街道门牌号
        if (rs.surroundingPois.length == 0) {
          this.address.addressStr = rs.address;
        }
      });
    },
    //选择点位
    pointcheck(e, index) {
      this.colorIndex = index;
      this.address.addressStr = e.address;
    },
    //信息窗口关闭
    infoWindowClose() {
      this.latitude = "";
      this.longitude = "";
      this.infoWindowShow = false;
    },
    //地图确定按钮
    onSure() {
      this.infoWindowShow = false
      let data = [this.longitude, this.latitude, this.address.addressStr]
      this.type1 = false;
      this.$emit('onSure', data)
    },
    //地图初始化
    mapHandler({ BMap, map }) {
      this.map = map;
      this.BMap = BMap;
      this.mapData.center.lng = 98.497291;
      this.mapData.center.lat = 25.01757;
      this.mapData.zoom = 18;
    },
    onSearchComplete(res) {
      // 地图搜索回调
      this.infoWindowShow = false;
    },
    beforeClose(done) {
      this.keyword = "";
      this.infoWindowShow = false;
      // this.map.removeOverlay()
      done();
    },
  },
  created() {

  },
  mounted() {
  }
}
</script>

<style scoped></style>
<style lang="css" scoped>
::v-deep .el-button--small, .el-button--small.is-round  {
  display: none;
}

::v-deep .el-form-item__content {
  line-height: 40px;
  position: relative;
  font-size: 14px;
  margin-left: 128px;
}
.avue-form{
  width: auto !important;
  margin: 0 !important;
}
.avue-form
::v-deep .el-form-item__content {
  line-height: 40px;
  position: relative;
  font-size: 14px;
  margin-left: 0px !important;
}
.avue-form
::v-deep .el-col {
  margin-bottom: 0 !important;
}
.bm-view {
  width: 100%;
  height: 90%;
}
.activeColor {
  color: #0060ff !important;
}
</style>

main.js

 

封装成了一个组件

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1517999.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Linux学习笔记(一)Linux基本指令

文章目录 前言目录常见命令1. pwd 打印当前所在路径2. cd 改变路径、切换路径3. 家目录 回到顶级目录4. 当前路径和上一路径5. 上一次路径6. 绝对路径和相对路径7. ls 列出目录内容8. mkdir 创建目录9. rmdir 删除目录10. touch 创建文件11. mv 修改文件目录、移动路径12. cp 复…

Vue3基础笔记(1)模版语法 属性绑定 渲染

Vue全称Vue.js是一种渐进式的JavaScript框架&#xff0c;采用自底向上增量开发的设计&#xff0c;核心库只关注视图层。性能丰富&#xff0c;完全有能力驱动采用单文件组件和Vue生态系统支持的库开发的复杂单页应用&#xff0c;适用于场景丰富的web前端框架。灵活性和可逐步集成…

一周学会Django5 Python Web开发-Jinja3模版引擎-模板语法

锋哥原创的Python Web开发 Django5视频教程&#xff1a; 2024版 Django5 Python web开发 视频教程(无废话版) 玩命更新中~_哔哩哔哩_bilibili2024版 Django5 Python web开发 视频教程(无废话版) 玩命更新中~共计37条视频&#xff0c;包括&#xff1a;2024版 Django5 Python we…

Linux系统架构----Tomcat 部署

一.Tomcat概述 Tomcat服务器是一个免费的开放式源代码的web应用服务器&#xff0c;属于轻量级应用级服务器&#xff0c;在中小型系统和并发访问用户不是很多的场合下被普遍使用&#xff0c;是开发和调试JSP程序的首首选。 一般来说&#xff0c;tomcat虽然和Apache或者Nginx这些…

ThingsBoard 开源物联网平台

文章目录 1.ThingsBoard 介绍2.ThingsBoard 架构2.1.单体架构2.2.微服务架构 3.物联网网关4.边缘计算 ThingsBoard # ThingsBoardhttps://iothub.org.cn/docs/iot/ https://iothub.org.cn/docs/iot/thingsboard-ce/1.ThingsBoard 介绍 ThingsBoard 是一个开源物联网平台&…

MySQL 数据库 下载地址 国内阿里云站点

mysql安装包下载_开源镜像站-阿里云 以 MySQL 5.7 为例 mysql-MySQL-5.7安装包下载_开源镜像站-阿里云

C++ 拷贝构造函数和运算符重载

目录 一. 拷贝构造函数 1. 引入 2. 拷贝构造的概念 3. 浅拷贝 4. 深拷贝 二. C运算符重载 1. 概念 2. 注意事项 3.举例 一. 拷贝构造函数 1. 引入 我们在创建对象时&#xff0c;能不能创建一个与原先对象一模一样的新对象呢&#xff1f;为了解决这个问题&#x…

Qt/QML编程之路:基于QWidget编程及各种2D/3D/PIC绘制的示例(45)

关于使用GWidget,这里有一个示例,看了之后很多图形绘制,控件使用,及最基本的QWidget编程都比较清楚了。ui的绘制: 运行后的界面如 工程中有非常丰富的关于各种图形的绘制,比如上图中circle,还有image。有下面一段readme的说明: # EasyQPainter Various operation pra…

java数据结构与算法刷题-----LeetCode47. 全排列 II

java数据结构与算法刷题目录&#xff08;剑指Offer、LeetCode、ACM&#xff09;-----主目录-----持续更新(进不去说明我没写完)&#xff1a;https://blog.csdn.net/grd_java/article/details/123063846 文章目录 1. 暴力回溯2. 分区法回溯 此题为46题的衍生题&#xff0c;在46题…

QT c++ 双精度数拆分和组合 Tool

本文描述QT c的双精度数拆分和合并&#xff0c;即双精度浮点数拆为四个16位无符号整数以及将四个16位无符号整数组合为双精度浮点数。 开发平台&#xff1a;win10QT6.2.4 MSVC2019 64 bit 在本文的最好列出了代码和可执行文件打包下载链接&#xff08;可直接使用&#xff09;…

【数学】【计算几何】1453. 圆形靶内的最大飞镖数量

作者推荐 视频算法专题 本文涉及知识点 数学 计算几何 LeetCoce:1453. 圆形靶内的最大飞镖数量 Alice 向一面非常大的墙上掷出 n 支飞镖。给你一个数组 darts &#xff0c;其中 darts[i] [xi, yi] 表示 Alice 掷出的第 i 支飞镖落在墙上的位置。 Bob 知道墙上所有 n 支飞…

“计算机行业的未来:政策导向、技术创新与发展前景“

从政府工作报告探计算机行业发展 政府工作报告作为政府工作的全面总结和未来规划&#xff0c;不仅反映了国家整体的发展态势&#xff0c;也为各行各业提供了发展的指引和参考。随着信息技术的快速发展&#xff0c;计算机行业已经成为推动经济社会发展的重要引擎之一。因此&…

Hack The Box-Monitored

目录 信息收集 rustscan dirsearch WEB web信息收集 snmpwalk curl POST身份验证 漏洞探索 漏洞挖掘 sqlmap 登录后台 提权 get user get root 信息收集 rustscan ┌──(root㉿ru)-[~/kali/hackthebox] └─# rustscan -b 2250 10.10.11.248 --range0-65535 --…

攻防世界-misc-arrdeepee

题目链接:攻防世界 (xctf.org.cn) 题目:我们某一个box被pwn了。在检查过程中,我们发现了一个叫mimikatz的东西,我们以前没有安装过,所以我们清除了,并且重新安装了box。但是,我们忘记备份我们的flag文件了。幸运的是,我们有一个攻击者网络流量捕获。你可以帮我们恢复出…

第12集《天台教观纲宗》

请大家打开讲义第二十一页&#xff0c;我们看己二、明稍利随时得入。 蕅益大师在《弥陀要解》讲一个很重要的概念&#xff0c;提醒所有净土宗的行者&#xff0c;他说&#xff1a;方便有多门&#xff0c;归元无二路。学佛它有两个概念&#xff1a;一个是方便&#xff0c;一个是归…

Android 录屏操作

Android 录屏操作 本文主要介绍android中如何通过MediaRecorder实现录屏操作的. 1: 申请权限 <uses-permission android:name"android.permission.RECORD_AUDIO" /> <uses-permission android:name"android.permission.WRITE_EXTERNAL_STORAGE"…

vue3动态组件未渲染问题

渲染问题 component动态组件写法与vue2写法一致&#xff0c;代码如下&#xff1a; <component :is"componentName"/><script setup>import { ref } from vueimport account from ./user/account.vue// 组件名称const componentName ref(account)// 点击…

密码学——MAC

消息认证码 在信息发送和接收过程中,若攻击者能够得到信息,进行篡改,就能达到欺骗,诈骗,冒名顶替的作用。为了防止冒名诈骗,一个对策就是使用消息认证码——MAC: Message Authentication Code。 消息认证码,即确定消息真实性的认证程序。发件人将想要发送的信息和从哪个…

挑战OpenAI的新模型免费上线,40%计算量性能逼近GPT-4

据介绍,Inflection-2.5 将强大的 LLM 能力与 Inflection 标志性的「同理心微调」结合在一起,兼具高情商与高智商,可联网获取事实信息,其性能可与 GPT-4、Gemini 等领先大模型相媲美。 本周四,美国 AI 创业公司 Inflection AI 正式发布新一代大语言模型 Inflection-2.5。 …

es 聚合操作(二)

书接上文&#xff0c;示例数据在上一篇&#xff0c;这里就不展示了 一、Pipeline Aggregation 支持对聚合分析的结果&#xff0c;再次进行聚合分析。 Pipeline 的分析结果会输出到原结果中&#xff0c;根据位置的不同&#xff0c;分为两类&#xff1a; Sibling - 结果和现有…