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冒泡排序注意要点实例详解
Sep 09 Python
python WindowsError的错误代码详解
Jul 23 Python
python中实现k-means聚类算法详解
Nov 11 Python
python 获取键盘输入,同时有超时的功能示例
Nov 13 Python
PyCharm 设置SciView工具窗口的方法
Jan 15 Python
python3实现指定目录下文件sha256及文件大小统计
Feb 25 Python
简单了解django索引的相关知识
Jul 17 Python
Python操作SQLite数据库过程解析
Sep 02 Python
python多项式拟合之np.polyfit 和 np.polyld详解
Feb 18 Python
python+opencv边缘提取与各函数参数解析
Mar 09 Python
python如何对链表操作
Oct 10 Python
Python实现王者荣耀自动刷金币的完整步骤
Jan 22 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执行速率优化技巧小结
2008/03/15 PHP
PHP中Array相关函数简介
2016/07/03 PHP
JSON 编辑器实现代码
2009/12/06 Javascript
jQuery.ajax 用户登录验证代码
2010/10/29 Javascript
最好用的省市二级联动 原生js实现你值得拥有
2013/09/22 Javascript
推荐25个超炫的jQuery网格插件
2014/11/28 Javascript
jquery实现红色竖向多级向右展开的导航菜单效果
2015/08/31 Javascript
Javascript实现单例模式
2016/01/24 Javascript
jQuery实现验证年龄简单思路
2016/02/24 Javascript
Angularjs分页查询的实现
2017/02/24 Javascript
详解Vue2 无限级分类(添加,删除,修改)
2017/03/07 Javascript
Vue2几种常见开局方式详解
2017/09/09 Javascript
ES6中javascript实现函数绑定及类的事件绑定功能详解
2017/11/08 Javascript
微信小程序 功能函数小结(手机号验证*、密码验证*、获取验证码*)
2017/12/08 Javascript
vue中mint-ui的使用方法
2018/04/04 Javascript
vue服务端渲染添加缓存的方法
2018/09/18 Javascript
推荐15个最好用的JavaScript代码压缩工具
2019/02/13 Javascript
浅谈Vue3 Composition API如何替换Vue Mixins
2020/04/29 Javascript
简单解析Django框架中的表单验证
2015/07/17 Python
Anaconda入门使用总结
2018/04/05 Python
Python实现查看系统启动项功能示例
2018/05/10 Python
解决pandas无法在pycharm中使用plot()方法显示图像的问题
2018/05/24 Python
Python 面试中 8 个必考问题
2018/11/16 Python
树莓派动作捕捉抓拍存储图像脚本
2019/06/22 Python
详解python metaclass(元类)
2020/08/13 Python
浅析与CSS3的loading动画加载相关的transition优化
2015/05/18 HTML / CSS
美国购买和销售礼品卡平台:Raise
2017/01/13 全球购物
高级Java程序员面试要点
2013/08/02 面试题
教师见习期自我鉴定
2014/04/28 职场文书
司法局2014法制宣传日活动总结
2014/11/01 职场文书
2014年小学德育工作总结
2014/12/05 职场文书
2016入党培训心得体会范文
2016/01/08 职场文书
正能量励志演讲稿三分钟(范文)
2019/07/11 职场文书
JavaScript中关于预编译、作用域链和闭包的理解
2021/03/31 Javascript
解决Navicat for MySQL 连接 MySQL 报2005错误的问题
2021/05/29 MySQL
PyQt5结合QtDesigner实现文本框读写操作
2021/06/11 Python