GPS地图生成02之经典算法体验
经典的利用轨迹生成地图的算法与数据集可寻找于:Mapconstruction by pfoser
Mapconstruction by pfoser数据集中,雅典数据集投影坐标系为(UTM, GGRS87),EPSG为2100,芝加哥数据集投影坐标系为(NAD83 / UTM zone 16N),EPSG为26916,柏林数据集投影坐标系为(ETRS89 / UTM zone 33N),EPSG为25833
此处笔者介绍Ahmed、Karagiorgou与Biagioni的算法
1. Ahmed算法
此算法基于增量合并的方式,不断加入新的轨迹进行匹配,得到新的路网
代码可下载自:GitHub - pfoser/mapconstruction: Map Construction Algorithms
代码基于Java构建和shell脚本,最好是在安装有Java环境的Linux或者Mac平台上运行
切换到Ahmed目录下,编辑script_to_run.sh文件:
#To Compile:
CODE_PATH="MapConstruction/" #path to the MapConstruction folder.
cd $CODE_PATH
javac -d bin/ src/mapconstruction2/*.java
#To Run:
INPUT_PATH="" #path to the folder that constains all input tracks
OUTPUT_PATH="" #path to the folder where output will be written
EPS=150.0 #epsilon in meters
HAS_ALTITUDE=false #if input file has altitude information
ALT_EPS=4.0 #minimum altitude difference in meters between two streets
java -cp bin/ mapconstruction2.MapConstruction $INPUT_PATH $OUTPUT_PATH $EPS $HAS_ALTITUDE $ALT_EPS
设置好路径与参数,运行script_to_run.sh脚本,等待程序结束
2. Karagiorgou算法
此算法基于交叉口连接,找出道路中的交叉口进行连接,得到路网
代码可下载自:GitHub - pfoser/mapconstruction: Map Construction Algorithms
代码基于Matlab构建
代码运行步骤在代码的README.txt中已经详细说明
1) Add the two directories /source and /libraries to the current working path of the MATLAB
2) The source code is in the /source directory
3) The trajectory files should be in the form of: <x y timestamp>
4) You should firstly run the intersection_nodes_extraction.m file
This file loads trajectories and generates intersection nodes
5) You should then run the tracebundle.m file
This file loads trajectories and intersection nodes and generates road network vertices and edges.
It generates two files tracebundle_vertices.txt, tracebundle_edges.txt.
路网可视化
Ahmed、Karagiorgou算法生成的都是节点文件与边的文件,这里笔者提供一个转化为GeoJSON从而可视化的代码片段
vertices_dict = {}
with open('./data/resultvertices.txt','r') as vertices:
for line in vertices:
tmp = line.split(',')
vertices_dict[int(tmp[0])] = [float(tmp[1]),float(tmp[2][:-1])]
edge_arr = []
with open('./data/resultedges.txt','r') as edges:
for line in edges:
tmp = line.split(',')
edge_arr.append([vertices_dict[int(tmp[1])],vertices_dict[int(tmp[2])]])
import os
import json
def save_trajs(data, path, type_style):
res = {
"type": "FeatureCollection",
"features": []
}
for i, traj in enumerate(data):
t = {
"type": "Feature",
"geometry": {
"type": "LineString", "coordinates": traj
},
"properties": {
"id": i
}
}
res["features"].append(t)
if os.path.exists(path):
os.remove(path)
with open(path, "w") as f:
if type_style == "LineString":
json.dump(res, f)
save_trajs(edge_arr, "./final_map.json", "LineString")
生成的GeoJSON文件可直接拖入QGIS软件进行可视化
3. Biagioni算法
此算法基于KDE,利用核密度估计图像生成路网
代码和数据下载地址:Bits - Software (uic.edu)
代码基于Python 2 构建
环境搭建过程可见:Map Inference in the Face of Noise and Disparity代码环境搭建 - 当时明月在曾照彩云归 - 博客园 (cnblogs.com)
GPS地图生成02之经典算法体验的更多相关文章
- Java经典算法四十例编程详解+程序实例
JAVA经典算法40例 [程序1] 题目:古典问题:有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第四个月后每个月又生一对兔子,假如兔子都不死,问每个月的兔子总数为多少? 1.程 ...
- JAVA经典算法50题(转)
转载请注明出处:http://blog.csdn.net/l1028386804/article/details/51097928 JAVA经典算法50题 [程序1] 题目:古典问题:有一对兔子, ...
- 数据挖掘领域十大经典算法之—C4.5算法(超详细附代码)
https://blog.csdn.net/fuqiuai/article/details/79456971 相关文章: 数据挖掘领域十大经典算法之—K-Means算法(超详细附代码) ...
- Python3实现机器学习经典算法(三)ID3决策树
一.ID3决策树概述 ID3决策树是另一种非常重要的用来处理分类问题的结构,它形似一个嵌套N层的IF…ELSE结构,但是它的判断标准不再是一个关系表达式,而是对应的模块的信息增益.它通过信息增益的大小 ...
- Python3实现机器学习经典算法(二)KNN实现简单OCR
一.前言 1.ocr概述 OCR (Optical Character Recognition,光学字符识别)是指电子设备(例如扫描仪或数码相机)检查纸上打印的字符,通过检测暗.亮的模式确定其形状,然 ...
- Python3实现机器学习经典算法(一)KNN
一.KNN概述 K-(最)近邻算法KNN(k-Nearest Neighbor)是数据挖掘分类技术中最简单的方法之一.它具有精度高.对异常值不敏感的优点,适合用来处理离散的数值型数据,但是它具有 非常 ...
- Python3实现机器学习经典算法(四)C4.5决策树
一.C4.5决策树概述 C4.5决策树是ID3决策树的改进算法,它解决了ID3决策树无法处理连续型数据的问题以及ID3决策树在使用信息增益划分数据集的时候倾向于选择属性分支更多的属性的问题.它的大部分 ...
- 经典算法mark
在平时找工作的时候,或多或少会遇到一些算法问题,很多都是比较经典或者网上已经流传很久的.只是我们没有接触过,所以不知道怎么解决. 在这儿,我自己总结一些我遇到的一些经典算法,给自己增加一点记忆,也给需 ...
- java经典算法题50道
原文 JAVA经典算法50题[程序1] 题目:古典问题:有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第三个月后每个月又生一对兔子,假如兔子都不死,问每个月的兔子总数为多少?1.程序 ...
- javascript常用经典算法实例详解
javascript常用经典算法实例详解 这篇文章主要介绍了javascript常用算法,结合实例形式较为详细的分析总结了JavaScript中常见的各种排序算法以及堆.栈.链表等数据结构的相关实现与 ...
随机推荐
- 【每日一题】【List与Array互转】【工具类的使用】2021年12月10日-56. 合并区间
以数组 intervals 表示若干个区间的集合,其中单个区间为 intervals[i] = [starti, endi] .请你合并所有重叠的区间,并返回一个不重叠的区间数组,该数组需恰好覆盖输入 ...
- go-carbon 1.5.3 版本发布, 修复已知 bug 和新增俄罗斯语翻译文件
carbon 是一个轻量级.语义化.对开发者友好的golang时间处理库,支持链式调用. 目前已被 awesome-go 收录,如果您觉得不错,请给个star吧 github.com/golang-m ...
- MyBatis详解(二)
前言 本篇幅是继 MyBatis详解(一)的下半部分. MyBatis执行Sql的流程分析 [1]基于前面已经将XML文件进行build解析了并且返回了SqlSessionFactory [1.1]那 ...
- JAVA中生成随机数Random VS ThreadLocalRandom性能比较
前言 大家项目中如果有生成随机数的需求,我想大多都会选择使用Random来实现,它内部使用了CAS来实现. 实际上,JDK1.7之后,提供了另外一个生成随机数的类ThreadLocalRandom,那 ...
- UVA439 Knight Moves
原题Vjudge 题目大意 有一个骑士,他可以骑马日字型跳跃,问他从A点到B点最少要几步 解题思路 这题就是一个特别裸的广搜板子 它的主要问题在于输入输出 输入的数据我们可以用\(pair\)读入,第 ...
- [编程基础] 常用html标签使用介绍
常用html标签使用介绍 本文主要记录常用的html标签使用说明,用起来的时候偶尔查查. 常用html标签列表 标签 英文全拼 作用 特点 <html></html> html ...
- Hadoop详解(07) - Hdfs数据压缩
Hadoop详解(07) - Hdfs数据压缩 概述 压缩技术能够有效减少底层存储系统(HDFS)读写字节数.压缩提高了网络带宽和磁盘空间的效率.在运行MR程序时,I/O操作.网络数据传输. Shuf ...
- C语言指针常见问题
我们在学C语言时,指针是我们最头疼的问题之一,针对C语言指针,博主根据自己的实际学到的知识以及开发经验,总结了以下使用C语言指针时常见问题. 指针 指针做函数参数 学习函数的时候,讲了函数的参数都是值 ...
- 已完成 10000 多次提交,Solon Java Framework v1.12.1 发布
一个更现代感的 Java 应用开发框架:更快.更小.更自由.没有 Spring,没有 Servlet,没有 JavaEE:独立的轻量生态.主框架仅 0.1 MB. @Controller public ...
- Miller-Rabin 与 Pollard-Rho 算法学习笔记
前言 Miller-Rabin 算法用于判断一个数 \(p\) 是否是质数,若选定 \(w\) 个数进行判断,那么正确率约是 \(1-\frac{1}{4^w}\) ,时间复杂度为 \(O(\log ...