echart實現3d地圖_3D飛線效果——讓線“飛”起來的秘密

636906fe159b8cd8d11ac61a01e62f6f.png

在城市規劃、統計、交通等行業,地圖可視化已成為最直接也最吸引眼球的一種表達方式。例如人群遷徙、人口流動、OD出行、職住分析、客流來源等眾多場景都需要用到飛線效果呈現。

4125afcc23fdb812c1e10d7bedb09b95.gif
2D飛線效果圖

隨著可視化技術的進一步發展,傳統的2D飛線效果略顯單調,而3D飛線可以展示更豐富、更直觀、更炫酷的效果。

63791e476c6a38c5c0295355cec3816c.gif
3D飛線效果圖

前不久,百度地圖慧眼結合地圖可視化技術發布了《帝都24小時圖鑒》(戳這里查看原文),該項目受到行業內許多技術愛好者的一致好評,更有小伙伴前來咨詢:文中炫酷的3D飛線效果是如何實現的?今天,就讓百度地圖慧眼前端工程師帶你探尋“3D飛線”飛起來的秘密。

01 元素準備

為了實現上圖的3D飛線效果,我們需要先分析一下飛線的構成元素。大致上來說,一個完整的飛線效果,無論是2D還是3D,都是由地點、連接線和連接線上的動畫點綴構成的。下面,帶大家一步步來看看每個部分的實現過程。

02 地點圓的實現

e0b88c26392215b1693c5c44d42c0db1.gif

地點圓的組成元素有兩樣,一個靜態的圓形和一個向外逐漸擴散并變透明的圓環。畫出這兩個圖形并不難,但是怎么讓這個擴散的圓環動起來呢?

要實現動畫,我們可以首先想象一個場景:在一個小本子上的每一頁都畫一個一模一樣的沒有腿的小人兒,再在每一頁給這個小人畫上位置不同的腿,然后快速翻動本子,就可以看到小人兒奔跑的動畫了。

現在圓形和圓環都已經畫好了,為了讓圓環動起來,就需要使用一個名為requestAnimationFrame的函數,簡稱rAF,rAF是瀏覽器里專門用于動畫效果的一個函數。所以接下來我們在全局設置一個rAF讓它一直循環,然后在其中進行一些動畫操作,比如這里修改圓環的大小和透明度。而這個rAF就是“畫腿”的過程。

03 連接線的實現

畫完了點,我們就要開始準備連接線了。畫一條連接線很簡單,但是這里為了讓它的效果更豐富,就需要處理了一下線條的細節:

1)通過貝塞爾曲線算法,將直線拉成曲線,在3D視角下看起來更有張力。

2)給組成曲線的每個頂點賦值不同的顏色,達到顏色、透明度漸變的效果,使其看起來不那么單調。

db8ede391d6376c404d2b495c05b1b74.png

04 讓線“飛起來”

完成了上述的準備工作,接下來才是重頭戲。

首先,我們在連接線的軌跡上再給它附著上一根帶有寬度的線作為點綴,為了避免這根點綴的線看起來太呆,我們用三角函數處理一下它的寬度,讓它看起來扭曲一點。然后,我們就要用到上文所說的rAF讓它動起來了!

23696bf5027a95fc20cc58e3ff30c48e.gif

那么問題來了,控制顏色和透明度很簡單,該怎么控制它按軌跡移動以及出現與消失呢?

這里用到一個小技巧,我們知道“線”有一個實線與虛線的屬性,在這里我們把這根點綴線設置成虛線,然后通過在rAF里修改虛線的dashOffset屬性,讓它沿著連接線的軌跡一直偏移,就可以在視覺上造成移動的效果了~另外,還可以在rAF里同時改變點綴線的寬度,造成一種“呼吸感”的動畫效果,這樣上面的動畫就完成了。

可是這樣的效果還略顯呆板,太過整齊劃一的動畫看久了容易審美疲勞,所以我們再給這個虛線的長度加一份隨機的偏移,讓它們有一種不規律感。這樣,最終版3D飛線就完成了!

cb6270197d2f1331a75dab9ef7cb5160.gif

05 更多可能效果

之所以說在3D場景,飛線的效果更豐富,就是因為在上面的基礎上,我們可以繼續發揮,做出更多效果、適配更多場景的飛線~

8665aff18fe2761a741ad5ab13541f73.gif
換個貼圖后的樣子

3bc5d7a23512232a727a76c6312add83.gif
模仿噴泉的樣子

7dbccaa787326da8250f8efd314927ba.gif
模仿流星的樣子

06 應用成效

