大致功能介绍:
-
用web或客户端嵌入地图页面
-
能够通过时间和车辆查看轨迹,为了不影响界面效果和提高查询效率,可以控制车辆数量和查询时间范围
-
轨迹可以设定是否进行路网校正
-
选择某个时间点,可以显示这个时间点所有车辆或指定范围车辆的位置,界面上会出现符合条件的所有车辆的位置
5 可以点击某辆车查看信息,并且可以联动显示出该车辆从设定时刻开始的动画轨迹,车辆轨迹可以随时车辆图标的移动动态增长
-
可以通过某个时间范围,定位某辆车或某几辆车的位置,并且动画显示这段时间的轨迹,可以用不同颜色区分
-
静态热力图:显示某个时间段内累计的热力图,热力图数据可以来自车辆位置(从分钟数据读取)和上车点(从od数据读取)
-
热力图可以选择是否进行聚类的方案,并提供聚类参数选择
-
动态热力图,可以设定几个方式,按分钟变化的动态热力图,15分钟,30分钟,60分钟,同样动态热力图也可以copy静态热力图的几个数据方案
-
可以统计载客出租车的数量,和载客率的全天变化。横坐标是时间轴。可以按15分钟,30分钟,60分钟间隔来统计,注意是所有车辆
-
可以显示所有车辆或指定车辆的全天载客率,全天公里数,全天载客公里数,全天空载公里数表格,并可以导出为csv或excel文件
-
路程分析:规定以小于四干米为短途,四干米至八干米为中途,大于八干米为长途,查看每天三种距离运输的占比
-
道路速度:利用中短途的订单数据中的预估距离与起止时间,计算订单的平均速度
-
基于轨迹绘制彩色动态线段,按速度热力颜色变化指示道路拥堵情况,类似百度、高德导航的实时道路颜色。可以按时间间隔动态的显示轨迹的颜色变化。路网路径映射可以采用HMM和最短路径法。
-
ETA(预计到达时间), 预测出租车从起点到终点的预计到达时间,使用机器学习来预测,可以地图选点并显示结果和轨迹
出租车轨迹分析系统功能解析:
Flask是一个使用 Python 编写的轻量级 Web 应用框架。其 WSGI 工具箱采用 Werkzeug ,模板引擎则使用 Jinja2 。
这个系统是一个基于Flask的出租车轨迹分析平台,集成了多种数据可视化和分析功能。逻辑思维和算法功能点两个方面解析每个模块:
1. 轨迹查询
逻辑思维:
基于时间范围和车辆ID筛选数据
提供原始轨迹和优化轨迹的对比展示
支持路网校正功能
算法功能点:
**轨迹校正算法:**将GPS点匹配到最近的路网节点(correct_to_road函数)
**轨迹平滑算法:**使用样条插值(splprep和splev)平滑轨迹
**路网分析:**利用NetworkX处理路网数据,计算路径长度和时间成本

2. 时间点查询
逻辑思维:
查询特定时间点(±时间范围)的车辆位置
突出显示车辆状态(载客/空车)和速度信息
算法功能点:
最近邻搜索:找到最接近查询时间点的轨迹点
时间差计算:精确计算车辆位置与查询时间的时间差

3. 轨迹动画
逻辑思维:
按时间序列展示车辆移动轨迹
可调整动画播放速度
不同车辆使用不同颜色区分
算法功能点:
时间序列处理:按时间顺序组织轨迹点
前端动画渲染:通过HTML/JavaScript实现轨迹动画效果

4. 热力图对比
逻辑思维:
对比原始热力图和聚类后的热力图
按时间片展示热点变化
算法功能点:
DBSCAN聚类:对轨迹点进行空间聚类(cluster_points函数)
热力图生成:使用Folium的HeatMap插件
数据聚合:按时间窗口聚合轨迹点




5. 动态热力图
逻辑思维:
展示随时间变化的热力分布
可选择原始数据或聚类数据模式
可调整时间间隔
算法功能点:
时间序列分组:按用户选择的时间间隔分组数据
HeatMapWithTime:使用Folium的时间热力图插件
实时数据处理:动态加载和处理OD数据


6. 载客统计
逻辑思维:
统计不同时间段的载客率
分析车辆运营效率
按日/小时粒度展示数据
算法功能点:
时间窗口分析:按固定时间间隔统计载客状态
载客率计算:载客时间占总运营时间的比例
数据透视:使用Pandas进行数据聚合和统计


7. 路程分析
逻辑思维:
将行程按距离分类(短途/中途/长途)
分析不同距离行程的分布比例
基于GPS点计算行程距离
算法功能点:
Haversine公式:计算两点间球面距离
行程分割:根据状态变化分割连续轨迹
分类统计:按距离阈值分类并统计比例

8. 道路速度
逻辑思维:
分析不同道路类型的平均速度
区分短途和中途行程的速度特征
提供统计指标(均值、中位数等)
算法功能点:
速度计算:基于距离和时间差计算瞬时速度
道路类型匹配:关联轨迹点与路网属性
描述性统计:计算各种统计指标

