vue基于Echarts、百度地图MapVGL实现可视化大屏数据展示

一、布局

可视化大屏
常见的大屏数据展示布局,一般会将地图作为整个屏幕的背景,在地图上以九宫格布局展示各类数据图表。实现这一效果可以使地图的z-index=1,在地图上的图表等z-index>1,下面会详细描述这种设计该如何实现:
在这里插入图片描述

<div style="width:100%;height:100%">
<!--最外层div要设置宽、高为100%-->
	<nav style="height: 58px;width: 100%;position: absolute;top: 0;left: 0;z-index: 20;">
		<!--顶部导航绝对定位,图层z-index=21,浮于地图上方-->
	</nav>
	<div style="position: absolute;width: 100%;height: calc(100% - 58px);top: 58px;left: 0;">
		<!--图表内容wrapper,使用绝对定位,使图表浮于地图上方,不设置图层地图可以监听到鼠标-->
		<div style="position: relative;z-index: 20;">
		<!--图表card,采用栅格化布局,card-->
		</div>
	</div>
	<div style="width: 100%; height: 100%;">
		<!--地图-->
	</div>
</div>

二、Echarts图表自适应

  1. 图表div的宽度、高度不要写死,可以使用百分比
  2. echart图表本身提供了一个resize的函数,我们只需要监听页面的resize变化以后,去执行echarts的resize方法即可重绘canvas

加载图表的组件graph.vue

<template>
    <div style="height: 100%;">
        <Spin fix v-show="loading">
                <Icon type="ios-loading" size=18 class="demo-spin-icon-load"></Icon>
                <div>加载中...</div>
        </Spin>
        <div :id="id" :data="data" style="height: 100%;"></div>
    </div>
</template>
<script>
//引入自定义主题rainbow.json
import rainbow from '../../assets/rainbow.json'
export default {
    props:["id","data"],
    data(){
        return{
            graph:null,
            loading:true,
        }
    },
    methods:{
        drawGraph(id,data){
            let _this = this;
            let myChart = document.getElementById(id);
            //自定义主题
            this.graph = this.$echarts.init(myChart,'rainbow');
            this.graph.setOption(data);
            this.loading = false;
            //浏览器窗口大小变化时触发echarts的resize函数,重新绘制canvas
            window.addEventListener("resize",function(){
                _this.graph.resize();
            });
        }
    },
    mounted(){
        this.$echarts.registerTheme("rainbow",rainbow);
        
        this.drawGraph(this.id,this.data);
    },
    beforeDestroy(){
        if(this.graph) this.graph.clear();
    },
    watch:{
        data:{
            handler(newValue,oldValue){
                this.drawGraph(this.id,newValue);
            },
            deep:true
        }
    }
}
</script>
<style>
.demo-spin-icon-load{
        animation: ani-demo-spin 1s linear infinite;
    }
    @keyframes ani-demo-spin {
        from { transform: rotate(0deg);}
        50%  { transform: rotate(180deg);}
        to   { transform: rotate(360deg);}
    }
</style>


graph.vue的使用
demo.vue

<template>
    <div class="content">
        <div class="v-card m-r-10 m-l-10">
            <h2 class="card-title">图表标题</h2>
             <graph :id="'graphId'" :data="graphOption" style="width:100%;height:100%"></graph>    
       </div>
    </div>
</template>
<script>
import graph from '../../my-components/graph.vue'
export default {
        name: 'demo',
        components:{
            graph,
        },
        data(){
        	graphOption:{}
        },
        methods: (){
        	initDemoChart(){
        	//获取图表数据,配置图表参数setOption
        		this.graphOption={
			        title: {
			          text: 'ECharts 入门示例'
			        },
			        tooltip: {},
			        legend: {
			          data: ['销量']
			        },
			        xAxis: {
			          data: ['衬衫', '羊毛衫', '雪纺衫', '裤子', '高跟鞋', '袜子']
			        },
			        yAxis: {},
			        series: [
			          {
			            name: '销量',
			            type: 'bar',
			            data: [5, 20, 36, 10, 10, 20]
			          }
			        ]
			     };
        	}
        },
        mounted () {
        	this.initDemoChart();
        },
        
        
}
</script>

三、Echarts自定义主题

