vue -web引入百度地图

本篇文章是笔者记录:从零到实现的全部过程

先看效果图,是否是你想要的效果,两张不同缩放得到的效果图,目录有最终的效果图

要想实现如图所示,必须满足以下几个条件:

  1. 是否已有百度地图的api的ak密钥;
  2. 组件是否准备好;

目录

 如何获取百度地图的api的ak密钥

第一步:要有百度账号

第二步:在“百度开放平台”创建ak

第一步:跳转该页面

 第二步:创建应用

第三步:下载 vue-baidu-map

第四步:在main.js文件中导入,并全局定义

第五步:组件中使用

第六步:总结

第七步:完善地图样式

去掉百度地图LOGO

地图加标识,标识上加超链接跳转

添加控件

效果图

20220425 回答如何解决BMap问题

#### 全部代码


 如何获取百度地图的api的ak密钥

第一步:要有百度账号

笔者这里是用QQ号作为百度账号登录的

第二步:在“百度开放平台”创建ak

百度开放平台  点击进入 教程如下:

第一步:跳转该页面

 红色框:代表“创建应用”成功后,ak显示的地方,在这里可以看到并复制

蓝色框:代表我们创建的应用是“浏览器端”,一般选择“浏览器端”就可以了

 第二步:创建应用

点击“创建应用”,这里主要讲“浏览器端”,

 点击“提交”,会自动跳转该页面

 这里只需要复制  ak 就好!!!记住这个地方,后面会用到ak

第三步:下载 vue-baidu-map

命令:  npm install vue-baidu-map --save

第四步:在main.js文件中导入,并全局定义

import BaiduMap from 'vue-baidu-map'

Vue.use( BaiduMap, { ak : '上面生成的ak' } )

第五步:组件中使用

<tempate>
    <div class='dv'>
        <baidu-map class='bm-view' @ready='init'></baidu-map>
    </div>
</template>
export default {
    name:'',
    data(){
        return {  }
    },
    methods:{
        init({BMap, map}){
            this.map = map
            var point = new BMap.Point(108.910752, 34.237372)  //设置城市经纬度坐标
            map.centerAndZoom(point, 15)    //
            map.setCurrentCity('西安')   // 设置地图显示的城市 此项是必须设置的
            map.enableScrollWheelZoom(true)    //鼠标滚动缩放
            
            #for(var i in mapdata) {
            #    var pt = new BMap.Point(mapdata[i].longitude, mapdata[i].latitude )   //经纬度
            #    var myicon = new BMap.Icon('图片路径', new BMap.Size(32, 32))   //设置对应图片和图片大小
            #    var marker2 = new BMap.Marker(pt, { icon: myicon })  //创建标注
            #    map.addOverLay(marker2)
            #}
        }
    },
    mounted(){
        this.init()
    }

}
<style>
    .dv { width: 500px; height: 500px; }
</style>

到这里基本结束了,亲测有效!!

第六步:总结

这个只是简单的将其显示出来,地图样式,笔者还在调试,等待调试成功,会继续完善本篇文章。

任务需求需要加入地图,笔者一点一点查资料自己摸索,终于有了一大步的进步,为了记录和方便同行初学者走弯路,专写这篇文章,希望对你们有用,谢谢。

该片文章记录从如何生成ak到如何应用,再到如何实现。

第七步:完善地图样式

在组件中引入json样式文件 import custom_map_config from '样式文件路径'自定义百度地图样式 下载即可,

在第五步的代码中加入 map.setMapStyle( { styleJson: custom_map_config } )这样就可以改变地图样式,注意:新版本个性样式地图使用:map.setMapStyleV2

20210810,留言:如果想去掉百度地图的LOGO,可以看看这篇文章只需要两行代码就可以实现如何去掉百度地图LOGO

地图加标识,标识上加超链接跳转

第一步:找到地图组件

第二步:找到加载地图的函数

第三步:在函数中继续写入,如一下代码:

var data_info = [
                [110.229321,25.227083,"地址:广西省桂林市七星区岭脚底<h4><a target='_blank' href='https://www.baidu.com/' style='color:blue;'>*****</a></h4>"],
                [104.979273,25.096498,"地址:贵州省黔西南布依族自治州水牛湾 <h4><a target='_self' href='https://www.baidu.com/' style='color:blue;'>****</a></h4>"],
                [112.60061,37.74101,"地址:山西省太原市小店区经济开发区 <h4><a target='_blank' href='https://www.baidu.com/' style='color:blue;'>****</a></h4>"],
                [109.944203,40.764037,"地址:内蒙古省包头市石拐区二道坝沟 <h4><a target='_blank' href='https://www.baidu.com/' style='color:blue;'>***</a></h4>"],
                [126.448706,45.959158,"地址:黑龙江省哈尔滨市呼兰区新立屯 <h4><a target='_self' href='https://www.baidu.com/' style='color:blue;'>****</a></h4>"],
            ];
            var opts = {
                min_width : 250,     // 信息窗口zuixiao宽度
                min_height: 80,     // 信息窗口高度
                title : "详细信息" , // 信息窗口标题
                enableMessage:true//设置允许信息窗发送短息
            };
            for(var i=0;i<data_info.length;i++){
                var marker = new BMap.Marker(new BMap.Point(data_info[i][0],data_info[i][1]));  // 创建标注
                var content = data_info[i][2];
                map.addOverlay(marker);               // 将标注添加到地图中
                addClickHandler(content,marker);
            }
            function addClickHandler(content,marker){
                marker.addEventListener("click",function(e){
                    openInfo(content,e)}
                );
            }
            function openInfo(content,e){
                var p = e.target;
                var point = new BMap.Point(p.getPosition().lng, p.getPosition().lat);
                var infoWindow = new BMap.InfoWindow(content,opts);  // 创建信息窗口对象 
                map.openInfoWindow(infoWindow,point); //开启信息窗口
            }

data_info中html代码就是实现超链接

添加控件

//向地图中添加缩放控件
            var ctrl_nav = new BMap.NavigationControl({anchor:CUSTOM_MAP_CONFIG,type:CUSTOM_MAP_CONFIG});
            map.addControl(ctrl_nav);
            //向地图中添加缩略图控件
            var ctrl_ove = new BMap.OverviewMapControl({anchor:CUSTOM_MAP_CONFIG,isOpen:1});
            map.addControl(ctrl_ove);
            //向地图中添加比例尺控件
            var ctrl_sca = new BMap.ScaleControl({anchor:CUSTOM_MAP_CONFIG});
            map.addControl(ctrl_sca);

效果图

20220425 回答如何解决BMap问题

今日来解决下大家遇到的问题

报错:[Vue warn]: Error in mounted hook: "TypeError: Cannot read properties of undefined (reading 'BMap')"

这里小编自己重启一个项目看看是否会发生和大家一样问题,并找出根源。笔者这里自己重新创建一个项目运行,无问题。

现将所有代码放出来,

全部代码

main.js

在main.js文件中
import Vue from 'vue'
import App from './App.vue'
import router from './router'
import store from './store'
import BaiduMap from 'vue-baidu-map'

Vue.config.productionTip = false
Vue.use(BaiduMap, {
  ak: '你申请的key'
})

new Vue({
  router,
  store,
  render: h => h(App)
}).$mount('#app')

test.vue

<template>
    <div id="test">
        <baidu-map class="bm-view" @ready="init"></baidu-map>
    </div>
</template>