9. 速度热力图
逻辑思维:
用颜色编码展示路段平均速度
线宽反映车流量
支持路网校正
算法功能点:
速度映射算法:将速度值映射到颜色梯度(speed_to_color函数)
路段聚合:合并相近轨迹段并计算平均速度
可视化编码:用颜色和线宽双重编码数据
10. ETA 预测
逻辑思维:
基于路网的最短路径计算
考虑车辆类型和道路类型的影响
提供时间预估和置信区间
算法功能点:
最短路径算法:Dijkstra算法(通过NetworkX实现)
随机森林回归:用于ETA时间预测(RandomForestRegressor),2.使用随机森林回归模型,特征包括: 距离、时间、车辆类型、节点度数等
路网分析:考虑道路类型和拓扑结构
最近节点查找:将用户输入的坐标映射到路网中最近的节点
最短路径计算:使用Dijkstra算法计算起点到终点的最短时间路径
使用了高德地图的api统计
一、项目概况
本次实训项目为"基于B/S结构Flask+Folium技术的出租车轨迹可视化分析系统",旨在通过对深圳市出租车GPS数据的处理与分析,构建一个功能完善的轨迹分析平台。
系统基于Flask框架开发,集成了数据清洗、轨迹分析、热力图可视化、载客统计、速度分析及ETA预测等核心功能,为城市交通管理和出租车运营分析提供数据支持。
项目通过对出租车轨迹数据的处理与分析,挖掘城市交通模式、载客规律及道路速度分布等信息,为城市交通规划与管理提供数据支持。团队完成从数据清洗、算法设计到系统实现的全流程开发任务,最终交付具备完整功能的 Web 应用系统。
二、项目设计与实施
1 、项目需求分析
需求合理性: 出租车轨迹数据包含丰富的城市交通信息,通过分析可获取载客模式、道路拥堵情况等,对交通优化具有实际意义。
数据可行性: 项目使用深圳市真实出租车GPS数据(4692万条原始记录),包含位置、时间、速度等字段,数据量充足且格式规范,可支撑各项分析需求。
技术可行性: 采用 Python 的 Flask 框架、Pandas 数据处理库、Folium 地图可视化库,机器学习模型选用随机森林算法等,技术成熟且社区支持完善,能高效实现所需功能。
安全合规 :数据处理过程中不涉及用户隐私信息,仅使用匿名化的车辆轨迹数据,符合数据安全要求。
细节关键点: 轨迹校正需精准匹配路网节点,热力图聚类需合理设置 DBSCAN 参数,ETA 预测需综合考虑道路类型与车辆类型。
2 、项目分析与设计
(1) 系统架构设计
前端:HTML+CSS+JavaScript,使用Folium地图可视化
后端:Flask框架处理业务逻辑
数据处理:Pandas进行数据清洗和分析
算法模块:轨迹校正与平滑、DBSCAN聚类、随机森林回归、Dijkstra最短路径算法
(2) 功能模块设计:
1. 轨迹查询
逻辑思维:基于时间范围和车辆ID筛选数据,提供原始轨迹和优化轨迹的对比展示,支持路网校正功能
算法功能点:
轨迹校正算法:将GPS点匹配到最近的路网节点(correct_to_road函数)
轨迹平滑算法:使用样条插值(splprep和splev)平滑轨迹
路网分析:利用NetworkX处理路网数据,计算路径长度和时间成本
2. 时间点查询
逻辑思维:查询特定时间点(±时间范围)的车辆位置,突出显示车辆状态(载客/空车)和速度信息
算法功能点:
最近邻搜索:找到最接近查询时间点的轨迹点
时间差计算:精确计算车辆位置与查询时间的时间差
3. 轨迹动画
逻辑思维:按时间序列展示车辆移动轨迹,可调整动画播放速度,不同车辆使用不同颜色区分
算法功能点:
时间序列处理:按时间顺序组织轨迹点
前端动画渲染:通过HTML/JavaScript实现轨迹动画效果
4. 热力图对比
逻辑思维:对比原始热力图和聚类后的热力图,按时间片展示热点变化
算法功能点:
DBSCAN聚类:对轨迹点进行空间聚类(cluster_points函数)
热力图生成:使用Folium的HeatMap插件
数据聚合:按时间窗口聚合轨迹点
5. 动态热力图
逻辑思维:展示随时间变化的热力分布,可选择原始数据或聚类数据模式,可调整时间间隔
算法功能点:
时间序列分组:按用户选择的时间间隔分组数据
HeatMapWithTime:使用Folium的时间热力图插件
实时数据处理:动态加载和处理OD数据
6. 载客统计
逻辑思维:统计不同时间段的载客率,分析车辆运营效率,按日/小时粒度展示数据
算法功能点:
时间窗口分析:按固定时间间隔统计载客状态
载客率计算:载客时间占总运营时间的比例
数据透视:使用Pandas进行数据聚合和统计
7. 路程分析
逻辑思维:将行程按距离分类(短途/中途/长途)、分析不同距离行程的分布比例、基于GPS点计算行程距离
算法功能点:
Haversine公式:计算两点间球面距离
行程分割:根据状态变化分割连续轨迹
分类统计:按距离阈值分类并统计比例
8. 道路速度
逻辑思维:分析不同道路类型的平均速度、区分短途和中途行程的速度特征、提供统计指标(均值、中位数等)
算法功能点:
速度计算:基于距离和时间差计算瞬时速度
道路类型匹配:关联轨迹点与路网属性
描述性统计:计算各种统计指标
9. 速度热力图
逻辑思维:用颜色编码展示路段平均速度、线宽反映车流量、支持路网校正
算法功能点:
速度映射算法:将速度值映射到颜色梯度(speed_to_color函数)
路段聚合:合并相近轨迹段并计算平均速度
可视化编码:用颜色和线宽双重编码数据
10. ETA 预测
逻辑思维:基于路网的最短路径计算、考虑车辆类型和道路类型的影响、提供时间预估和置信区间
算法功能点:
最短路径算法:Dijkstra算法(通过NetworkX实现)
随机森林回归:用于ETA时间预测(RandomForestRegressor),2.使用随机森林回归模型,特征包括: 距离、时间、车辆类型、节点度数等
路网分析:考虑道路类型和拓扑结构
最近节点查找:将用户输入的坐标映射到路网中最近的节点
最短路径计算:使用Dijkstra算法计算起点到终点的最短时间路径
使用了高德地图的api统计
(3) 数据采集与清洗
数据采集:读取排序后的出租车 GPS 数据,采用两种方法,分模块和未分模块的版本:
版本1(未分模块)
原始数据4692 7855条,重复的数据74928条,异常值47092,最后剩下4680 5835
版本2(分模块)
初始数据:46,927,855 行
去重后:46,853,191 行(移除了146,598条重复记录)
移除异常后:约46,805,113 行(移除了48,078条异常记录)
两者进行数据分析对比
数据清洗:
去重处理:移除 146,598 条重复记录,保留唯一轨迹点。
异常值处理:过滤短时间内状态异常波动(如 0-1-0)的记录,共移除 48,078 条异常数据。
OD 数据提取:识别载客行程的起点和终点,生成约 50 万条 OD 记录。
(4) 数据分析与算法设计
1. 轨迹处理模块:
轨迹校正:通过correct_to_road函数将 GPS 点匹配到最近路网节点,使用欧氏距离计算节点相似度。
轨迹平滑:利用smooth_path函数,基于样条插值(splprep和splev)平滑轨迹曲线。
2. 热力图分析模块:
DBSCAN 聚类:cluster_points函数使用密度聚类算法,对轨迹点进行空间聚合,参数eps=0.002、min_samples=3。
时间序列处理:按 15/30/60 分钟间隔分组数据,生成动态热力图。
3. 统计分析模块:
载客率计算:按时间窗口统计载客车辆数与总车辆数的比例。
路程分类:基于 Haversine 公式计算距离,将行程分为短途(<4km)、中途(4-8km)、长途(>8km)。
4.ETA 预测模块:
最短路径:使用 NetworkX 的 Dijkstra 算法,基于路网时间成本计算最优路径。
随机森林模型:训练RandomForestRegressor模型,特征包括距离、时间、车辆类型等,平均绝对误差约 2.3 分钟。
(5) 可视化设计
地图展示:使用 Folium 创建交互式地图,支持轨迹、热力图、ETA 路径的可视化。
颜色编码:速度热力图通过speed_to_color函数将速度映射为红到绿的渐变颜色。
动态效果:利用HeatMapWithTime实现随时间变化的热力图动画。
3 、系统测试与集成
(1) 单元测试
轨迹校正算法测试:验证GPS点能否正确匹配到路网节点,选取 100 个 GPS 点,手动验证校正后节点的准确性,匹配成功率达 92%。
热力图生成测试:检查数据聚合和渲染效果,使用测试数据集验证 DBSCAN 聚类结果,聚类准确率较好。
ETA 模型测试:通过 100 组真实行程数据测试,预测时间与实际时间的平均误差为 2.8 分钟。
(2) 集成测试
模块交互测试:验证轨迹查询与热力图模块的数据共享,确保筛选条件同步生效。
多模块协同工作测试:协作正常流畅
性能测试:加载 30 辆车辆数据时,页面响应时间 < 3 秒;加载 100 辆车辆时,响应时间 < 5 秒。
兼容性测试:在 Chrome、Firefox、Edge 浏览器中均能正常显示与交互。
源文件实验报告提取链接
通过网盘分享的文件:
链接: https://pan.baidu.com/s/1RVT5mE7DeI0ZdVWs0X6gQw?pwd=mcwa 提取码: mcwa