如何洞悉城市人群移动规律?DataV海量轨迹可视化实践解析

简介:

轨迹数据和我们的生活息息相关:小到扫地机器人的室内清洁线路,大到跨省跨国跨洲的旅行,短到一次共享单车骑行,长到十年如一日的通信基站记录。对城市治理而言,挖掘人群和车辆的移动规律,能帮助决策者更好地规划城市交通、保障公共安全、响应突发事件,让城市变得更智能、更高效。

经典轨迹展现方式的局限

经典轨迹展现方式的局限

轨迹数据描述了时空维度中,移动对象的空间位置和属性随时间的变化。在这些移动对象(如人、车辆等)移动过程中,每隔一段时间,他们的位置及其他属性会通过所携带的设备(如手机、传感器等)被记录下来,形成了一个采样点数据。对于一个移动对象而言,多个采样点数据按时间顺序排列,构成了该对象轨迹数据。

然而,轨迹数据来源诸多(包括但不限于手机信令数据、车辆GPS数据、Wifi-嗅探数据、签到数据等)且时时刻刻有新数据产生,导致轨迹数据体量十分巨大,造成严重的视觉混淆和渲染压力。因此,我们借助可视分析技术,通过将轨迹数据转化流场数据,不仅保留轨迹数据的主要特征,同时大大降低数据体量,从而更好地洞察城市中人群的移动规律。

在使用可视分析技术对轨迹数据进行分析和挖掘时,一个很重要的任务是将轨迹可视化在交互界面上,为用户提供观察和探索的空间。对于轨迹数据的表达方法,在这个领域已经有了一定的研究,传统的方法有路径连接法和飞线法。其中,路径连接法将每个对象的轨迹数据中的采样点按照时间顺序进行连线,再使用其他的视觉通道,如颜色、宽度和线形等编码对象的其他属性。这种方法是最直观的轨迹展现形式,它能够清晰地展现移动对象途径的空间位置,DataV在“基础平面地图”和“3D地图”组件中“线热力层”子组件采用的就是这种可视化形式。

飞线法和路径连接法相似,不同之处在于,它通过动画的形式模拟移动对象的移动,一般情况,使用一个带有箭头的线段来编码移动对象,线段会按照时间顺序在采样点之间移动,这种方法能够更加清晰地反映移动对象的运动方向,并且具有较为炫酷的视觉效果,DataV各地图组件中的“飞线层”和“3D地图”组件中的“弧线层”、“轨迹层”、“路网轨迹层”都是这种可视化方法的实现,去年双十一惊艳亮相的“闪电图”中的闪电特效同样是采用飞线法实现的。

ea6bf0b8fc5005d4eae80d9cfd642bc8fab78667

路径连接法应用:采用DataV中的“线热力层”组件可视化全国物流干网

d1f686bde950f56013b4785ec753328ab84d5583

飞线法应用:采用DataV可视化杭州一天的出租车轨迹

5dd2af34589cac45da3ad78f283d64f37ed74e86

飞线法应用:DataV双十一全国快递“闪电”大屏,每条闪电模拟了宝贝沿着真实路网从卖家发向买家的过程

以上两种可视化形式都是经典轨迹数据可视化方法,但它们也存在力不从心的时候,当针对海量轨迹数据应用这些方法时,由于数据体量惊人,原先直观清晰的视觉表达出现了大量的遮挡和重叠,如果处理不当,会很大程度上影响用户的观察和探索。此外,数据体量的提升带来了巨大的绘制压力,用户需要不断地提升硬件设备的性能才能应对,无形之中提高了轨迹分析的门槛。因此,针对海量轨迹数据,我们需要一种更为有效的可视化方法来洞察城市中移动对象的移动规律。

流场生成算法

经过研究,我们提出了一种针对海量轨迹数据的流场生成算法,能够将特定时间片段内的轨迹数据转化为流场数据,从而对“人流”、“车流”等进行表达和刻画。这种方法的特点在于,它没有直接对海量轨迹数据进行可视化,而是将轨迹数据进行一定的聚合,提取轨迹数据的主要特征,将轨迹数据转化为流场数据,再对选择合适的可视化方法对流场数据进行展现。由于流场数据保留了轨迹数据主要特征的同时大大降低了数据体量,因此能够在消除视觉遮挡和减轻绘制压力的同时,清晰直观地反映城市中移动对象的移动的规律。