<script>
// const CUSTOM_MAP_CONFIG = require("../../assets/json/custom_map_config.json");
// const CUSTOM_MAP_CONFIG = require("../../assets/json/custom_map_config01.json");
// const CUSTOM_MAP_CONFIG = require("../../assets/json/custom_map_config02.json");
const CUSTOM_MAP_CONFIG = require("../../assets/json/custom_map_config03.json");
export default {
    name: 'Home',
    components: {

    },
    data(){
        return {
            
        }

    },
    methods:{
        init({BMap, map}){
            this.map = map
            var point = new BMap.Point(108.953723, 34.276202)  //设置城市经纬度坐标
            // var cityCtrl = new BMap.CityListControl()    //城市下来框选择定位
            // map.addControl(cityCtrl)
            // var locationCtrl = new BMap.LocationControl()
            map.centerAndZoom(point, 5)    //
            map.setCurrentCity('西安')   // 设置地图显示的城市 此项是必须设置的
            map.enableScrollWheelZoom(true)    //鼠标滚动缩放
            // map.setHeading(60) //设置地图旋转角度
            // map.setTilt(73)   //设置地图倾斜角度
            map.setMapStyle({styleJson: CUSTOM_MAP_CONFIG})    //导入主题样式

            var data_info = [
                [110.229321,25.227083,"地址:广西省桂林市七星区<h4><a target='_blank' href='http://000.00.00.000:49151' style='color:blue;'>AAAA</a></h4>"],
                [104.979273,25.096498,"地址:贵州省黔西南布依族自治州<h4><a target='_self' href='http://000.00.00.000:49152' style='color:blue;'>BBB</a></h4>"],
                [112.60061,37.74101,"地址:山西省太原市小店区经济开发区 <h4><a target='_blank' href='http://000.00.00.000:49153' style='color:blue;'>CCC</a></h4>"],
                [109.944203,40.764037,"地址:内蒙古省包头市石拐区<h4><a target='_blank' href='http://000.00.00.000:49154' style='color:blue;'>DDDD</a></h4>"],
                [126.448706,45.959158,"地址:黑龙江省哈尔滨市呼兰区新立屯 <h4><a target='_self' href='http://000.00.00.000:49100' style='color:blue;'>EEEE</a></h4>"],
                [96.448706,30.959158,"地址:黑龙江省哈尔滨市呼兰区新立屯 <h4><a target='_blank' href='http://000.00.00.000:49156' style='color:blue;'>FFF</a></h4>"],
            ];
            var opts = {
                min_width : 250,     // 信息窗口zuixiao宽度
                min_height: 80,     // 信息窗口高度
                title : "详细信息" , // 信息窗口标题
                enableMessage:true//设置允许信息窗发送短息
            };
            for(var i=0;i<data_info.length;i++){
                var marker = new BMap.Marker(new BMap.Point(data_info[i][0],data_info[i][1]));  // 创建标注
                var content = data_info[i][2];
                map.addOverlay(marker);               // 将标注添加到地图中
                addClickHandler(content,marker);
            }
            function addClickHandler(content,marker){
                marker.addEventListener("click",function(e){
                    openInfo(content,e)}
                );
            }
            function openInfo(content,e){
                var p = e.target;
                var point = new BMap.Point(p.getPosition().lng, p.getPosition().lat);
                var infoWindow = new BMap.InfoWindow(content,opts);  // 创建信息窗口对象 
                map.openInfoWindow(infoWindow,point); //开启信息窗口
            }
            
            //向地图中添加缩放控件
            var ctrl_nav = new BMap.NavigationControl({anchor:CUSTOM_MAP_CONFIG,type:CUSTOM_MAP_CONFIG});
            map.addControl(ctrl_nav);
            //向地图中添加缩略图控件
            var ctrl_ove = new BMap.OverviewMapControl({anchor:CUSTOM_MAP_CONFIG,isOpen:1});
            map.addControl(ctrl_ove);
            //向地图中添加比例尺控件
            var ctrl_sca = new BMap.ScaleControl({anchor:CUSTOM_MAP_CONFIG});
            map.addControl(ctrl_sca);

            // map.addEventListener('click',function(e){
            //     console.log(e);
                // alert('经度:' + e.point.lng + '\n纬度:' + e.point.lat)
                // window.location.href = 'http://114.116.211.121:49151'
        },
        
    },
    mounted(){
        this.init()
    }
}
</script>
<style>
    #test { height: 98vh; width: 100%; background-color: rgb(192, 228, 127); }
    .bm-view { width: 100%; height: 100%; }
</style>

  • 17
    点赞
  • 77
    收藏
    觉得还不错? 一键收藏
  • 38
    评论
UniApp 是一款基于 Vue.js 的跨平台应用开发框架,它允许开发者使用一套代码编写同时兼容 iOS、Android、Web 的应用。在 UniApp 中,集成百度地图可以通过官方提供的 UniMap 组件轻松实现。以下是如何在 UniApp 中使用 UniMap 实现百度地图的基本步骤: 1. **安装依赖**: 首先确保你已经在项目中安装了 Vue CLI 或者使用了 UniApp 的脚手架工具。在项目中安装 UniMap 组件: ``` npm install @dcloudio/uni-map --save ``` 2. **引入组件**: 在 `.vue` 文件或全局样式中引入 UniMap 组件: ```html <template> <uni-map :center="mapCenter" :zoom="zoomLevel"> <!-- 更多地图配置 --> </uni-map> </template> <script> import { UniMap } from '@dcloudio/uni-map'; export default { components: { UniMap }, data() { return { mapCenter: [116.404, 39.9], // 北京坐标 zoomLevel: 13, // 显示缩放级别 }; }, }; </script> ``` 3. **配置地图属性**: `uni-map` 组件支持多种地图样式和交互选项,如设置地图类型(如普通地图、卫星地图、路线图)、添标记点、路径规划等。你可以在标签中配置这些属性。 4. **事件监听**: UniMap 支持地图事件,如 `onLocationChange`(位置变化)、`onMarkerClick`(标记点击)等,通过 `v-on` 或者 `@` 来绑定事件处理函数。 ```html <uni-map @locationChange="handleLocationChange" @markerClick="handleMarkerClick"> <!-- ... --> </uni-map> <script> methods: { handleLocationChange(e) { console.log('位置变化', e); }, handleMarkerClick(e) { console.log('标记被点击', e); }, } </script> ```

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值