可视化大屏开发,知道了这些经验以及解决方案,效率至少提升2倍!(完结篇)

大家好,我是日拱一卒的攻城师不浪,专注可视化、数字孪生、前端、nodejs、AI学习、GIS等学习沉淀,这是2024年输出的第16/100篇文章;

前言

之前写了两篇可视化大屏开发的经验总结,小伙伴们反应还不错。

最近,总会听到身边的开发同事抱怨:现在干的真没意思,每天就是做一个无情的crud搬运机器。

是啊,每天重复的做一些无聊的事情,时间久了,自己都麻木了。

那能不能去自己主动寻找一些挑战呢,例如如何能把目前的开发需求快速的实现,那剩余的时间是不是就能用来愉快的摸鱼了呢。

日常工作中,多积累,多思考,多总结

可视化大屏,提高效率我认为目前只有2个途径:

  1. 低代码:只是目前市面上可用的产品很少,一些相对出色的产品都需要收费。

    有条件的公司可以直接买来用,用的时候让出色的工程师去基于开源项目进行二开,不断的去模仿研究优秀的技术解决方案,打造自己的技术产品。

  2. 封装组件库,多用优秀开源库:把常用组件的业务逻辑进行封装,UI可配置。一些比较成熟的开源库收集用起来。

基于以上,针对不同项目的业务需求拿出最快和最优解!

这篇文章将对可视化大屏系列做一个完结,主要是对大屏开发常用到的资料和框架进行整合,以及多个特效组件封装等内容。

GIS地图框架推荐

Turf.js

Turf: 地理空间分析库,处理各种地图算法,推荐做GIS业务的可以用起来,非常强大且方便。

【中文地址】:https://turfjs.fenxianglu.cn/

openlayers

openlayers:开源免费,支持渲染二维GIS,不支持三维渲染,支持Google MapsYahoo Map、微软Virtual Earth等资源,并且可以通过WMS服务调用其他服务器上的空间数据,通过WFS服务调用空间服务。

也支持渲染国内厂商地图,例如:天地图高德等,也支持叠加效果相对较好的mapbox瓦片地图

大屏开发中一些地图交互,openlayers都能支持,例如地图放大、缩小、平移、打点、路径规划、地点查询、选取面、选取线、要素选择、图层叠加等诸多功能。

【我的开源】(vue3+vite+ol):https://github.com/tingyuxuan2302/openlayers-learning

【英文官网】:https://openlayers.org/
【中文官网】:https://openlayers.vip/

mapbox

mapbox:一个功能强大且具有吸引力的地图平台,它提供了高质量的地图数据、多种样式选择和高级功能,如动态地图样式3D效果,并支持地图主题定制化

Mapbox适合那些对地图视觉效果有较高要求,或者需要与Mapbox的其他服务(如数据可视化、位置分析等)集成的项目。

使用Mapbox,访问量大的话可能触发收费,它每天会有一个免费的流量额度。

Mapbox的学习成本相对较高,如果真想发挥它的优势,还是需要一定的成本的。最佳适用场景是适合需要高度定制化地图和强大地理数据处理能力的项目。

【官网地址】:https://www.mapbox.com/

cesiumjs

cesiumjs:一个强大的二三维都支持的GIS开源框架,可用于创建3D地球地图,支持广泛的地理空间数据格式。高性能,支持复杂GIS数据分析演示。

框架底层是WebGL渲染,能够渲染复杂3D场景,支持3D模型加载,支持高度定制化地图样式,拥有丰富且庞大的API接口,能够与threejs配合使用,免费开源!

【我的开源】:https://github.com/tingyuxuan2302/cesium-vue3-vite
【预览地址】:www.brown77.cn:3389
【cesium组件库】:https://github.com/zouyaoji/vue-cesium
【cesium官网】:https://cesium.com/

视频预览

开源:30个cesium场景效果大全

leaflet

leaflet:一个轻量级的JavaScript库,用于在网页上创建交互式地图。它以其简洁的API、易用性以及对移动设备的友好支持而广受欢迎。

如果是GIS地图应用新手,而且业务需求对地图要求不高的话,建议先上手leaflet会更容易些。

优点:易上手,文件体积小,所以加载速度很快,周边生态也很完善,完全开源,无需付费。

缺点:不支持3D,高级GIS功能不太好实现。

【官网地址】:https://leafletjs.com/

国内厂商

如果甲方允许使用国内厂商地图的话,那肯定优先选择国内厂商啊,毕竟全是中文,而且文档也特别适合国人阅读。

高德地图百度地图天地图等,使用起来也非常方便。

我个人的话,还是比较推荐高德地图,UI设计高大上、API丰富,非常好用!

大屏常用组件封装

数字翻牌器

TODO:gif