算法的主要流程如下图所示:

e0fc59fd46da5965334a654b4bb1b28b10208fc6

1)统计轨迹点向量

轨迹数据是由若干个采样点数据构成,采样点数据包括轨迹点位置、时间及其他属性信息。我们首先根据所有采样点数据统计出轨迹点的位置,再根据轨迹数据中两两采样点之间的流入流出情况,计算每个轨迹点出入向量的方向和大小,其中大小又包括轨迹数量和移动对象的速度;

2)过滤轨迹点向量

对于上一步中所得到的轨迹点的所有出入向量,方法将根据自定义的轨迹数量阈值对其进行过滤,筛选得到每个轨迹点的主要出入向量;

3)生成轨迹点主向量

在这一步中,方法根据用户自定义的流场方向,对上一步得到的每个轨迹点所有的出入主向量按方向进行分类和聚合,在各个方向上生成至多一个主出向量和至多一个主入向量。在生成各个方向上的主向量的同时,需要统计各个方向内向量的平均速度、平均移动距离和平均差异角度;

4)扩散轨迹点主向量

接下来,将n*m的网格平铺到用户指定的区域内,将每个轨迹点在各个方向上的主向量按照一定条件和规则扩散到n*m的网格中。其中,在进行扩散时,扩散在网格内的向量,方向和速度保持不变,轨迹数量递减,而只有满足以下条件,一个网格才会受到某主向量的辐射影响:

 ●   被扩散网格中心与轨迹点之间的距离不大于轨迹点的平均移动距离;
 ●   当扩散向量为入向量时,被扩散网格中心与轨迹点形成的向量与扩散主向量之间的角度应该处于[180-平均差异角度,180+平均差异角度]之间;当扩散向量为出向量时,被扩散网格中心与轨迹点形成的向量与扩散主向量之间的角度应该处于[-平均差异角度,+平均差异角度]之间。

5)计算网格主向量

在上一步中,同一个网格可能会受多个向量的辐射影响,产生多个扩散向量,因此,在这一步中,需要计算每个网格中各方向上的聚合向量(包含了流场方向、移动速度和轨迹数量),得到最终的流场数据。

在方法中,需要定义轨迹数量阈值、流场方向和网格个数。轨迹数量阈值主要用于过滤轨迹点向量,过滤是为了保留主要的轨迹,防止“噪声”对结果准确性的干扰;而对流场进行分向计算,则避免了相对方向上的移动抵消,从而能够保留更多的细节信息,使得最终结果更加准确;而在定义网格个数时,需要平衡个数较多所带来的计算压力和个数较少带来的粗糙效果。为了使得方法具有一定的自适应性,我们在扩散向量时,并没有采用固定的角度和距离,我们使用各方向上的平均移动距离和平均差异角度,使得扩散能够适应不同的向量分布,结果更加合理。

轨迹流场案例

以上是我们提出的针对海量轨迹数据的流场生成算法的简要流程,下图是方法根据某市2017年8月14日早上8:00到8:10间的手机信令数据可视化的效果:

830acecc94b2d202c1030314a1afdfbd522b6899

在这个案例中,我们采用了粒子流动来表现流场数据,网格内粒子的数量即为轨迹数量(移动对象数量),粒子的移动方向代表移动对象的移动方向,粒子的颜色和速度均表示移动对象的移动速度,其中速度越大颜色越接近蓝色,速度越小颜色越接近红色。同时,我们提供了一些控件,用于调整流场方向、轨迹数量阈值和网格个数等参数,用于交互查询。通过这种方式,大大降低了绘制量并减少了视觉重叠,从而能够清晰观察城市内人群移动。

