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中常见的各种排序算法以及堆.栈.链表等数据结构的相关实现与 ...
随机推荐
- MySQL 性能压测工具-sysbench,从入门到自定义测试项
sysbench是一个开源的.基于LuaJIT(LuaJIT 是 Lua 的即时编译器,可将代码直接翻译成机器码,性能比原生 lua 要高) 的.可自定义脚本的多线程基准测试工具,也是目前用得最多的 ...
- Servlet层
package com.neu.servlet; import java.io.IOException;import java.io.PrintWriter;import java.util.Arra ...
- Java/JDK各版本主要特性汇总
目录 Java18(2022.3) Java17(2021.9)(LTS版本) Java16(2021.3) Java15(2020.9) Java14(2020.3) Java13(2019.9) ...
- 【openEuler系列】部署文件共享服务Samba
个人名片: 对人间的热爱与歌颂,可抵岁月冗长 Github:念舒_C.ying CSDN主页️:念舒_C.ying 个人博客 :念舒_C.ying 目录 1 配置环境 2 配置软件安装源 3 安装文 ...
- 基于.NetCore开发博客项目 StarBlog - (23) 文章列表接口分页、过滤、搜索、排序
前言 上一篇留的坑,火速补上. 在之前的第6篇中,已经有初步介绍,本文做一些补充,已经搞定这部分的同学可以快速跳过,基于.NetCore开发博客项目 StarBlog - (6) 页面开发之博客文章列 ...
- 大数据 - DWM层 业务实现
DWM 建表,需要看 DWS 需求. DWS 来自维度(访客.商品.地区.关键词),为了出最终的指标 ADS 需求指标 DWT 为什么实时数仓没有DWT,因为它是历史的聚集,累积结果,实时数仓中不需要 ...
- ssm——mybatis整理
目录 1.mybatis框架概述 2.直接使用jdbc连接数据库带来的问题 3.mybatis连接池 3.1.mybatis连接池yml配置 3.2.mybatis连接池xml配置 4.一个简单的my ...
- 贪心算法Dijkstra
Dijkstra 最短路径问题 : 给定一个带权有向图 G = (V, E, W),同时给定一个源点 u (u ∈ V),我们要找出从源点 u 出发到其它各点的最短路径距离,并得出这些最短路径的具体路 ...
- 痞子衡嵌入式:探讨i.MXRT下FlexSPI driver实现Flash编程时对于中断支持问题
大家好,我是痞子衡,是正经搞技术的痞子.今天痞子衡给大家介绍的是i.MXRT下FlexSPI driver实现Flash编程时对于中断支持问题. 前段时间有客户在官方社区反映 i.MXRT1170 下 ...
- [论文总结] Genecology and Adaptation of Forest Trees 林木的基因生态学与适应性
文章目录 介绍 进化的力量 基因学方法 种源试验 短期基因检测实验 表型与遗传估计 差异化 基因学趋势 预测对气候变化的反应 介绍 基因生态学是研究种内遗传变异与环境条件的关系.它揭示了种群适应环境的 ...