经典的利用轨迹生成地图的算法与数据集可寻找于:Mapconstruction by pfoser

Mapconstruction by pfoser数据集中,雅典数据集投影坐标系为(UTM, GGRS87),EPSG为2100,芝加哥数据集投影坐标系为(NAD83 / UTM zone 16N),EPSG为26916,柏林数据集投影坐标系为(ETRS89 / UTM zone 33N),EPSG为25833

此处笔者介绍AhmedKaragiorgouBiagioni的算法

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.

路网可视化

AhmedKaragiorgou算法生成的都是节点文件与边的文件,这里笔者提供一个转化为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之经典算法体验的更多相关文章

  1. Java经典算法四十例编程详解+程序实例

    JAVA经典算法40例 [程序1]   题目:古典问题:有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第四个月后每个月又生一对兔子,假如兔子都不死,问每个月的兔子总数为多少?   1.程 ...

  2. JAVA经典算法50题(转)

    转载请注明出处:http://blog.csdn.net/l1028386804/article/details/51097928 JAVA经典算法50题 [程序1]   题目:古典问题:有一对兔子, ...

  3. 数据挖掘领域十大经典算法之—C4.5算法(超详细附代码)

    https://blog.csdn.net/fuqiuai/article/details/79456971 相关文章: 数据挖掘领域十大经典算法之—K-Means算法(超详细附代码)        ...

  4. Python3实现机器学习经典算法(三)ID3决策树

    一.ID3决策树概述 ID3决策树是另一种非常重要的用来处理分类问题的结构,它形似一个嵌套N层的IF…ELSE结构,但是它的判断标准不再是一个关系表达式,而是对应的模块的信息增益.它通过信息增益的大小 ...

  5. Python3实现机器学习经典算法(二)KNN实现简单OCR

    一.前言 1.ocr概述 OCR (Optical Character Recognition,光学字符识别)是指电子设备(例如扫描仪或数码相机)检查纸上打印的字符,通过检测暗.亮的模式确定其形状,然 ...

  6. Python3实现机器学习经典算法(一)KNN

    一.KNN概述 K-(最)近邻算法KNN(k-Nearest Neighbor)是数据挖掘分类技术中最简单的方法之一.它具有精度高.对异常值不敏感的优点,适合用来处理离散的数值型数据,但是它具有 非常 ...

  7. Python3实现机器学习经典算法(四)C4.5决策树

    一.C4.5决策树概述 C4.5决策树是ID3决策树的改进算法,它解决了ID3决策树无法处理连续型数据的问题以及ID3决策树在使用信息增益划分数据集的时候倾向于选择属性分支更多的属性的问题.它的大部分 ...

  8. 经典算法mark

    在平时找工作的时候,或多或少会遇到一些算法问题,很多都是比较经典或者网上已经流传很久的.只是我们没有接触过,所以不知道怎么解决. 在这儿,我自己总结一些我遇到的一些经典算法,给自己增加一点记忆,也给需 ...

  9. java经典算法题50道

    原文 JAVA经典算法50题[程序1]   题目:古典问题:有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第三个月后每个月又生一对兔子,假如兔子都不死,问每个月的兔子总数为多少?1.程序 ...

  10. javascript常用经典算法实例详解

    javascript常用经典算法实例详解 这篇文章主要介绍了javascript常用算法,结合实例形式较为详细的分析总结了JavaScript中常见的各种排序算法以及堆.栈.链表等数据结构的相关实现与 ...

随机推荐

  1. layui table 表头抖动

    原本table超出页面宽度(即table有横向滚动条)的情况下,缩放页面然后再设置定时器定时更新表单,会发现数据不变的时候table头部会左右抖动 而且th td比设置的minWidth 或者cell ...

  2. APICloud AVM框架列表组件list-view的使用、flex布局教程

    avm.js 是APICloud 推出的多端开发框架.使用 avm.js 一个技术栈可同时开发 Android & iOS 原生 App.小程序和 iOS 轻 App,且多端渲染效果统一:全新 ...

  3. org.apache.catalina.startup.HostConfig.deployWAR Error deploying web application archive

    昨天23点给一个老项目改完打包发布到云服务器后报错,Tomcat9 启动不了,白折腾了我几个小时. 这错误以前遇到过,由于太过久远已经忘记,特此记录 错误日志 22-Dec-2021 23:52:18 ...

  4. 3xx HTTP状态码的终极指南

    前言 如果你在管理一些网站,那么对HTTP重定向的理解对于可靠的网站性能至关重要.在这篇文章中,我们将全面了解一下3xx HTTP状态码,从这里你可以了解它们是如何工作的,如何更好地管理它们,以及它们 ...

  5. CSS 奇思妙想之酷炫倒影

    在 CSS 中,倒影是一种比较常见的效果.今天,我们就将尝试,使用 CSS 完成各类不同的倒影效果,话不多说,直接进入主题. 实现倒影的两种方式 首先,快速过一下在 CSS 中,实现倒影的 2 种方式 ...

  6. VUE上传表格文件发送后端,后端解析以及上传文件,前端进行解析的实现方法

    首先来说前端上传表格,然后利用纯前端技术进行解析表格的办法 详细步骤----请点击这里 接下来来说上传发送给后端的代码实现 html <input ref="myInput" ...

  7. Java自动装箱与拆箱

    装箱就是自动将基本数据类型转换为包装器类型(int-->Integer).调用方法:Integer的 valueOf(int) 方法 拆箱就是自动将包装器类型转换为基本数据类型(Integer- ...

  8. linux基础(部分讲解)

    linux常见岗位 Linux运维工程师.Linux高级架构师.运维开发工程师.数据库管理员.云计算架构师 作为python后端可以从事的linux岗位: 自动化运维.容器运维.DBA 注意:会的越多 ...

  9. SpringBoot+MyBatis的动态SQL、使用动态SQL时List传值错误解决方案

    目录 实现动态SQL的四种方式: 1.XML配置 2.脚本SQL 3.在方法中构建SQL 4.结构化SQL 关于动态SQL的List传值错误问题 1.错误代码 2.解决错误 实现动态SQL的四种方式: ...

  10. java应用定位高cpu占用几步操作

    1.top获取高cpu占用的pid,如266202.查看pid的线程情况, top -H -p 266203.把cpu高占用的线程号转为16进制,printf "%x" 26652 ...