Vue框架实现百度地图热力图(简单易懂,学了就会)
2020-05-10 04:20
2331 查看
实现百度地图热力图(Vue框架)
最近比赛项目有一个需求是实现前端的展示,展示热力图,费了一些功夫才弄好,记录一下实现的过程。如果想调用百度地图API,首先你需要得在官网注册一个帐号然后申请一个密钥,注册网:http://lbsyun.baidu.com/index.php?title=lbscloud
直接上代码,需要在项目中的index.html中添加如下代码
<script src="http://api.map.baidu.com/api?v=2.0&ak=密匙"></script>
然后再构建热力图
<template lang="html"> <div id="load"> <!--存放百度地图容器--> <div id="container"></div> </div> </template> <script> export default { data() { return { // 热力图的点数据,lng:点的经度 点的lat纬度 count:点的热力程度 points: [ {"lng":123.418261,"lat":41.921984,"count":50}, {"lng":123.423332,"lat":41.916532,"count":51}, {"lng":123.419787,"lat":41.930658,"count":15}, {"lng":123.418455,"lat":41.920921,"count":40}, {"lng":123.418843,"lat":41.915516,"count":100}, {"lng":123.42546,"lat":41.918503,"count":6}, {"lng":123.423289,"lat":41.919989,"count":18}, {"lng":123.418162,"lat":41.915051,"count":80}, {"lng":123.422039,"lat":41.91782,"count":11}, {"lng":123.41387,"lat":41.917253,"count":7}, {"lng":123.41773,"lat":41.919426,"count":42}, {"lng":123.421107,"lat":41.916445,"count":4}, {"lng":123.417521,"lat":41.917943,"count":27}, {"lng":123.419812,"lat":41.920836,"count":23}, {"lng":123.420682,"lat":41.91463,"count":60}, {"lng":123.415424,"lat":41.924675,"count":8}, {"lng":123.419242,"lat":41.914509,"count":15}, {"lng":123.422766,"lat":41.921408,"count":25}, {"lng":123.421674,"lat":41.924396,"count":21}, {"lng":123.427268,"lat":41.92267,"count":1}, {"lng":123.417721,"lat":41.920034,"count":51}, {"lng":123.412456,"lat":41.92667,"count":7}, {"lng":123.420432,"lat":41.919114,"count":11}, {"lng":123.425013,"lat":41.921611,"count":35}, {"lng":123.418733,"lat":41.931037,"count":22}, {"lng":123.419336,"lat":41.931134,"count":4}, {"lng":123.413557,"lat":41.923254,"count":5}, {"lng":123.418367,"lat":41.92943,"count":3}, {"lng":123.424312,"lat":41.919621,"count":100}, {"lng":123.423874,"lat":41.919447,"count":87}, {"lng":123.424225,"lat":41.923091,"count":32}, {"lng":123.417801,"lat":41.921854,"count":44}, {"lng":123.417129,"lat":41.928227,"count":21}, {"lng":123.426426,"lat":41.922286,"count":80}, {"lng":123.421597,"lat":41.91948,"count":32}, {"lng":123.423895,"lat":41.920787,"count":26}, {"lng":123.423563,"lat":41.921197,"count":17}, {"lng":123.417982,"lat":41.922547,"count":17}, {"lng":123.426126,"lat":41.921938,"count":25}, {"lng":123.42326,"lat":41.915782,"count":100}, {"lng":123.419239,"lat":41.916759,"count":41}, {"lng":123.417185,"lat":41.929123,"count":11}, {"lng":123.417237,"lat":41.927518,"count":9}, {"lng":123.417784,"lat":41.915754,"count":47}, {"lng":123.420193,"lat":41.917061,"count":52}, {"lng":123.422735,"lat":41.915619,"count":100}, {"lng":123.418495,"lat":41.915958,"count":46}, {"lng":123.416292,"lat":41.931166,"count":9}, {"lng":123.419916,"lat":41.924055,"count":8}, {"lng":123.42189,"lat":41.921308,"count":11}, {"lng":123.413765,"lat":41.929376,"count":3}, {"lng":123.418232,"lat":41.920348,"count":50}, {"lng":123.417554,"lat":41.930511,"count":15}, {"lng":123.418568,"lat":41.918161,"count":23}, {"lng":123.413461,"lat":41.926306,"count":3}, {"lng":123.42232,"lat":41.92161,"count":13}, {"lng":123.4174,"lat":41.928616,"count":6}, {"lng":123.424679,"lat":41.915499,"count":21}, {"lng":123.42171,"lat":41.915738,"count":29}, {"lng":123.417836,"lat":41.916998,"count":99}, {"lng":123.420755,"lat":41.928001,"count":10}, {"lng":123.414077,"lat":41.930655,"count":14}, {"lng":123.426092,"lat":41.922995,"count":16}, {"lng":123.41535,"lat":41.931054,"count":15}, {"lng":123.413022,"lat":41.921895,"count":13}, {"lng":123.415551,"lat":41.913373,"count":17}, {"lng":123.421191,"lat":41.926572,"count":1}, {"lng":123.419612,"lat":41.917119,"count":9}, {"lng":123.418237,"lat":41.921337,"count":54}, {"lng":123.423776,"lat":41.921919,"count":26}, {"lng":123.417694,"lat":41.92536,"count":17}, {"lng":123.415377,"lat":41.914137,"count":19}, {"lng":123.417434,"lat":41.914394,"count":43}, {"lng":123.42588,"lat":41.922622,"count":27}, {"lng":123.418345,"lat":41.919467,"count":8}, {"lng":123.426883,"lat":41.917171,"count":3}, {"lng":123.423877,"lat":41.916659,"count":34}, {"lng":123.415712,"lat":41.915613,"count":14}, {"lng":123.419869,"lat":41.931416,"count":12}, {"lng":123.416956,"lat":41.925377,"count":11}, {"lng":123.42066,"lat":41.925017,"count":38}, {"lng":123.416244,"lat":41.920215,"count":91}, {"lng":123.41929,"lat":41.915908,"count":54}, {"lng":123.422116,"lat":41.919658,"count":21}, {"lng":123.4183,"lat":41.925015,"count":15}, {"lng":123.421969,"lat":41.913527,"count":3}, {"lng":123.422936,"lat":41.921854,"count":24}, {"lng":123.41905,"lat":41.929217,"count":12}, {"lng":123.424579,"lat":41.914987,"count":57}, {"lng":123.42076,"lat":41.915251,"count":70}, {"lng":123.425867,"lat":41.918989,"count":8} ], map: '',// 保存地图实例 centerLng: '123.418261', // 经度 centerLat: '41.921984', // 纬度 heatmapOverlay: {},// 热力图覆盖物 } }, methods: { // 创建和初始化地图函数 initMap(){ this.createMap();// 创建地图 this.initHeatMap();// 添加热力图覆盖物 }, // 方法 - 创建地图 createMap(){ // 在百度地图容器中创建地图实例 let map = new BMap.Map("container"); // 将map变量存储在全局 this.map = map; // 设定地图的中心点和坐标 let point = new BMap.Point(this.centerLng, this.centerLat); // 设置中心点坐标和地图级别 this.map.centerAndZoom(point, 15); // 允许滚轮缩放 this.map.enableScrollWheelZoom(point, 15); // 添加左上角缩放比例尺(offset: new BMap.Size(0, 0)为比例尺的坐标位置) var opts = {offset: new BMap.Size(10, 10)} this.map.addControl(new BMap.NavigationControl(opts)); // 设置地图默认缩放比例 this.map.setZoom(15); }, // 方法 - 添加热力图覆盖物 initHeatMap () { this.heatmapOverlay = new BMapLib.HeatmapOverlay({ // 热力图的每个点的半径大小 'radius': BMAP_POINT_SIZE_SMALL * 4, // 热力的透明度0~1 'opacity': 0.8, // 其中 key 表示插值的位置0~1,value 为颜色值 'gradient': { 0:'rgb(102, 255, 0)', .5:'rgb(255, 170, 0)', 1:'rgb(255, 0, 0)' } }) // 清除图层(每次重新调用需要清除上一个覆盖物图层) this.map.clearOverlays(); // 添加热力覆盖物 this.map.addOverlay(this.heatmapOverlay); this.heatmapOverlay.setDataSet({data: this.points, max: 100}); // 显示热力图,隐藏为this.heatmapOverlay.hide(); this.heatmapOverlay.show(); } }, mounted() { // 创建和初始化地图函数 this.initMap(); } } </script> <style lang="less"> #load { width: 100%; height: 100%; } #container { width: 100%; height: 100%; border: #ccc solid 1px; } </style>
得到如下效果图
看到效果是不是很炫酷,在如上代码中若要改变默认的视图初始化位置,可以修改:
centerLng: ‘123.418261’ centerLat: ‘41.921984’
若要修改热力图位置以及热度可以修改所有的:
“lng”:123.426426,“lat”:41.922286,“count”:80
将以上几个参数关联到数据库,即可实现实时热力图。
3号深海鱼,强势悍跳预言家 原创文章 7获赞 4访问量 1462 关注 私信相关文章推荐
- 实现一个简单的类 Vue 框架(二) —— 数据的绑定之修改可监听的数据绑定方法
- 利用lay-ui结合ajax实现分页功能(不借助框架,简单易懂)
- VUE+SSM 以VUE做项目前端,SSM做后端框架,难点在于数据的传输处理,下面我记录一下一个简单的登录退出功能的实现,如果有缺陷还请大佬指出,个人菜鸟 一个,正在学习当中,以此记录一下自己的学习
- 用vue写一个商城的上货组件(简单易懂版,50行js实现效果)
- vue响应式更新机制及不使用框架实现简单的数据双向绑定问题
- 理解vue实现原理,实现一个简单的Vue框架
- Java实现的网络爬虫程序,简单易懂无框架(我的网络大作业)
- vue实现简单的MVVM框架
- 【学习笔记】剖析MVVM框架,简单实现Vue数据双向绑定
- 实现一个简单的类 Vue 框架(一) —— 数据的绑定之简单粗暴方法
- 基于vue实现一个简单的MVVM框架
- vue中实现简单的todolist功能、todolist组件拆分以及todolist的删除功能
- 实现一个类 Vue 的 MVVM 框架
- Spring+Netty4实现的简单通信框架
- Thinkphp5框架简单实现钩子(Hook)行为的方法示例
- 基于akka与scala实现一个简单rpc框架
- jquery实现简单易懂的图片展示小例子
- Vue.js框架简单读取数据库信息并渲染完成news新闻文章列表以及detail详情页功能(小试牛刀)
- python:web后台框架简单实现
- 简单实现vue验证码60秒倒计时功能