使用uber数据集和kelpergl做路网动态可视化

kepler作为一个开源地图可视化工具,其整合数据和地图渲染的能力都非常给力。相较于arcgis的图层功能,kepler也可以在一个版面中使用多个图层做出可视化的效果。

这里先给列举一个动态小例子,其效果非常酷炫,而所使用的方法和代码也非常简单有效。

数据获取

首先我们要获得一份格式满足geojson要求的数据,相关字段可以查阅官方文档, 点击 kepler的API文档 进行查阅。
需要的geojson数据其字段要包括 [经度,纬度,高度,时间] 四个字段。前三个字段确定物体(如交通工具)的空间位置,后一个字段则代表到相应位置时所对应的时间。

为了得到这样一个格式的数据,首先需要寻找到一个路网的shp文件,做gis的同学应该非常熟悉,文末也会附上北京路网的shp文件。shp文件需要转化为geojson格式才能使用,有能力的同学可以写代码转化,这里提供一个网站链接:格式转化

得到北京路网的geojson文件后,导入pandas中可以看到数据格式如下。这里数据的类型是lineString,如果是多线,面或者多面,使用下面的方法可能无法实现。所以尽量保证是单线类型。得到的文件命名为beijing.json。
在这里插入图片描述
但所获取的geojson数据只有经纬度的字段,为了模拟在道路上行驶的过程,需要通过python代码进一步构建出高度和时间字段。所有代码和标注如下:

import pandas as pd
import numpy as np
import time
beijing_data = pd.read_json('beijing.json')#读取数据,json文件和代码文件同级
lenth = len(beijing_data['geometries'])#道路条数
start_time = time.mktime(time.strptime('2021-7-30 18:00:00',"%Y-%m-%d %H:%M:%S"))#创建开始时间
end_time =time.mktime(time.strptime('2021-7-30 19:00:00',"%Y-%m-%d %H:%M:%S"))#创建结束时间
diff_time = end_time -start_time#开始时间和结束时间的差值
for i in range(lenth):
    for j in range(len(beijing_data['geometries'][i]['coordinates'])):
        beijing_data['geometries'][i]['coordinates'][j].append(0)#数据中添加高度
        beijing_data['geometries'][i]['coordinates'][j].append(int(start_time + (diff_time/len(beijing_data['geometries'][i]['coordinates']))*j))#数据中添加时间,相当于构造的一个小时平分到每段路中。可视化中可以看到构建时间内在一段路上的动态过程
beijing_data.to_json('beijing_change.json')#将数据保存  

Kepler.GL可视化

然后就是将所得到的数据进行可视化了。可以在官网上的demo直接拖动数据,但因为上传数据有限,并且可能会受到网络影响,所以建议使用其python的api,安装方式也非常简单,直接在相应的环境配置中打开终端,输入清华镜像(如果pip install keplergl成功也可以):

 pip install -i https://pypi.tuna.tsinghua.edu.cn/simple keplergl

安装如果提示

 error: Microsoft Visual C++ 14.0 or greater is required. Get it with "Microsoft C++ Build Tools": https://visualstudio.microsoft.com/visual-cpp-build-tools/

则可以选择C++ 14.0下载visualstudio再安装相关组件。如果还有其他问题,那就是版本问题,请选择和python版本相对应的keplergl版本进行安装,不然会一直报错。
安装成功后导入kelper和数据,建立图层,代码和注释如下:

import pandas as pd
from keplergl import KeplerGl
data_json = pd.read_json('beijing_change.json')#读取数据
map_1 = KeplerGl(height =1000, data ={'flow':data_json})
map_1     

之后keplergl的组件就会将地图显示在jupyter notebook中,只要手动操作配置就能调出想要的效果了,具体的参数和图像依然可以参考kepler的API文档。我自己的配置如下,共包含两个图层:在这里插入图片描述
在这里插入图片描述
最后动态播放就能得到下面的效果了:在这里插入图片描述
北京路网文件:
链接:https://pan.baidu.com/s/1lPDv1t86GmQtJJDJMHovGg
提取码:ceo1
看在作者琐碎的工作上一键三连啦,笔芯。

  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值