可視化大屏開發,知道了這些經驗以及解決方案,效率至少提升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.pswp.cn/bicheng/16840.shtml
繁體地址,請注明出處:http://hk.pswp.cn/bicheng/16840.shtml
英文地址,請注明出處:http://en.pswp.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-電腦控制小車 完成功能…

【面試題】MySQL高頻面試題

談一談你對數據庫的理解&#xff1f; 數據庫是一個用于存儲和管理數據的工具&#xff0c;它提供了一種結構化的方式來組織和訪問數據。數據庫可以存儲大量的數據&#xff0c;并且可以通過查詢語言進行檢索、更新和刪除數據。 數據庫的主要目的是提供一個可靠的數據存儲和管理…

使用docker的常用命令示例

命令描述示例注釋docker run創建并啟動一個容器docker run -d -p 80:80 nginx-d代表后臺運行&#xff0c;-p代表端口映射docker ps列出正在運行的容器docker ps無docker ps -a列出所有容器&#xff0c;包括停止的docker ps -a-a代表列出所有容器docker stop停止一個或多個正在運…

網絡工程師備考2——vlan

vlan 1、什么是VLAN&#xff1f; VLAN&#xff08;Virtual LAN&#xff09;&#xff0c;翻譯成中文是“虛擬局域網”。LAN可以是由少數幾臺家用計算機構成的網絡&#xff0c;也可以是數以百計的計算機構成的企業網絡。VLAN所指的LAN特指使用路由器分割的網絡——也就是廣播域…

簡述 Vue父子組件和非父子組件的通信

Vue組件之間的通信可以分為父子組件通信和非父子組件通信兩大類。下面將分別進行詳細的解釋&#xff1a; 父子組件通信 1. 父傳子 方式&#xff1a;通過props屬性進行傳遞。步驟&#xff1a; 在父組件中定義要傳遞的數據。在父組件的模板中&#xff0c;使用子組件標簽并動態…

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…

WIFI——ESP8266的一些知識

ESP8266的三種無線通訊模式&#xff1a; AP模式&#xff1a;ESP8266產生WIFI&#xff0c;其他設備加入該wifi 無線終端模式&#xff1a;別人創建wifi&#xff0c;ESP8266加入該wifi 混合模式&#xff1a;雖然是以上兩種都能用&#xff0c;但同一時間只能用其中一個 設置AP模…

大數據的存儲和處理面臨哪些挑戰,如何應對?

大數據的存儲和處理面臨以下挑戰&#xff1a; 數據量巨大&#xff1a;大數據的特點之一是數據量非常龐大&#xff0c;存儲和處理這么大規模的數據是一個挑戰。傳統的數據庫系統可能無法滿足大數據需求&#xff0c;需要尋找適合大規模數據處理的解決方案。 數據異構性&#xff…

30多萬漢字詞語押韻查詢ACCESS\EXCEL數據庫

押韻&#xff0c;也作“壓韻”。作詩詞曲賦等韻文時在句末或聯末用同韻的字相押&#xff0c;稱為押韻。詩歌押韻&#xff0c;使作品聲韻和諧&#xff0c;便于吟誦和記憶&#xff0c;具有節奏和聲調美。舊時押韻&#xff0c;要求韻部相同或相通&#xff0c;也有少數變格。現代新…