百度地圖慧眼3D飛線可視化技術,使得人群遷徙、人口流動、OD出行、職住分析、客流來源等場景得以生動、形象表達,有助于城市規劃、統計、交通等行業的可視化管理。下圖是百度地圖慧眼人口監測可視化大屏的效果樣例:

42db70dab248922e79cc3fba34274a8e.gif

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/529101.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/529101.shtml
英文地址,請注明出處:http://en.pswp.cn/news/529101.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

ad域管理與維護_在NAS SMB卷上使用VisualSVN Server維護代碼庫

VisualSVN Server[1] 是 Windows 平臺上流行的 SVN 形式的代碼管理工具。以下我們將介紹把 NAS SMB 卷作為 VisualSVN 代碼庫存儲中心時會遇到的幾個問題以及相應的解決方法。1. 安裝錯誤的解決方法我們以 VisualSVN Server 3.3.1 版本為例,在安裝 VisualSVN Server…

android 開發art,Android應用開發之Android 系統啟動原理(art 虛擬機)

本文將帶你了解Android應用開發之Android 系統啟動原理(art 虛擬機),希望本文對大家學Android有所幫助。Android 系統啟動原理(art 虛擬機)一、虛擬機的啟動Android 是一個 Linux 的虛擬機,當虛擬機啟動的時候,會執行手機根目錄下的 init.r…

電腦文件夾可以分屏的軟件_電腦上什么便簽軟件可以添加音頻?

提及便簽,很多人都會很自然地想到手機便簽。這是因為隨著智能手機和移動互聯網的發展,現在很多手機上都有了系統自帶的便簽app。其實,除了手機便簽外,還有電腦便簽呢!這不,Win7及其以上版本的電腦上還有系統…

jsp form提交到后臺中文亂碼_JSP與servlet之間的數據傳遞

【51】Jsp與Servlet之間的傳值有兩種,一種是Jsp傳值給Sevlet,另一種是Servlet傳值給Jsp;使用request、response對象完成傳值,具體實現如下:Jsp與Servlet之間的傳值有兩種,一種是Jsp傳值給Sevlet&#xff0c…

android jni 中jnienv,android JNI中JNIEnv類型和jobject類型的解釋

JNIEXPORT void JNICALL Java_com_jni_demo_JNIDemo_sayHello (JNIEnv *env, jobject obj){cout<}對於這個方法參數中的JNIEnv* env參數的解釋:JNIEnv類型實際上代表了Java環境&#xff0c;通過這個JNIEnv* 指針&#xff0c;就可以對Java端的代碼進行操作。例如&#xff0c;…

yang模型中rpc_領域驅動模型(DDD)設計講解

一. 什么是領域驅動模型(DDD)&#xff1f;領域驅動模型一種設計思想&#xff0c;我們又稱為DDD設計思想。是一種為了解決傳統設計思想帶來的維護困難&#xff0c;溝通困難和交互困難而產生的一種新的思想。也解決了在部分公司中&#xff0c;一個項目組就是一套服務&#xff0c;…

鴻蒙系統操作界面跟蘋果很像,鴻蒙手機UI界面曝出!圖標擬物化、操作邏輯近似蘋果iOS13...

原標題&#xff1a;鴻蒙手機UI界面曝出&#xff01;圖標擬物化、操作邏輯近似蘋果iOS13?【IT爆料王-原創文章-具備版權效力】就在近日&#xff0c;筆者收到了網友的匿名私信&#xff0c;提供給筆者華為鴻蒙系統的UI界面截圖&#xff0c;以及搭載鴻蒙系統的華為手機的曝光圖片。…

python3中的int類型占64位,有沒有什么辦法來強制Python來使用64位整數的Windows?

I’ve noticed that whenever any integer surpasses 2^31-1 my number heavy code suffers a large slowdown, despite the fact I’m using a 64 bit build of Python on a 64bit version of Windows. This seems to be true on Python 2.7 and Python 3. I’ve read that Wi…

crtsiii型無砟軌道板_無砟軌道裂縫破損怎么修補

隨著高速鐵路、客運專線、城市地鐵的快速發展&#xff0c;無砟軌道軌道板&#xff08;道床板&#xff09;廣泛應用&#xff0c;但施工中和運營期都發現軌道板混凝土存在不同程度的微細裂縫&#xff0c;對無砟軌道造成了一定的病害。高鐵軌道板裂縫是不可避免的。為確保無砟軌道…

c調用python第三方庫_Python使用ctypes模塊調用DLL函數之C語言數組與numpy數組傳遞...

