Python+Kepler.gl輕松制作酷炫路徑動(dòng)畫(huà)的實(shí)現(xiàn)示例
1. 簡(jiǎn)介
Kepler.gl相信很多人都聽(tīng)說(shuō)過(guò),作為Uber幾年前開(kāi)源的交互式地理信息可視化工具,kepler.gl依托WebGL強(qiáng)大的圖形渲染能力,可以在瀏覽器端以多種形式輕松展示大規(guī)模數(shù)據(jù)集。

更令人興奮的是Kepler.gl在去年推出了基于Python的接口庫(kù)keplergl,結(jié)合jupyter notebook/jupyter lab的相關(guān)拓展插件,使得我們可以通過(guò)編寫(xiě)Python程序配合Kepler.gl更靈活地制作各種可視化作品。

而隨著近期keplergl的更新,更多的新特性得以同步到其Python生態(tài)中,本文就將針對(duì)其中的路徑動(dòng)畫(huà)的制作方法進(jìn)行介紹。
2.基于keplergl的路徑動(dòng)畫(huà)
我們要制作的路徑動(dòng)畫(huà)圖主要用于表現(xiàn)特定路徑上流的運(yùn)動(dòng),譬如圖3的例子來(lái)自Kepler.gl官方示例:

而在官方的說(shuō)明中描述了要繪制路徑動(dòng)畫(huà)需要輸入的數(shù)據(jù)格式:

這是一個(gè)典型的GeoJSON格式LineString要素,特別的是其"coordinates"鍵對(duì)應(yīng)的值不同于常規(guī)的[經(jīng)度, 緯度]格式,而是代表著[經(jīng)度, 緯度, 高度, 時(shí)間戳],其中高度非必要,可以設(shè)置為0,而時(shí)間戳則聲明了軌跡動(dòng)畫(huà)在該時(shí)間點(diǎn)會(huì)到達(dá)的該點(diǎn)位置,即線要素上連續(xù)的點(diǎn)位置+時(shí)間戳定義了軌跡動(dòng)畫(huà)的運(yùn)動(dòng)模式,下面我們分步驟來(lái)實(shí)現(xiàn)。
3.構(gòu)造數(shù)據(jù)與初始化html
這里我們以重慶市渝中區(qū)的OSM路網(wǎng)為演示示例數(shù)據(jù),首先我們需要利用json模塊來(lái)讀取本地重慶市渝中區(qū)_osm路網(wǎng)_道路.geojson數(shù)據(jù):
from keplergl import KeplerGl
import json
import time
with open('geometry/重慶市渝中區(qū)_osm路網(wǎng)_道路.geojson') as g:
raw_roads = json.load(g)
隨便打印出其中包含的某個(gè)線要素:

可以看到,這時(shí)線要素內(nèi)部包含的點(diǎn)還是[經(jīng)度, 緯度]的格式,接下來(lái)我們?yōu)槠涮摌?gòu)上時(shí)間戳信息,為了保證整個(gè)路網(wǎng)可視化的協(xié)調(diào)一致,將所有線要素的時(shí)間跨度固定在一個(gè)小時(shí)之內(nèi),保證每段路上從頭到尾的軌跡動(dòng)畫(huà)都保持一致:
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) # 更新當(dāng)前對(duì)應(yīng)的時(shí)間戳
raw_roads['features'][i]['geometry']['coordinates'][j] \
.extend([0, # 高度設(shè)置為0
int(start_time) + shift_time])
接著再打印其中一個(gè)線要素:

可以發(fā)現(xiàn)每個(gè)點(diǎn)元素都追加上高度0以及對(duì)應(yīng)的時(shí)間戳(注意這里的時(shí)間戳必須為整數(shù)否則之后輸入keplergl會(huì)報(bào)錯(cuò)),接下來(lái)的過(guò)程就非常簡(jiǎn)單。
首先確保你已經(jīng)安裝了keplergl以及對(duì)應(yīng)插件,譬如我所使用的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來(lái)安裝keplergl庫(kù),一切準(zhǔn)備就緒直接運(yùn)行如下代碼:
from keplergl import KeplerGl
# 生成KeplerGl對(duì)象s
map1 = KeplerGl(height=400,
data={'flow': raw_roads}) # data以圖層名為鍵,對(duì)應(yīng)的矢量數(shù)據(jù)為值
map1
map1.save_to_html(file_name='渝中區(qū).html') # 導(dǎo)出到本地可編輯html文件

這一步的目的是初始化已嵌入目標(biāo)數(shù)據(jù)的html文件,接下來(lái)你就可以關(guān)閉jupyter lab,在工作目錄下找到已經(jīng)導(dǎo)出的html文件直接打開(kāi),接下來(lái)的工作將在瀏覽器里進(jìn)行。
到此這篇關(guān)于Python+Kepler.gl輕松制作酷炫路徑動(dòng)畫(huà)的實(shí)現(xiàn)示例的文章就介紹到這了,更多相關(guān)Python+Kepler.gl路徑動(dòng)畫(huà)內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
在django項(xiàng)目中,如何單獨(dú)運(yùn)行某個(gè)python文件
這篇文章主要介紹了在django項(xiàng)目中單獨(dú)運(yùn)行某個(gè)python文件的操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2021-04-04
python腳本編輯oss文件的實(shí)現(xiàn)示例
本文主要介紹了python腳本編輯oss文件,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2024-05-05
Python實(shí)現(xiàn)封裝打包自己寫(xiě)的代碼,被python import
這篇文章主要介紹了Python實(shí)現(xiàn)封裝打包自己寫(xiě)的代碼,被python import,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2020-07-07
使用Python實(shí)現(xiàn)從零開(kāi)始打造一個(gè)三維繪圖系統(tǒng)
這篇文章主要為大家詳細(xì)介紹了如何使用Python實(shí)現(xiàn)一個(gè)繪圖系統(tǒng),通過(guò)指定x,y,z的表達(dá)式,以實(shí)現(xiàn)三維繪圖的目的,感興趣的可以了解下2024-02-02
在pytorch中實(shí)現(xiàn)只讓指定變量向后傳播梯度
今天小編就為大家分享一篇在pytorch中實(shí)現(xiàn)只讓指定變量向后傳播梯度,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2020-02-02
python matplotlib中的subplot函數(shù)使用詳解
今天小編就為大家分享一篇python matplotlib中的subplot函數(shù)使用詳解,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2020-01-01
Python模塊學(xué)習(xí) datetime介紹
Python提供了多個(gè)內(nèi)置模塊用于操作日期時(shí)間,像calendar,time,datetime。time模塊我在之前的文章已經(jīng)有所介紹,它提供的接口與C標(biāo)準(zhǔn)庫(kù)time.h基本一致2012-08-08
Python制作當(dāng)年第一款手機(jī)游戲-貪吃蛇游戲(練習(xí))
這篇文章主要介紹了Python制作當(dāng)年第一款手機(jī)游戲-貪吃蛇游戲,文章利用Python?pygame做一個(gè)貪吃蛇的小游戲而且講清楚每一段代碼是用來(lái)干嘛的,需要的朋友可以參考一下2022-01-01

