前端Vue开发中的百度地图定位组件:实现定位、反向地址查询与详细地址展示

一、引言

在前端开发中,地图定位是一个重要的功能,它能够为用户提供直观、便捷的服务。在许多应用场景中,我们不仅需要显示当前的地图定位,还需要将定位坐标反向转成地址,并展示详细地址。本文将介绍如何使用Vue和百度地图API实现这一功能。

二、技术选型

我们选择了Vue.js作为主要的前端框架,因为它具有组件化、响应式等特点,非常适合构建复杂的单页应用。对于地图定位,我们选择了百度地图API,它具有丰富的功能和广泛的用户基础。通过npm安装的vue-baidu-map插件,我们可以方便地在Vue项目中集成百度地图。

 效果图如下:

图片

图片

三、实现过程

  1. 安装vue-baidu-map插件

首先,通过npm安装vue-baidu-map插件:

 

bash复制代码

npm install vue-baidu-map --save
  1. 配置地图组件

在Vue组件中引入并配置地图组件:

 

html复制代码

<baidu-map class="bm-view" :center="centerPoint" :zoom=10 @ready="handler">

这里,:center绑定了地图的中心点坐标,:zoom设置了地图的初始缩放级别。@ready事件用于处理地图加载完成后的逻辑。
3. 添加定位点标记与遮罩物

通过<bm-marker>标签添加定位点标记,并绑定位置信息:

 

html复制代码

<bm-marker :position="locPoint" :dragging="true" @click="infoWindowOpen">

这里,:position绑定了定位点的位置,dragging属性允许用户拖动标记点。点击标记点时,触发infoWindowOpen方法打开信息窗口。

同时,通过<bm-info-window>标签添加信息窗口,用于显示详细地址:

 

html复制代码

<bm-info-window style="border: none !important; border-radius: 4px !important;" :show="show" @close="infoWindowClose" @open="infoWindowOpen">
{{locName}}
</bm-info-window>

这里,:show属性控制信息窗口的显示与隐藏。@close@open事件分别处理信息窗口的关闭和打开操作。{{locName}}使用了Vue的插值语法,用于显示定位点的名称。
4. 实现定位坐标反向转地址功能

要实现定位坐标反向转地址的功能,我们需要使用百度地图API提供的逆地理编码服务。通过调用逆地理编码接口,我们可以将经纬度坐标转换为具体的地址信息。以下是一个示例代码:

 

javascript复制代码

