当前位置: 首页 > 科技观察

从零开始开发可视化大屏制作平台

时间:2023-03-15 10:41:48 科技观察

H5-Dooring,几个月前开源的H5页面制作平台,得到了很多热烈的反馈和交流。按照笔者之前的计划,我们又做了一个可视化大屏编辑器DeviceV6.Dooring。接下来笔者就带大家看看我们的方案设计和技术实现。你将获得可视化大屏产品设计思路、主流可视化图表库技术选型、大屏编辑器设计思路、大屏可视化编辑器。SchemaDesign用户数据自主探索介绍之前,先来看看效果展示。效果预览方案实现了大屏产品设计思路的可视化。目前,很多企业或多或少都面临着“信息孤岛”的问题。各系统平台之间的通信数据无法交换和共享,难以实现数据的综合分析和实时呈现。与传统的图表、数据仪表盘人工定制相比,大屏可视化生产平台的出现,打破了定制开发与数据分散的对冲问题。通过数据采集、清洗、分析,直观的实时数据可视化,多方位、多角度、全景展示各项指标,实时监控,动态一目了然。针对以上需求,我们设计了一套可视化大屏解决方案,具体包括以下几点:上图是笔者4个月前设计的基础草图,后续会持续更新。通过以上的设计分解,我们基本可以搭建一个可以自己定制的数据大屏。主流可视化和图表库技术选型目前笔者研究的已知主流可视化库有:echart,一个老牌的基于JavaScript的开源可视化图表库,D3.js,一个数据驱动的可视化库,不需要其他任何框架在现代浏览器中独立运行,它结合了强大的可视化组件来驱动DOM操作antv包含一套完整的可视化组件系统Chart.js基于HTML5的简单易用的JavaScript图表库metrics-graphics建立在D3之上可视化库针对时间序列数据的可视化和布局进行了优化C3.js通过包装构建整个图表所需的代码,可以轻松生成基于D3的图表。我们可以使用以上任意一个库来实现我们的可视化大屏,大家可以根据自己的喜好来选择。大屏编辑器的设计思路通过上面的分析,我们知道大屏编辑器需要一个编辑器核心,主要包括以下几个部分:组件库拖拽(自由拖拽、参考线、自动提示)属性编辑器canvasrenderer如下图所示:我们可以使用组件库中的任何组件封装方式(react/vue等)。这里采用H5-Dooring的可视化构件设计方法对构件模型进行优化优化。设计。类似代码如下:import{Chart}from'@antv/f2';importReact,{memo,useEffect,useRef}from'react';importstylesfrom'./index.less';import{IChartConfig}from'./schema';constXChart=(props:IChartConfig)=>{const{data,color,size,paddingTop,title}=props;constchartRef=useRef(null);useEffect(()=>{constchart=newChart({el:chartRef.当前||未定义,pixelRatio:window.devicePixelRatio,//指定分辨率});//step2:处理数据constdataX=data.map(item=>({...item,value:Number(item.value)}));//step2:加载数据源chart.source(dataX);//Step3:创建图形语法,绘制直方图,通过genre和sold两个属性确定图形的位置。Genre映射到x轴,sold映射到y轴chart.interval().position('name*value').color('name');//Step4:renderchartchart.render();},[data]);return({title}

);};exportdefaultmemo(XChart);上面只是一个简单的例子,更复杂的业务需要我们往往做更多的控制,比如动画(animation)、事件(event)、数据获取(datainject)等。组件拖动可以使用已有的Dragable等插件,您还可以使用H5-Dooring的智能网格拖放。这里我选择自由拖拽实现。现有的有:rc-dragsortablejsreact-dndreact-dragablevue-dragable等具体拖拽展示流程如下:具体拖拽流程为:使用H5dragableAPI拖拽左侧组件(组件数据)放入目标容器(targetBox),监听拖拽结束事件,获取拖拽事件传递过来的数据,渲染出真正的可视化组件。载入、schema注入编辑面板、编辑面板渲染组件属性编辑器拖拽、属性修改、更新预览、发布组件schema引用DooringDSL设计可视化大屏数据自主探索目前我们实现的构建平台可以静态设计数据源,也可以注入第三方接口,如下:调用内部接口实时获取数据。这一块在可视化监控平台上有很多场景都会用到。方法如下:参数(params)编辑区可以自定义界面参数。代码编辑器作者这里推荐两款,大家可以选择:react-monaco-editorreact-codemirror2使用上面其中一款来实现迷你版的vscode,大家也可以试试。辅助功能可视化一键截屏一键截屏功能还是采用了H5-Dooring的快捷截屏方案,主要用于大屏分享、海报制作等需求,我们可以使用以下任意一个组件来实现:dom-to-imagehtml2canvasundoredo对于undo和redo功能,我们可以使用现有的库如react-undo,也可以自己实现。实现原理:有点像链表。我们将每个状态存储在一个数组中,通过指针实现撤销和重做功能。如果为了更健壮,我们可以设计一套“状态淘汰机制”,设置最多可以保留的状态数,以及之前的自动淘汰(删除,调出一个更大的栈)。这样可以避免大量复杂的操作状态存储,节省浏览器内存。Ruler参考线Ruler和参考线这里是我们自己实现的,缩放后参考线的动态收缩是通过动态dom渲染实现的。核心实现方案如下:arr.forEach(el=>{letdom=[...Array.from(el.querySelectorAll('.calibrationNumber'))][0]asHTMLElement;if(dom){dom.style.transform=`translate3d(-4px,-8px,0px)scale(${(multiple+0.1).toFixed(1,)})`;}});详细源码参考:H5-Dooring|参考线设计源码后期规划最近我们主要方向是H5-Dooringeditor2.0的开发和可视化大屏搭建平台的升级优化后续会出在线版demo,欢迎大家玩。下精彩3D可视化组件设计方案数据可视化监控平台设计可视化大屏数据治理与实时数据呈现H5-Dooring2.0版本技术分享