number-flip:数字翻牌器有很多种类,今天为大家推荐一个开源库,然后我基于这个开源库用vue3进行了二次封装,可以直接拿去用。

<template><div v-if="to" :id="nodeId" class="count-to"><span class="num count-color"></span><span class="num count-color"><slot name="unit"></slot></span></div><!-- fix flip插件数字为0的时候不显示 --><span v-else-if="to == 0 || !to" class="num_0 count-color">{{ 0 }}</span>
</template><script setup name='count-to'>
import uniqueId from 'lodash/uniqueId'
import { nextTick, onMounted, onUnmounted, onUpdated, ref, watch } from 'vue'
import { Flip } from 'number-flip'const props = defineProps({// 翻动起始数值from: {type: [String, Number],default: 0},// 最终展示数值to: [String, Number],// 数字翻动时间duration: {type: Number,default: 2},color: {type: String,default: '#fff'},nodeId: {type: String,default: () => {// 生成随机不重复idreturn uniqueId(['countCard_'])}},// flip插件的其他参数params: {type: Object,default: () => ({})}
})
let flip = null
const initFlip = () => {const numNode = document.querySelector(`#${props.nodeId} .num`)if (numNode && props.to) {numNode.innerHTML = ''flip = new Flip({...props.params,node: numNode,from: props.from,to: props.to,duration: props.duration})}
}
onMounted(() => {initFlip()
})
onUpdated(() => {initFlip()
})onUnmounted(() => {flip = null
})
</script><style lang="less" scoped>
.count-to {overflow: hidden;height: 24px;text-align: center;width: 100%;
}.num,
.num_0 {font-size: 20px;text-align: center;
}.count-color {color: v-bind(color);
}
</style>

使用:

<count-to :to="6789" />

3D旋转菜单

效果:TODO

很多大屏菜单喜欢使用3D旋转效果,我们使用纯Css3实现一个。