在Python語言中&#xff0c;可以使用ctypes模塊調用其它如C語言編寫的動態鏈接庫DLL文件中的函數&#xff0c;在提高軟件運行效率的同時&#xff0c;也可以充分利用目前市面上各種第三方的DLL庫函數&#xff0c;以擴充Python軟件的功能及應用領域&#xff0c;減少重復編寫代碼、…

妲己機器人怎么升級固件_臺灣重金設計的3D妲己,亮瞎了

大家還記得前幾天米醋分享的國內首檔二次元選秀&#xff0c;遭網友瘋狂吐槽&#xff1a;不知道怎么形容的丑&#xff01;當米醋看到了這檔綜藝的宣傳海報時瞬間被這一批選手的顏值所吸引&#xff01;太魔幻了&#xff01;沒成想看到3D人物效果時米醋卻被這盛世丑顏丑到裂開&…

go語言通道插入0_Go語言入門必知教程-通道

Golang提供了一種稱為通道的機制&#xff0c;用于在協程之間共享數據。當函數作為協程執行并發活動時&#xff0c;需要它們共享資源或數據&#xff0c;通道便充當協程之間的管道(管道)&#xff0c;提供一種確保同步交換數據的機制。需要在聲明通道時指定數據類型&#xff0c;可…

aes加密字符串c++_springboot2.2.X手冊:防抓包?快速實現API接口數據加密

溪云閣&#xff1a;專注編程教學&#xff0c;架構&#xff0c;JAVA&#xff0c;Python&#xff0c;微服務&#xff0c;機器學習等&#xff0c;歡迎關注上一篇&#xff1a;springboot2.2.X手冊&#xff1a;redis的7種類型100個方法全解析有沒有遇到這樣子的接口&#xff0c;放到…

鴻蒙系統打造完備終端,搭載鴻蒙系統的手機很快推出,華為生態更加完善

2019年的8月9日&#xff0c;在華為開發者大會上華為向大家正式的發布了一款操作系統——鴻蒙系統。這個系統備受大家的關注&#xff0c;鴻蒙2.0的發布也在時刻期待中。因為在目前的操作系統中&#xff0c;華為的鴻蒙操作系統是僅次于安卓、ios的存在&#xff0c;而今日&#xf…

curl socket 訪問_使用Curl、socket、file_get_contents三種方法POST提交數據 | 學步園

# <?php # /**# * Socket版本# * 使用方法&#xff1a;# * $post_string "appsocket&versionbeta";# * request_by_socket(facebook.cn,/restServer.php,$post_string);# */# function request_by_socket($remote_server,$remote_path,$post_string,$port …

html 標簽 r語言,從R中的字符串中刪除html標簽

我正在嘗試將網頁源代碼讀入R并將其作為字符串處理。我正在嘗試刪除段落并從段落文本中刪除html標簽。我遇到了以下問題&#xff1a;我嘗試實現一個功能來刪除html標簽&#xff1a;cleanFunfunction(fullStr){#find location of tags and citationstagLoccbind(str_locate_all(…

python給圖片加半透明水印_Python 批量加水印就這么簡單!

工作的時候&#xff0c;尤其是自媒體&#xff0c;我們必備水印添加工具以保護我們的知識產權,網上有許多的在線/下載的水印添加工具&#xff0c;但他們或多或少都存在以下問題&#xff1a; 在線工具需要將圖片上傳到對方服務器&#xff0c;信息不安全。 很多工具不具備批量處理…

html 選中狀態,html默認選中狀態

html中標簽用法解析及如何設置selec標簽定義和用法 select 元素可創建單選或多選菜單。當提交表單時&#xff0c;瀏覽器會提交選定的項目&#xff0c;或者收集用逗號分隔的多個選項&#xff0c;將其合成一個單獨的參數列表&#xff0c;并且在將 表單數據提交給服務器時包括 nam…

nemesis什么車_nemesis是什么意思_nemesis的翻譯_音標_讀音_用法_例句_愛詞霸在線詞典...

全部報應Was he aiming at Bryant, his old nemesis and a favorite target in the past?他是不是暗指科比, 一直的“競爭對手”和過去最中意的目標?期刊摘選After the defeat of their old arch nemesis, the Turtle have grown apart as a family.在擊敗舊時強敵后, 忍者神…

wxpython制作表格界面_[Python] wxPython 菜單欄控件學習總結(原創)

1、總結 1、大體創建過程 1、創建一個 菜單欄 : menuBar wx.MenuBar()相當于這個白色地方&#xff0c;沒有File這個菜單 2、創建 菜單 : fileMenu wx.Menu()這兩個不是直接“用的”&#xff0c;叫菜單。既用來分類其他 菜單項 的文件夾樣 3、創建 菜單項 : newItem wx.MenuI…