methods: {
reverseGeoCode() {
const {经度, 纬度} = this.locPoint; // 获取定位点的经纬度坐标
const params = { // 构造逆地理编码参数对象
location: `${经度},${纬度}`, // 定位点坐标
output: 'json', // 输出格式为JSON
ak: 'YOUR_AK' // 替换为你的API密钥
};
// 调用逆地理编码接口进行地址查询
axios.get('https://api.map.baidu.com/geocoding/v3/', { params })
.then(response => { // 处理查询结果
const data = response.data; // 获取查询结果数据
if (data.status === 0) { // 判断查询是否成功
this.locName = data.result.formatted_address; // 获取并显示详细地址信息
} else { // 查询失败处理逻辑
console.error(data);
}
})
.catch(error => { // 错误处理逻辑
console.error(error);
});
}
}
使用方法
复制代码 百度地图官方文档: https://dafrok.github.io/vue-baidu-map/#/zh/start/basehttps://lbsyun.baidu.com/cms/jsapi/reference/jsapi_reference.html#安装vue-baidu-map插件npm install vue-baidu-map --save<!-- 百度地图组件  @ready:处理数据刷新 --><baidu-map class="bm-view" :center="centerPoint" :zoom=10 @ready="handler"><!-- 百度地图定位点 --><bm-marker :position="locPoint" :dragging="true" @click="infoWindowOpen"><!-- 百度地图遮罩物 --><bm-info-window style="border: none !important; border-radius: 4px !important;" :show="show"@close="infoWindowClose" @open="infoWindowOpen">{{locName}}</bm-info-window></bm-marker></baidu-map>
HTML代码实现部分
复制代码
<template><view class="content"><!-- 百度地图组件  @ready:处理数据刷新 --><baidu-map class="bm-view" :center="centerPoint" :zoom=10 @ready="handler"><!-- 百度地图定位点 --><bm-marker :position="locPoint" :dragging="true" @click="infoWindowOpen"><!-- 百度地图遮罩物 --><bm-info-window style="border: none !important; border-radius: 4px !important;" :show="show"@close="infoWindowClose" @open="infoWindowOpen">{{locName}}</bm-info-window></bm-marker></baidu-map><view style="height: 20px;"></view></view>
</template><script>import Vue from 'vue'// 引入百度地图import BaiduMap from 'vue-baidu-map'// 引入百度地图定位瞄点import {BmlMarkerClusterer,} from 'vue-baidu-map'Vue.use(BaiduMap, {// ak 是在百度地图开发者平台申请的密钥 详见 http://lbsyun.baidu.com/apiconsole/key */ak: 'dEctYrTTeVr76ANfzG7XwYZGPj'});export default {components: {BmlMarkerClusterer,},data() {return {centerPoint: {lng: 113.282202,lat: 23.13771},locPoint: {},locName: "我的位置",show: false}},methods: {handler({BMap,map}) {console.log(BMap, map)this.getLocation();},getLocation() {let _this = thisconsole.log('获取定位');uni.getLocation({type: 'gcj02',isHighAccuracy: true,success: function(res) {_this.locPoint = {'lng': res.longitude,'lat': res.latitude};var point = new BMap.Point(res.longitude, res.latitude);var gc = new BMap.Geocoder();gc.getLocation(point, function(rs) {// 获取地址组成let addressDict = rs.addressComponents;// 拼接地址_this.locName = addressDict.province + addressDict.city + addressDict.district + addressDict.street + addressDict.streetNumber;// 弹框显示信息uni.showModal({title: '定位坐标转地址',content: "地址信息 = " + JSON.stringify(rs)})});},fail: function(res) {console.log(res);},});},infoWindowClose() {this.show = false},infoWindowOpen() {this.show = true},}}
</script><style>.content {display: flex;flex-direction: column;margin-top: 80rpx;align-items: center;justify-content: center;}.bm-view {margin-left: 0%;width: 100%;margin-top: 10px;color: #999999;height: 90vw;}
</style>

四、总结与展望

通过使用Vue和百度地图API,我们成功地在前端实现了地图定位、标记点展示以及详细地址的显示功能。这不仅提升了应用的用户体验,也为开发者提供了一种高效、便捷的方式来实现地图相关的功能。未来,随着前端技术的不断发展,我们期待有更多优秀的插件和工具出现,为开发者带来更多便利和创新。

附组件完整代码下载地址:https://ext.dcloud.net.cn/plugin?id=12677

  请关注我的微信技术公众号: 前端组件开发

d848d5658a07453c843277846948c608.png

 欢迎加入我们的前端组件学习交流群,可添加群主微信,审核通过后入群。

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

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

相关文章

Django 解决新建表删除后无法重新创建等问题

Django 解决新建表删除后无法重新创建等问题 问题发生描述处理办法首先删除了app对应目录migrations下除 __init__.py以外的所有文件:然后&#xff0c;删除migrations中关于你的app的同步数据数据库记录最后&#xff0c;重新执行迁移插入 问题发生描述 Django创建的表&#xf…

接口幂等性问题和常见解决方案

接口幂等性问题和常见解决方案 1.什么是接口幂等性问题1.1 会产生接口幂等性的问题1.2 解决思路 2.接口幂等性的解决方案2.1 唯一索引解决方案2.2 乐观锁解决方案2.3 分布式锁解决方案2.4 Token解决方案(最优方案) 1.什么是接口幂等性问题 幂等性: 用户同一操作发起的一次或多…

(附数据集)基于lora参数微调Qwen1.8chat模型的实战教程

基于lora微调Qwen1.8chat的实战教程 日期&#xff1a;2024-3-16作者&#xff1a;小知运行环境&#xff1a;jupyterLab描述&#xff1a;基于lora参数微调Qwen1.8chat模型。 样例数据集 - qwen_chat.json&#xff08;小份数据&#xff09; - chat.json&#xff08;中份数据&…

【Hadoop大数据技术】——MapReduce经典案例实战(倒排索引、数据去重、TopN)

&#x1f4d6; 前言&#xff1a;MapReduce是一种分布式并行编程模型&#xff0c;是Hadoop核心子项目之一。实验前需确保搭建好Hadoop 3.3.5环境、安装好Eclipse IDE &#x1f50e; 【Hadoop大数据技术】——Hadoop概述与搭建环境&#xff08;学习笔记&#xff09; 目录 &#…

Maven项目通过CentralPortal上传到中央仓库【最新版】

准备 注册一个邮箱gitee或者github账号,以gitee为例去https://central.sonatype.com/这里注册一个账号添加namespace 访问 https://central.sonatype.com/publishing/namespaces 点击 “Verify Namespace” 在gitee上创建项目 gpg 去这里 https://gnupg.org/download/i…

Android 系统的启动过程

Android 系统的启动流程&#xff1a; RomBoot&#xff08;只读存储器引导程序&#xff09;&#xff1a;这是设备上电时运行的初始软件。RomBoot执行基本的硬件初始化&#xff0c;确保硬件处于可以运行后续启动阶段的状态。这一阶段非常重要&#xff0c;因为它为整个启动过程奠定…

提升物流效率,快递平台实战总结与分享

随着电商行业的蓬勃发展&#xff0c;物流配送服务变得愈发重要。快递平台作为连接电商企业和消费者的桥梁&#xff0c;扮演着至关重要的角色。本篇博客将分享快递平台实战经验&#xff0c;总结关键要点&#xff0c;帮助物流从业者提升物流效率、优化服务质量。 ### 快递平台实…

日期与时间(Java)

文章目录 日期与时间&#xff08;Java&#xff09;一、JDK8之前的1.1 Date1.2 SimpleDateFormat1.3 Calendar 二、 JDK8之后的2.1 LocalDate、LocalTime和LocalDateTime2.2 ZoneId和ZonedDateTime2.3 Instant2.4 DateTimeFormatter2.4 Period和 Duration &#x1f389;写在最后…

第二十四天-数据可视化Matplotlib

目录 1.介绍 2.使用 1. 安装&#xff1a; 2.创建简单图表 3.图表类型 1.一共分为7类 2.变化 1.折线图 3.分布 ​编辑 1.直方图 2.箱型图 4.关联 1. 散点图&#xff1a; 2.热力图&#xff1a; 5.组成 1.饼图 2.条形图 6.分组 1.簇型散点图 2.分组条形图 3.分…

【人工智能】英文学习材料(每日一句)

#学习笔记# 目录 1.Natural Language Processing&#xff0c;NLP&#xff08;自然语言处理&#xff09; 2.Machine Learing&#xff0c;ML&#xff08;机器学习&#xff09; 3.Neural Networks&#xff08;神经网络&#xff09; 4.Deep Learing&#xff08;深度学习&#…

基于CNN多阶段图像超分+去噪(超级简单版)

这是之前的一项工作&#xff0c;非常简单&#xff0c;简单的复现了两个算法&#xff0c;然后把它们串起来了。 可执行的程序链接&#xff1a;CSDN; Github 我们分成两部分进行讲解&#xff1a; 1. 图像去噪 1.1 基本思路 图像的去噪工作基于很普通的CNN去噪&#xff0c;效…

前端学习之css选择器--基本选择器、关系选择器、属性选择器、复合选择器、伪类选择器

目录 基本选择器 结果 关系选择器 结果 父子关系 祖先后代关系 相邻兄弟关系 兄弟关系 ​编辑 属性选择器 结果 复合选择器 结果 伪类选择器 结果 伪类选择器-操作标签 结果 未访问 访问后 悬停 基本选择器 <!DOCTYPE html> <html lang"en"…

flowable快速开始

目录 创建用户并分配权限画流程图发布应用程序运行流程文档资料 创建用户并分配权限 创建两个用户 zhangsan和lisi 用于工作流的审批&#xff0c;流程如图 创建用户 分配权限&#xff0c;用于审批工作流 画流程图 点击“创建流程” 开始画图 给人事审批分配 zhangsan…

C++之类和对象(3)

目录 1. 再谈构造函数 1.1 构造函数体赋值 1.2 初始化列表 1.3 explicit 2. static成员 2.1 概念 3. 友元 3.1 友元函数 3.2 友元类 4. 内部类 5. 匿名对象 6. 拷贝对象时编译器做出的优化 1. 再谈构造函数 1.1 构造函数体赋值 class Date { public:Date(int year2024…

Linux第78步_使用原子整型操作来实现“互斥访问”共享资源

使用原子操作来实现“互斥访问”LED灯设备&#xff0c;目的是每次只允许一个应用程序使用LED灯。 1、创建MyAtomicLED目录 输入“cd /home/zgq/linux/Linux_Drivers/回车” 切换到“/home/zgq/linux/Linux_Drivers/”目录 输入“mkdir MyAtomicLED回车”&#xff0c;创建MyA…

Android分区存储到底是怎么回事

文章目录 一、Android存储结构二、什么是分区存储&#xff1f;三、私有目录和公有目录三、存储权限和分区存储有什么关系&#xff1f;四、我们应该该怎么做适配&#xff1f;4.1、利用File进行操作4.2、使用MediaStore操作数据库 一、Android存储结构 Android存储分为内部存储和…

C语言 1000内完数、素数判断

一、一个数如果恰好等于它的因子之和&#xff0c;这个数就称为“完数”。例如&#xff0c;6旳因子为1&#xff0c;2&#xff0c;3&#xff0c;而6123&#xff0c;因此6是“完数”。编程序找出1000以内的所有“完数”&#xff0c;并按照下面格式输出其因子&#xff1a;6 its fac…

java组合模式揭秘:如何构建可扩展的树形结构

组合模式&#xff08;Composite Pattern&#xff09;是一种结构型设计模式&#xff0c;它允许将对象组合成树形结构以表示整体/部分层次结构。组合模式使得客户端可以统一对待单个对象和组合对象&#xff0c;从而使得客户端可以处理更复杂的结构。 组合模式的主要组成部分包括&…

MLP-RF随机森林回归预测(matlab代码)

MLP-RF随机森林回归预测matlab代码 数据为Excel股票预测数据。 数据集划分为训练集、验证集、测试集,比例为8&#xff1a;1&#xff1a;1 模块化结构: 代码将整个流程模块化&#xff0c;使得代码更易于理解和维护。不同功能的代码块被组织成函数或者独立的模块&#xff0c;使…

copilot 很抱歉,目前无法连接到服务。请稍后重试或刷新

一、copilot的优势 微软copilot 在gpt-3基础上又加了很多新功能&#xff0c;输入进行了扩展&#xff0c;包含了语音、图片输入等&#xff0c;输出也更加丰富&#xff0c;包含了信息源、超链接、关键词提取等。最重要的是可以获得最新的消息。这个工具是学习路上的一大利器&…