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 for Informatics 第11章之正则表达式(四)
Apr 21 Python
使用 Python 实现简单的 switch/case 语句的方法
Sep 17 Python
利用Python将数值型特征进行离散化操作的方法
Nov 06 Python
PyTorch: 梯度下降及反向传播的实例详解
Aug 20 Python
python二进制读写及特殊码同步实现详解
Oct 11 Python
pytorch实现用CNN和LSTM对文本进行分类方式
Jan 08 Python
python实现根据给定坐标点生成多边形mask的例子
Feb 18 Python
Tensorflow之梯度裁剪的实现示例
Mar 08 Python
在 Pycharm 安装使用black的方法详解
Apr 02 Python
Docker如何部署Python项目的实现详解
Oct 26 Python
Python实现图片指定位置加图片水印(附Pyinstaller打包exe)
Mar 04 Python
python文件与路径操作神器 pathlib
Apr 01 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的mssql数据库连接类实例
2014/11/28 PHP
浅谈php处理后端&接口访问超时的解决方法
2016/10/29 PHP
php-fpm服务启动脚本的方法
2018/04/27 PHP
PHP利用Mysql锁解决高并发的方法
2018/09/04 PHP
php实现微信企业转账功能
2018/10/02 PHP
js弹窗代码 可以指定弹出间隔
2010/07/03 Javascript
js nextSibling属性和previousSibling属性概述及使用注意
2013/02/16 Javascript
select、radio表单回显功能实现避免使用jquery载入赋值
2013/06/08 Javascript
给超链接添加特效鼠标移动展示提示信息且随鼠标移动
2013/10/17 Javascript
Jquery设置attr的disabled属性控制某行显示或者隐藏
2014/09/25 Javascript
javascript Slip.js实现整屏滑动的手机网页
2015/11/25 Javascript
jQuery ajax分页插件实例代码
2016/01/27 Javascript
jQuery插件编写步骤详解
2016/06/03 Javascript
jquery基本选择器匹配多个元素的实现方法
2016/09/05 Javascript
JS控件bootstrap datepicker使用方法详解
2017/03/25 Javascript
node.js平台下的mysql数据库配置及连接
2017/03/31 Javascript
浅析Vue 和微信小程序的区别、比较
2018/08/03 Javascript
Node.js Koa2使用JWT进行鉴权的方法示例
2018/08/17 Javascript
微信小程序之swiper滑动面板用法示例
2018/12/04 Javascript
vue实现拖拽进度条
2021/03/01 Vue.js
Python 文件操作的详解及实例
2017/09/18 Python
Python实现将doc转化pdf格式文档的方法
2018/01/19 Python
python微信公众号之关注公众号自动回复
2018/10/25 Python
Python选择网卡发包及接收数据包
2019/04/04 Python
Python通过Pillow实现图片对比
2020/04/29 Python
薇姿法国官网:Vichy法国
2021/01/28 全球购物
Exception类的常用方法
2012/06/16 面试题
会计系毕业求职信
2014/08/07 职场文书
学校党的群众路线教育实践活动个人整改方案
2014/10/31 职场文书
2015年小学生国庆节演讲稿
2015/07/30 职场文书
给校长的建议书作文400字
2015/09/14 职场文书
Python如何识别银行卡卡号?
2021/06/10 Python
Django路由层如何获取正确的url
2021/07/15 Python
Go语言应该什么情况使用指针
2021/07/25 Golang
Python获取江苏疫情实时数据及爬虫分析
2021/08/02 Python
GoFrame框架数据校验之校验结果Error接口对象
2022/06/21 Golang