大屏数据展示往往需要根据设计图自定义主题。Echarts自定义主题也十分简单,操作如下:
1.使用Echarts官网主题编辑器(https://echarts.apache.org/zh/theme-builder.html)自定义主题,下载主题json。
2.注册主题(查看官网说明)

// 假设主题名称是 "vintage"
fetch('theme/vintage.json')
  .then(r => r.json())
  .then(theme => {
    echarts.registerTheme('vintage', theme);
    var chart = echarts.init(dom, 'vintage');
  })

vuebaidumapvuemapvgl_164">四、vue-baidu-map与vue-mapvgl

vue-baidu-mapvue-mapvgl
基于 百度地图 JS API 开发百度地图mapvgl开发
可实现常见的地图信息可视化基于WebGL的地理信息可视化库,可以用来展示大量基于3D的地理信息点线面数据。解决大数据量的三维地理数据展示问题及一些炫酷的三维效果。
https://dafrok.github.io/vue-baidu-mapVue2.x (https://docs.guyixi.cn/vue-mapvgl) Vue3 (https://vue-mapvgl.guyixi.cn/)

如果要实现3D效果,或者展示大数据量的地理信息数据,可以考虑选择vue-mapvgl

五、定制个性化地图

  1. 百度地图个性化地图编辑平台(https://lbsyun.baidu.com/customv2/help.html)定制主题;
  2. 下载主题JSON并引用
    vue-mapvgl为例
<template>
    <div class="bmap-page-container">
      <el-bmap vid="bmapDemo" ref="bmapDemo" :mapStyleV2="mapStyle" :tilt="60" :heading="0" :zoom="10" :center="[120.786975, 36.943199]" class="bmap-View">
      </el-bmap>

      <div class="toolbar">
        <button @click="getMap()">get map</button>
      </div>
    </div>
  </template>

  <style>
    .bmap-demo {
      height: 300px;
    }
  </style>
   <script>
   //引入下载的地图主题JSON
     import styleJson from '../../assets/baiduMap/mapStyle.json'
     export default {
    name: 'baiduDemo',
    computed:{
      mapStyle:function(){
        let style = {
          styleJson:styleJson
        }
        return style;
      },
    }
    }
   </script>

六、常用组件库及工具

大屏数据展示组件库

  1. datav:http://datav.jiaminghi.com/

Echarts

  1. 官网:https://echarts.apache.org/zh/index.html
  2. echarts示例网站:
    http://ppchart.com
    https://madeapie.com

百度地图

  1. vue-baidu-map :https://dafrok.github.io/vue-baidu-map|
  2. vue-mapvgl:Vue2.x (https://docs.guyixi.cn/vue-mapvgl)
  3. vue-mapvgl:Vue3 (https://vue-mapvgl.guyixi.cn/)

地图可视化工具类

  1. 百度地图个性化地图编辑平台
  2. 阿里云地图选择器
  3. geoJson数据下载

http://www.niftyadmin.cn/n/5002722.html

相关文章

华为Mate 60Pro“一机难求”,预计一年出货1200万部,花粉狂欢

根据天风国际分析师郭明錤的报告显示&#xff0c;华为Mate 60 Pro自8月29日上市以来&#xff0c;需求一直保持强劲势头&#xff0c;并且预计下半年出货量将提高约20%&#xff0c;达到550-600万部。与旧款机型相比&#xff0c;华为Mate 60 Pro的需求明显更加强劲。 例如&#xf…

Linux系统中驱动面试分享

​ 1、驱动程序分为几类&#xff1f; 字符设备驱动 块设备驱动 网络设备驱动 2、字符设备驱动需要实现的接口通常有哪些 open、close、read、write、ioctl等接口。 3、主设备号与次设备号的作用 主设备号和次设备号是用来标识系统中的设备的&#xff0c;主设备号用来标识…

入选VLDB 2023! OceanBase 4.0单机分布式一体化研究成果获国际顶会认可

近日&#xff0c;国际顶级数据库学术会议 VLDB 2023 在加拿大温哥华开幕。OceanBase 研究成果论文 “OceanBase Paetica: A Hybrid Shared-nothing/Shared-everything Database for Supporting Single Machine and Distributed Cluster” 被 VLDB 2023 收录&#xff01;相继 20…

华为产业链爆发,这次是系统级的革命

华为Mate60手机爆火&#xff0c;让产业链随之振奋。我们看到&#xff0c;这种改变将是持久的、系统的。 可能在未来20年&#xff0c;这种影响会持续。 01 华为产业链有多长 客观而言&#xff0c;华为产业链可以看作是由多个领域的企业和组织组成的网络&#xff0c;其中包括半…

vue3+ts 引入@gausszhou/vue3-drag-resize-rotate报错解决办法

vue3ts 引入gausszhou/vue3-drag-resize-rotate报错: Could not find a declaration file for module gausszhou/vue3-drag-resize-rotate. D:/a2023/aigc-admin/node_modules/gausszhou/vue3-drag-resize-rotate/lib/bundle.esm.js implicitly has an any type. Try npm i --…

服务运营 | MSOR文章精选:远程医疗服务中的统计与运筹(二)

作者信息&#xff1a;王畅&#xff0c;陈盈鑫 编者按 在上一期中&#xff0c;我们分享了与远程医疗中运营管理问题相关的两篇文章。其一发表在《Stochastic Systems》&#xff0c;旨在使用排队论与流体近似的方法解决远程医疗中资源配置的问题&#xff1b;其二发表在《Managem…

行测图形推理规律(一)元素组成

题库&#xff1a;粉笔网题库 (fenbi.com) 不知道和测评的行测题库是不是一样的&#xff0c;但是总结的规律应该是一样的。 规律并不唯一&#xff0c;题库的答案也只是参考答案&#xff0c;切勿当杠精&#xff0c;你觉得你的规律更合适就别管。本人所归纳的规律仅代表本人想法…

MySQL——连接查询与子查询

一、连接查询 单表查询&#xff1a;在一张表当中查询数据&#xff0c;叫做单表查询。 连接查询&#xff0c;结合俩&#xff08;多&#xff09;张表&#xff0c;在俩张&#xff08;多&#xff09;表当中查询数据&#xff0c;在一张表当中查询一部分&#xff0c;在另一张表当中…