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

2024-06-04 7344阅读

一、引言

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

二、技术选型

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

 小程序体验地址(已上线):

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

 效果图如下:

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

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

三、实现过程

  1. 安装vue-baidu-map插件

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

 

bash复制代码

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

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

 

html复制代码

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

3. 添加定位点标记与遮罩物

通过标签添加定位点标记,并绑定位置信息:

 

html复制代码

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

同时,通过标签添加信息窗口,用于显示详细地址:

 

html复制代码

{{locName}}

这里,: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/base
 https://lbsyun.baidu.com/cms/jsapi/reference/jsapi_reference.html
 #安装vue-baidu-map插件
 npm install vue-baidu-map --save
        
        
            
            
                
                
                    {{locName}}
                
            
        
HTML代码实现部分
复制代码

    
        
        
            
            
                
                
                    {{locName}}
                
            
        
        
    


    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 = this
                console.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
            },
        }
    }


    .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;
    }

四、总结与展望

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

 小程序体验地址(已上线):

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

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

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

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

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


    免责声明:我们致力于保护作者版权,注重分享,被刊用文章因无法核实真实出处,未能及时与作者取得联系,或有版权异议的,请联系管理员,我们会立即处理! 部分文章是来自自研大数据AI进行生成,内容摘自(百度百科,百度知道,头条百科,中国民法典,刑法,牛津词典,新华词典,汉语词典,国家院校,科普平台)等数据,内容仅供学习参考,不准确地方联系删除处理! 图片声明:本站部分配图来自人工智能系统AI生成,觅知网授权图片,PxHere摄影无版权图库和百度,360,搜狗等多加搜索引擎自动关键词搜索配图,如有侵权的图片,请第一时间联系我们,邮箱:ciyunidc@ciyunshuju.com。本站只作为美观性配图使用,无任何非法侵犯第三方意图,一切解释权归图片著作权方,本站不承担任何责任。如有恶意碰瓷者,必当奉陪到底严惩不贷!

    目录[+]