大数据提取路网

路网提取
一、 算法概述
本文算法是基于edelkamp和lilicao两位大牛的开源工程上优化实现的。开源工程是在: https://www.cs.uic.edu/bin/view/Bits/Software。但是算法仍然有很多问题,edelKamp会产生很多冗余Link,lilicao算法产生冗余Link更碎,在噪声比较大的数据表现不好。对此,我进行了改进。算法的输入输出都是mapinfo的tab文件格式。步骤如下:
1、 插入种子点
遍历每条轨迹,从起点开始每隔等间距(这里取50m)插入种子点,如图所示:
这里写图片描述
每个种子点除了位置信息,还会记录种子点的方向。这样插入的种子点可以有效地表示该条轨迹,避免了由于两个相邻轨迹点过远造成的后续合并时产生冗余Link,这里是否种子点间隔是否越短越好还有待验证。
同时在生成种子点的时候,还会进行合并,每个种子点生成时,还会搜索周边的种子点,如果距离小于间隔(同样是50米),且方向相差小于某个阈值(这里取25度)时,这两个种子点进行合并。合并的目的是减少种子点的数目,简化后续的运算量。

2、 聚类分析
生成种子点后,算法会依据类似于Kmeans的聚类算法进行位置纠正,首先找到种子点临近的轨迹,然后求轨迹与种子点垂直方向的交点,得到交点的位置及交点所在Edge的方向角(Edge是轨迹的线段集合,每两个轨迹点形成的线段称为Edge)。如图所示:
这里写图片描述
当种子点与交点Intersection point的距离Distance to closest trace小于某一阈值(这里取20m),且Cluster heading与Edge方向角相差不超过45度时(表示这一束轨迹来自于同一条道路),将交点加入种子点的trace points集合。然后根据trace points,重新计算种子点的位置和角度。重新计算后的种子点位置等于trace points集合的中心,角度等于所有与之相交的Edge角集合的平均值。
这一步是迭代进行的,与kmeans类似,反复移动种子点的位置,再根据新的种子点继续查找trace points,再次运算中心和角度,这个过程反复进行。直到位置不能再移动为止(小于某一阈值,这里取0.01米)。
经过这一步后,种子点落在了这束轨迹的中心位置,如图所示(绿色点是trace points, 红色点是种子点):
这里写图片描述
3、 连接种子点
接下来,按顺序遍历轨迹上的种子点,在遍历种子点时同时进行剔除种子点、合并种子点,生成Link、剔除Link。步骤如下:
1、剔除种子点:如果该种子点包含的trace points过少,表示经过该种子点的轨迹太少,有可能是轨迹漂了,这时将种子点剔除掉。
2、合并种子点:搜索种子点周边的其他种子点,如果它们之间距离小于某一阈值(这里取50m),并且角度相差不超过某一阈值(这里取45度)时进行合并。
3、生成Link:当前一个种子点与当前种子点中间不存在最小路径小于某一阈值(这里取5)时,生成一条Link连接两个种子点,初始化该条Link的计数Volume为1,如果存在,则对这条最小路径所有Link的Volume都加1。这是为了防止冗余Link的产生,否则会产生小环路。
步骤如图所示,图中的trips即是种子点:
这里写图片描述
4、 生成路网
最后一步是生成路网,遍历第3步生成的Link,当Link计数Volume大于某一阈值(这里取3)时,表示经过该Link的轨迹较多,保留。最后形成的Link集合即为所求。
二、 算法效果
原始数据:
这里写图片描述
提取后:
这里写图片描述

附下载地址:代码下载

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

神气爱哥

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值