DataV不仅在数据大屏领域为各行各业的客户提供支持和服务,在大数据的可视分析的研究上,也在进行积极的探索。无论是最近推出的智慧场馆解决方案,还是海量轨迹的流场生成方法,都是新的尝试,我们将不忘初心,继续努力,为大家带来更好的可视化产品。


原文发布时间为:2018-10-22
本文作者:关会华
本文来自云栖社区合作伙伴“ 阿里技术”,了解相关信息可以关注“ 阿里技术”。
相关实践学习
基于Hologres轻松玩转一站式实时仓库
本场景介绍如何利用阿里云MaxCompute、实时计算Flink和交互式分析服务Hologres开发离线、实时数据融合分析的数据大屏应用。
阿里云实时数仓实战 - 项目介绍及架构设计
课程简介 1)学习搭建一个数据仓库的过程,理解数据在整个数仓架构的从采集、存储、计算、输出、展示的整个业务流程。 2)整个数仓体系完全搭建在阿里云架构上,理解并学会运用各个服务组件,了解各个组件之间如何配合联动。 3 )前置知识要求   课程大纲 第一章 了解数据仓库概念 初步了解数据仓库是干什么的 第二章 按照企业开发的标准去搭建一个数据仓库 数据仓库的需求是什么 架构 怎么选型怎么购买服务器 第三章 数据生成模块 用户形成数据的一个准备 按照企业的标准,准备了十一张用户行为表 方便使用 第四章 采集模块的搭建 购买阿里云服务器 安装 JDK 安装 Flume 第五章 用户行为数据仓库 严格按照企业的标准开发 第六章 搭建业务数仓理论基础和对表的分类同步 第七章 业务数仓的搭建  业务行为数仓效果图  
相关文章
|
1月前
|
安全 Cloud Native Linux
CMake Install:深度解析与实践(二)
CMake Install:深度解析与实践
44 0
|
1月前
|
Unix 编译器 Linux
CMake Install:深度解析与实践(一)
CMake Install:深度解析与实践
59 0
|
1月前
|
机器学习/深度学习 数据可视化 算法
机器学习-可解释性机器学习:随机森林与fastshap的可视化模型解析
机器学习-可解释性机器学习:随机森林与fastshap的可视化模型解析
117 1
|
1月前
|
数据采集 数据可视化 大数据
Python在数据科学中的实际应用:从数据清洗到可视化的全流程解析
Python在数据科学中的实际应用:从数据清洗到可视化的全流程解析
38 1
|
1月前
|
存储 安全 编译器
【C++ 17 新功能 std::visit 】深入解析 C++17 中的 std::visit:从原理到实践
【C++ 17 新功能 std::visit 】深入解析 C++17 中的 std::visit:从原理到实践
70 0
|
9天前
|
Java API 数据库
深入解析:使用JPA进行Java对象关系映射的实践与应用
【4月更文挑战第17天】Java Persistence API (JPA) 是Java EE中的ORM规范,简化数据库操作,让开发者以面向对象方式处理数据,提高效率和代码可读性。它定义了Java对象与数据库表的映射,通过@Entity等注解标记实体类,如User类映射到users表。JPA提供持久化上下文和EntityManager,管理对象生命周期,支持Criteria API和JPQL进行数据库查询。同时,JPA包含事务管理功能,保证数据一致性。使用JPA能降低开发复杂性,但需根据项目需求灵活应用,结合框架如Spring Data JPA,进一步提升开发便捷性。
|
30天前
|
监控 Linux 编译器
Linux C++ 定时器任务接口深度解析: 从理论到实践
Linux C++ 定时器任务接口深度解析: 从理论到实践
70 2
|
1月前
|
存储 并行计算 算法
C++动态规划的全面解析:从原理到实践
C++动态规划的全面解析:从原理到实践
95 0
|
1月前
|
设计模式 缓存 Java
单例模式解析:从理论到代码实践
单例模式解析:从理论到代码实践
11 0
|
1月前
|
存储 编解码 算法
音视频编程ffmepg中的关键术语与概念:深度解析与实践(二)
音视频编程ffmepg中的关键术语与概念:深度解析与实践
60 0

推荐镜像

更多