Python+Kepler.gl轻松制作酷炫路径动画的实现示例


Posted in Python onJune 02, 2020

1. 简介

Kepler.gl相信很多人都听说过,作为Uber几年前开源的交互式地理信息可视化工具,kepler.gl依托WebGL强大的图形渲染能力,可以在浏览器端以多种形式轻松展示大规模数据集。

Python+Kepler.gl轻松制作酷炫路径动画的实现示例

 更令人兴奋的是Kepler.gl在去年推出了基于Python的接口库keplergl,结合jupyter notebook/jupyter lab的相关拓展插件,使得我们可以通过编写Python程序配合Kepler.gl更灵活地制作各种可视化作品。

Python+Kepler.gl轻松制作酷炫路径动画的实现示例

而随着近期keplergl的更新,更多的新特性得以同步到其Python生态中,本文就将针对其中的路径动画的制作方法进行介绍。

2.基于keplergl的路径动画

我们要制作的路径动画图主要用于表现特定路径上流的运动,譬如图3的例子来自Kepler.gl官方示例:

Python+Kepler.gl轻松制作酷炫路径动画的实现示例

而在官方的说明中描述了要绘制路径动画需要输入的数据格式:

Python+Kepler.gl轻松制作酷炫路径动画的实现示例

这是一个典型的GeoJSON格式LineString要素,特别的是其"coordinates"键对应的值不同于常规的[经度, 纬度]格式,而是代表着[经度, 纬度, 高度, 时间戳],其中高度非必要,可以设置为0,而时间戳则声明了轨迹动画在该时间点会到达的该点位置,即线要素上连续的点位置+时间戳定义了轨迹动画的运动模式,下面我们分步骤来实现。

3.构造数据与初始化html

这里我们以重庆市渝中区的OSM路网为演示示例数据,首先我们需要利用json模块来读取本地重庆市渝中区_osm路网_道路.geojson数据:

from keplergl import KeplerGl
import json
import time
 
with open('geometry/重庆市渝中区_osm路网_道路.geojson') as g:
  raw_roads = json.load(g)

随便打印出其中包含的某个线要素:

Python+Kepler.gl轻松制作酷炫路径动画的实现示例

可以看到,这时线要素内部包含的点还是[经度, 纬度]的格式,接下来我们为其虚构上时间戳信息,为了保证整个路网可视化的协调一致,将所有线要素的时间跨度固定在一个小时之内,保证每段路上从头到尾的轨迹动画都保持一致:

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])

接着再打印其中一个线要素:

Python+Kepler.gl轻松制作酷炫路径动画的实现示例

可以发现每个点元素都追加上高度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文件

Python+Kepler.gl轻松制作酷炫路径动画的实现示例

这一步的目的是初始化已嵌入目标数据的html文件,接下来你就可以关闭jupyter lab,在工作目录下找到已经导出的html文件直接打开,接下来的工作将在浏览器里进行。

到此这篇关于Python+Kepler.gl轻松制作酷炫路径动画的实现示例的文章就介绍到这了,更多相关Python+Kepler.gl路径动画内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木! 

Python 相关文章推荐
Python实现比较两个列表(list)范围
Jun 12 Python
Python验证码识别的方法
Jul 10 Python
Python数据可视化正态分布简单分析及实现代码
Dec 04 Python
python基础教程项目四之新闻聚合
Apr 02 Python
关于django 数据库迁移(migrate)应该知道的一些事
May 27 Python
详解用Python练习画个美队盾牌
Mar 23 Python
pyqt5让图片自适应QLabel大小上以及移除已显示的图片方法
Jun 21 Python
使用Pandas将inf, nan转化成特定的值
Dec 19 Python
关于tf.nn.dynamic_rnn返回值详解
Jan 20 Python
Flask和pyecharts实现动态数据可视化
Feb 26 Python
tensorflow 动态获取 BatchSzie 的大小实例
Jun 30 Python
工程师必须了解的LRU缓存淘汰算法以及python实现过程
Oct 15 Python
opencv+python实现鼠标点击图像,输出该点的RGB和HSV值
Jun 02 #Python
简单介绍一下pyinstaller打包以及安全性的实现
Jun 02 #Python
Python几种常见算法汇总
Jun 02 #Python
opencv-python的RGB与BGR互转方式
Jun 02 #Python
解决pyinstaller打包运行程序时出现缺少plotly库问题
Jun 02 #Python
Pytorch 使用opnecv读入图像由HWC转为BCHW格式方式
Jun 02 #Python
基于pycharm实现批量修改变量名
Jun 02 #Python
You might like
PHP Token(令牌)设计
2008/03/15 PHP
PHP教程 预定义变量
2009/10/23 PHP
PHP把JPEG图片转换成Progressive JPEG的方法
2014/06/30 PHP
PHP使用Http Post请求发送Json对象数据代码解析
2020/07/16 PHP
基于jQuery的弹出框插件
2012/03/18 Javascript
js 获取radio按钮值的实例
2013/08/17 Javascript
jquery实现多级下拉菜单的实例代码
2013/10/02 Javascript
javascript通过className来获取元素的简单示例代码
2014/01/10 Javascript
JQuery中extend使用介绍
2014/03/13 Javascript
JavaScript实现跑马灯抽奖活动实例代码解析与优化(一)
2016/02/16 Javascript
jQuery实现点击后高亮背景固定显示的菜单效果【附demo源码下载】
2016/09/21 Javascript
详解axios在vue中的简单配置与使用
2017/05/10 Javascript
AngularJS+Bootstrap3多级导航菜单的实现代码
2017/08/16 Javascript
微信小程序实现文字无限轮播效果
2018/12/28 Javascript
详解vue 不同环境配置不同的打包命令
2019/04/07 Javascript
ES6的异步终极解决方案分享
2019/07/11 Javascript
LayUI switch 开关监听 获取属性值、更改状态的方法
2019/09/21 Javascript
用JS实现选项卡
2020/03/23 Javascript
js最全的数组的降维5种办法(小结)
2020/04/28 Javascript
浅谈vue.watch的触发条件是什么
2020/11/07 Javascript
[01:29:17]RNG vs Liquid 2019国际邀请赛淘汰赛 败者组 BO3 第二场 8.23
2019/09/05 DOTA
一个基于flask的web应用诞生 flask和mysql相连(4)
2017/04/11 Python
Python多进程并发与多线程并发编程实例总结
2018/02/08 Python
numpy找出array中的最大值,最小值实例
2018/04/03 Python
python 限制函数调用次数的实例讲解
2018/04/21 Python
Python 3.8 新功能全解
2019/07/25 Python
python函数装饰器之带参数的函数和带参数的装饰器用法示例
2019/11/06 Python
django中的数据库迁移的实现
2020/03/16 Python
阿里健康官方海外旗舰店:阿里健康国际自营
2017/11/24 全球购物
Java语言程序设计测试题判断题部分
2013/01/06 面试题
房地产营销策划方案
2014/02/08 职场文书
小学三八妇女节活动方案
2014/03/16 职场文书
机电专业求职信
2014/06/14 职场文书
入党政审材料范文
2014/12/24 职场文书
经费申请报告范文
2015/05/18 职场文书
幼儿园教师辞职信
2019/06/21 职场文书