<template>
<div class="menu"><divv-for="(item, index) in MENU_LIST":key="index"class="menu-item"@click="linkTo(xxx)"><img :src="item.icon" alt="" class="menu-icon" /></div>
</div>
</template>
<script setup>
const MENU_LIST = [{icon: '/imgs/icon1.png',name: '菜单1',},{icon: '/imgs/icon2.png',name: '菜单2',},{icon: '/imgs/icon3.png',name: '菜单3',
]
</script>  
<style lang="less">
.menu {position: relative;width: 80%;height: 100%;left: 50%;transform: translateX(-50%);.menu-item {width: 376px;height: 436px;display: flex;flex-direction: column;align-items: center;padding: 33px 0;position: absolute;cursor: pointer;//3个卡片,x和y轴动画加起来是20s , 20s/3 约等于 6.667s//每个球y轴动画延迟 从0递减2.857s,x轴与y相差动画时长的一半(10s/2)&:nth-child(1) {animation: animateX 10s cubic-bezier(0.36, 0, 0.64, 1) -5s infinite alternate,animateY 10s cubic-bezier(0.36, 0, 0.64, 1) 0s infinite alternate,scaleAnimate 20s cubic-bezier(0.36, 0, 0.64, 1) 0s infinite alternate;}&:nth-child(2) {animation: animateX 10s cubic-bezier(0.36, 0, 0.64, 1) -11.667s infinite alternate,animateY 10s cubic-bezier(0.36, 0, 0.64, 1) -6.667s infinite alternate,scaleAnimate 20s cubic-bezier(0.36, 0, 0.64, 1) -6.667s infinite alternate;}&:nth-child(3) {animation: animateX 10s cubic-bezier(0.36, 0, 0.64, 1) -18.334s infinite alternate,animateY 10s cubic-bezier(0.36, 0, 0.64, 1) -13.334s infinite alternate,scaleAnimate 20s cubic-bezier(0.36, 0, 0.64, 1) -13.334s infinite alternate;}}
}
@keyframes animateX {0% {left: -50px;}100% {left: 75%;}
}@keyframes animateY {0% {top: -100px;}100% {top: 400px;}
}@keyframes scaleAnimate {0% {transform: scale(0.6);}50% {transform: scale(1);}100% {transform: scale(0.6);}
}
</style>

原理:主要运用了贝塞尔曲线实现曲线运动轨迹,然后通过控制元素运动时间差实现前后跟随,再通过animate控制元素位置和近大远小的视觉效果。

跑马灯

vue3-marquee:一个无缝滚动,性能优良,使用简单的开源组件,可以用来实现滚动列表弹幕效果等。

<template><Vue3Marquee><img height="200" width="300" src="...img" /><img height="200" width="300" src="...img" /><img height="200" width="300" src="...img" /></Vue3Marquee>
</template><script>
import { Vue3Marquee } from 'vue3-marquee'export default {components: {Vue3Marquee,},
}
</script>

【开源地址】:https://github.com/megasanjay/vue3-marquee

3D图表

开发3D图表,我看很多人喜欢用echarts的3D插件去开发,然而我感觉效果并不理想,而且开发起来还很费劲。

这里我无脑推荐highcharts,不仅开发起来非常简单,而且效果也很不错。

【官方地址】:https://www.highcharts.com/

结语

好了,以上就是大屏开发经验系列的剩余所有内容了,后续有什么优秀方案我会再继续分享。

由于笔者开发的大屏也不是很多,所以肯定也会有很多疏漏的优秀框架或者开源,毕竟一个人的力量有限,也欢迎小伙伴们在评论区里讨论交流优秀方案。

另外,有需要进技术产品开发交流群(可视化&GIS)可以加我:brown_7778,也欢迎数字孪生领域的商业合作。

最后,如果觉得文章对你有帮助,也希望可以一键三连👏👏👏,你的鼓励是支持我持续分享下去的动力~

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/16840.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

上海企业ESG标准实施启动仪式暨首届城市可持续发展北外滩论坛,莱巍爵CEO瞿伟锋再获殊荣,绽放异彩

2024年5月20日&#xff0c;上海企业ESG标准实施启动仪式暨首届城市可持续发展北外滩论坛在虹口区白玉兰广场成功举行&#xff0c;上海市工业经济联合会会长管维镛&#xff0c;上海市市场监督管理总局副局长王益洋&#xff0c;联合国工业发展组织投资与技术促进办公室主任赵晓蕾…

【Flutter】Dialog组件PageView组件

&#x1f525; 本文由 程序喵正在路上 原创&#xff0c;CSDN首发&#xff01; &#x1f496; 系列专栏&#xff1a;Flutter学习 &#x1f320; 首发时间&#xff1a;2024年5月27日 &#x1f98b; 欢迎关注&#x1f5b1;点赞&#x1f44d;收藏&#x1f31f;留言&#x1f43e; 目…

Shiro+Jwt+Redis

如何整合ShiroJwtRedis&#xff0c;以及为什么要这么做 我个人认为 ①为什么用shiro&#xff1a;“ShiroJwtRedis”模式和“单纯的shiro”模式相比&#xff0c;主要用的是shiro里面的登录认证和权限控制功能 ②为什么用jwt&#xff1a;“ShiroJwt”模式和“ShiroCookie”模式相…

生命在于学习——Python人工智能原理(2.1)

二、机器学习 1、机器学习的定义 机器学习是指从有限的观测数据中学习出具有一般性的规律&#xff0c;并利用这些规律对未知数据进行预测的方法&#xff0c;通俗的讲&#xff0c;机器学习就是让计算机从数据中进行自动学习&#xff0c;得到某种知识。 传统的机器学习主要关注…

1分钟快速掌握JSON格式

文章目录 先说理论代码举例对象型数组型总结 先说理论 下面是JSON的几种简单数据类型: 数据类型描述数字型JavaScript中的双进度浮点类型&#xff0c;通常根据具体情况定义&#xff0c;这里是没有特殊的整形的。字符串型带双引号的Unicode&#xff0c;带反斜杠转义布尔型true…

图形学初识--双线性插值算法

文章目录 为什么需要双线性插值算法&#xff1f;双线性插值算法是什么&#xff1f;如何双线性插值&#xff1f;结尾&#xff1a;喜欢的小伙伴可以点点关注赞哦 为什么需要双线性插值算法&#xff1f; ChatGP回答&#xff1a; 双线性插值&#xff08;bilinear interpolation&am…

AI绘画图生图有什么用?

随着AI渗透到我们生活中的各个角落&#xff0c;AI绘画图生图的出现&#xff0c;更是在艺术领域引起了广泛的关注和讨论。那么&#xff0c;AI绘画图生图究竟有什么作用呢? 首先&#xff0c;AI绘画图生图能够极大地提高创作效率。传统的绘画过程需要艺术家们花费大量的时间和精力…

2024年怎么下载学浪app视频

想要在2024年紧跟潮流&#xff0c;成为一名优秀的学浪用户吗&#xff1f;今天就让我们一起探索如何下载学浪app视频吧&#xff01; 学浪视频下载工具打包 学浪下载工具打包链接&#xff1a;百度网盘 请输入提取码 提取码&#xff1a;1234 --来自百度网盘超级会员V10的分享…

第14章-蓝牙遥控小车 手把手做蓝牙APP遥控小车 蓝牙串口通讯讲解

本文讲解手机蓝牙如何遥控小车&#xff0c;如何编写串口通信指令 第14章-手机遥控功能 我们要实现蓝牙遥控功能&#xff0c;蓝牙遥控功能要使用:1.单片机的串口、2.蓝牙通信模块 所以我们先调试好:单片机的串口->蓝牙模块->接到一起联调 14.1-电脑控制小车 完成功能…

网络工程师备考2——vlan

vlan 1、什么是VLAN&#xff1f; VLAN&#xff08;Virtual LAN&#xff09;&#xff0c;翻译成中文是“虚拟局域网”。LAN可以是由少数几台家用计算机构成的网络&#xff0c;也可以是数以百计的计算机构成的企业网络。VLAN所指的LAN特指使用路由器分割的网络——也就是广播域…

ABeam 德硕 Team Building | SDC Green Day——环保公益行动

山野好拾光 春日公益行 继上年度大连办公室Green Day活动的顺利举办&#xff0c;环保的理念更加深入到ABeam每一位员工的心中。春日天气晴好&#xff0c;西安办公室的小伙伴们也迫不及待来上一场说走就走的Green Day Outing活动。 本次环保公益行动主题为「夏日Go Green畅享山…

千亿级开源大模型Qwen110B部署实测

近日&#xff0c;通义千问团队震撼开源 Qwen1.5 系列首个千亿参数模型 Qwen1.5-110B-Chat。 千亿级大模型普通显卡是跑不了推理的&#xff0c;普通人一般也没办法本地运行千亿级大模型。 为了探索千亿级大模型到底需要计算资源&#xff0c;我用云计算资源部署了Qwen1.5-110B-…

谷歌AI搜索功能“翻车”,用户体验引担忧

近期&#xff0c;谷歌对其搜索引擎进行重大更新&#xff0c;推出了全新AI搜索功能“AI Overview”&#xff0c;试图通过人工智能技术提供更智能便捷的搜索体验&#xff0c;并追赶微软和OpenAI等竞争对手。然而事与愿违&#xff0c;这项备受期待的功能上线后却频频出错&#xff…

测试基础06:软件产品的运行环境dev、sit、test、fat、uat、pre、pro

​​​​​​​课程大纲 1、Dev开发环境 &#xff08;Development environment&#xff09; 使用者 开发人员使用。 用途 用于编程&#xff0c;版本变动很大。 外部能否访问 外部用户无法访问。 2、sit/ITE系统集成测试环境 &#xff08;System Integration Testing en…

30多万汉字词语押韵查询ACCESS\EXCEL数据库

押韵&#xff0c;也作“压韵”。作诗词曲赋等韵文时在句末或联末用同韵的字相押&#xff0c;称为押韵。诗歌押韵&#xff0c;使作品声韵和谐&#xff0c;便于吟诵和记忆&#xff0c;具有节奏和声调美。旧时押韵&#xff0c;要求韵部相同或相通&#xff0c;也有少数变格。现代新…

《开发问题解决》Window下7z解压:cannot create symbolic link : 客户端没有所需的特权

问题描述&#xff1a; 今天使用7z来解压东西的是突然出现这个问题。 问题解决&#xff1a; download直接下载到c盘中&#xff0c;由于所在文件夹有权限限制。无法进行正常解压。 7.zip解压时使用管理员权限进行解压&#xff0c;解压时使用管理员权限。即如图 使用管理员权限重…

【面试干货】找出一个偶数能够表示为两个素数之和的所有可能情况

【面试干货】找出一个偶数能够表示为两个素数之和的所有可能情况 1、实现思想2、代码实现 &#x1f496;The Begin&#x1f496;点点关注&#xff0c;收藏不迷路&#x1f496; 1、实现思想 功能&#xff1a;通过循环遍历奇数&#xff0c;找出一个大于等于 6 的偶数能够表示为两…

【C++初阶】auto关键字

目录 1.auto简介 2.auto的使用 1.auto简介 在早期C/C中auto的含义是&#xff1a;使用auto修饰的变量&#xff0c;是具有自动存储器的局部变量&#xff0c;但遗憾的 是一直没有人去使用它&#xff0c;大家可思考下为什么&#xff1f; C11中&#xff0c;标准委员会赋予了auto全…

红队项目PinkysPalace格式字符串缓冲区溢出详解

简介 渗透测试-地基篇 该篇章目的是重新牢固地基&#xff0c;加强每日训练操作的笔记&#xff0c;在记录地基笔记中会有很多跳跃性思维的操作和方式方法&#xff0c;望大家能共同加油学到东西。 请注意&#xff1a; 本文仅用于技术讨论与研究&#xff0c;对于所有笔记中复现的…

视频白平衡没调好怎么补救 视频白平衡调整用哪些参数 会声会影视频制作教程

没有调不好的白平衡&#xff01;如果有&#xff0c;那就是你的方法没用对。无论你的视频发黄还是发蓝&#xff0c;只要掌握本文提供的方法&#xff0c;简单几步就能纠正色偏、校准白平衡。操作很简单&#xff0c;几乎所有人都能够轻松掌握。有关视频白平衡没调好怎么补救&#…