本文示例代碼、數據已上傳至個人
Github
倉庫https://github.com/CNFeffery/DataScienceStudyNoteshtml
Kepler.gl
相信不少人都據說過,做爲Uber
幾年前開源的交互式地理信息可視化工具,kepler.gl
依託WebGL
強大的圖形渲染能力,能夠在瀏覽器端以多種形式輕鬆展現大規模數據集。node
更使人興奮地是Kepler.gl
在去年推出了基於Python
的接口庫keplergl
,結合jupyter notebook/jupyter lab
的相關拓展插件,使得咱們能夠經過編寫Python
程序配合Kepler.gl
更靈活地製做各類可視化做品。git
而隨着近期keplergl
的更新,更多的新特性得以同步到其Python
生態中,本文就將針對其中的路徑動畫的製做方法進行介紹。github
咱們要製做的路徑動畫圖主要用於表現特定路徑上流的運動,譬如圖3的例子來自Kepler.gl
官方示例:json
而在官方的說明中描述了要繪製路徑動畫須要輸入的數據格式:瀏覽器
這是一個典型的GeoJSON
格式LineString
要素,特別的是其"coordinates"
鍵對應的值不一樣於常規的[經度, 緯度]
格式,而是表明着[經度, 緯度, 高度, 時間戳]
,其中高度非必要,能夠設置爲0,而時間戳則聲明瞭軌跡動畫在該時間點會到達的該點位置,即線要素上連續的點位置+時間戳定義了軌跡動畫的運動模式,下面咱們分步驟來實現。工具
這裏咱們以重慶市渝中區的OSM路網爲演示示例數據,首先咱們須要利用json
模塊來讀取本地重慶市渝中區_osm路網_道路.geojson
數據:動畫
from keplergl import KeplerGl import json import time with open('geometry/重慶市渝中區_osm路網_道路.geojson') as g: raw_roads = json.load(g)
隨便打印出其中包含的某個線要素:插件
能夠看到,這時線要素內部包含的點仍是[經度, 緯度]
的格式,接下來咱們爲其虛構上時間戳信息,爲了保證整個路網可視化的協調一致,將全部線要素的時間跨度固定在一個小時以內,保證每段路上從頭至尾的軌跡動畫都保持一致:3d
start_time = time.mktime(time.strptime('2020-05-29 20:00:00', "%Y-%m-%d %H:%M:%S")) for i in range(raw_roads['features'].__len__()): for j in range(raw_roads['features'][i]['geometry']['coordinates'].__len__()): shift_time = int((j / raw_roads['features'][i]['geometry']['coordinates'].__len__())*3600) # 更新當前對應的時間戳 raw_roads['features'][i]['geometry']['coordinates'][j] \ .extend([0, # 高度設置爲0 int(start_time) + shift_time])
接着再打印其中一個線要素:
能夠發現每一個點元素都追加上高度0以及對應的時間戳(注意這裏的時間戳必須爲整數不然以後輸入keplergl
會報錯),接下來的過程就很是簡單,首先確保你已經安裝了keplergl
以及對應插件,譬如我所使用的jupyter lab
,在確保nodejs
被安裝的前提下,使用jupyter labextension install @jupyter-widgets/jupyterlab-manager keplergl-jupyter
安裝拓展插件(jupyter notebook可參考https://github.com/keplergl/kepler.gl/tree/master/bindings/kepler.gl-jupyter#installation),以及使用pip install keplergl
來安裝keplergl
庫,一切準備就緒直接運行以下代碼:
from keplergl import KeplerGl # 生成KeplerGl對象s map1 = KeplerGl(height=400, data={'flow': raw_roads}) # data以圖層名爲鍵,對應的矢量數據爲值 map1 map1.save_to_html(file_name='渝中區.html') # 導出到本地可編輯html文件
這一步的目的是初始化已嵌入目標數據的html文件,接下來你就能夠關閉jupyter lab
,在工做目錄下找到已經導出的html文件直接打開,接下來的工做將在瀏覽器裏進行。
接下來的過程則不涉及任何代碼,咱們將以點擊按鈕的方式改變咱們可視化做品的外觀,因爲整個過程細節較多,所以將整個過程錄製爲視頻:
Kepler.gl
中的交互式參數調整很是簡單,只要你隨便試一試就能夠掌握其用法,沒必要拘泥於我上面的參數設置,發揮本身的創意,調出更美觀的軌跡動畫結果。
以上就是本文的所有內容,若有疑問或建議歡迎到評論區與我交流~