-
2021-05-06 19:25:14
leuvenmapmatching
基于隐马尔可夫原理进行地图匹配的python包,但是官方文档说明较简略。
https://leuvenmapmatching.readthedocs.io/en/latest/usage/introduction.htmlnoiseplanet
匹配完的轨迹可视化效果很好,值得学习。基于leuvenmapmatching进行的二次开发。
https://github.com/arthurdjn/noiseplanet
fastmapmatching
封装了ST-Matching算法,有c++和python两个接口,需在linux环境下运行。
https://fmm-wiki.github.io/参考资料
- Yin Lou, Chengyang Zhang, Yu Zheng, Xing Xie. Map-Matching for Low-Sampling-Rate GPS Trajectories. In Proceedings of ACM SIGSPATIAL Conference on Geographical Information Systems (ACM GIS 2009).
- 郑宇轨迹数据挖掘的slides
https://www.microsoft.com/en-us/research/publication/trajectory-data-mining-an-overview/
更多相关内容 -
一种适于车辆导航系统的快速地图匹配算法 (2005年)
2021-05-16 23:06:27在分析影响地图匹配算法实时性、鲁棒性及匹配精度因素的基础上,依据车辆运动的连续性,引入道路网络的分块思想,并利用车辆行驶的位置、方向信息及实际道路网络的拓扑特性,提出一种时间复杂度为O(c)的快速地图... -
角度和距离分段占优地图匹配算法 (2014年)
2021-06-16 05:31:38为了更好的实现车辆导航系统的实时性和精确性,研究了地图匹配算法的各要素。采用两级交错式网格划分,并结合全球定位系统实时水平估计误差实现对电子地图待匹配区域划分。利用车辆行驶位置、方向、道路几何拓扑关系和... -
基于Zernike形状矩的地图匹配算法 (2011年)
2021-04-29 00:14:01地图匹配算法的有效性和可靠性对于智能交通系统而言是非常重要的,而目前存在的地图匹配算法在一些复杂环境下(如道路交叉口)仍然不能提供合理的输出。采用D-S证据理论融合当前车辆位置信息和方向信息可以有效地扩大待... -
matlab剪切图片代码-ST-Matching:用于地图匹配的ST匹配算法的MATLAB实现
2021-05-26 19:43:00本文针对低采样率GPS轨迹提出了一种新的全局地图匹配算法ST-Matching.ST-Matching考虑(1)道路网络的空间几何和拓扑结构以及(2)时空轨迹的速度限制。 基于时空分析,构造候选图,从中识别出最佳匹配路径序列。 ... -
地图匹配算法实践
2016-06-28 09:47:45地图匹配(Map Matching)是指将行车轨迹的经纬度采样序列与数字地图路网匹配的过程,其本质上是平面线段序列的模式匹配问题( Alt等,2003)。 在实际应用中,GPS采样信号的质量会严重影响地图匹配结果:...1 背景
如下图所示,1、2、3 这三个点是汽车的GPS定位结果,尽管汽车是在道路上,但定位结果与道路存在偏差。地图匹配(Map Matching)是指将行车轨迹的经纬度采样序列与数字地图路网匹配的过程,其本质上是平面线段序列的模式匹配问题( Alt等,2003)。
在实际应用中,GPS采样信号的质量会严重影响地图匹配结果:采样频率的降低、定位误差的加大、信号的丢失,都会使匹配的不准确性增加。这些情况在实际应用中经常出现。如何在这些情况下仍能保持较高的路径匹配准确率是个值得研究的问题。
2012年ACM SIGSPATIAL首次设立的竞赛,其内容就是地图匹配。三年前本人有幸和国防科大的杨岸然博士一同参加了该竞赛,收获良多。
2 地图匹配算法综述
2.1 以使用到的信息来划分
现有的算法可被分成四类:几何、拓扑、概率、高级。
a)基于几何的算法考虑GPS点与道路的几何信息,如距离、角度等;
b)基于拓扑的算法使用道路拓扑信息来控制;
c)概率方法通过考虑GPS点的概率;
d)高级的算法往往综合考虑使用全面信息,有卡尔曼滤波、模糊逻辑模型、隐式马尔可夫模型等等。2.2 以考虑采样点的范围来划分
根据考虑采样点的范围,可分成局部/增量算法、全局算法。
a)局部/增量算法是贪婪算法,每次确定一个匹配点,下个点从已经确定的匹配点开始。这些方法根据距离和方向相似性来找到局部最优点或边。(在线匹配)
b)全局算法是要从路网中找到一条与采样轨迹最接近的匹配轨迹。为了测量采样轨迹和匹配轨迹的相似性,大多数算法使用“Frechet距离”或者是“弱Frechet距离”。还有时空匹配算法、投票算法等。(离线匹配)
2.3 以采样点的频率来划分
根据轨迹数据的采样频率,现有的地图匹配算法可分成:
a)高频采样算法(所有局部算法、部分全局算法如Frechet距离判别法等)
b)低频采样算法(ST-matching算法、IVVM算法一般认为30s及其以上为低频采样,1s~10s为高频采样。
3 我们的训练数据
a)路网数据: Washington State U.S.A.(有128万条边 )
b)GPS数据:采样频率为1~30s,
4 采用的算法
使用ST-Matching算法(Lou等,2009),该算法是一种全局算法,能综合几何信息( GPS点与道路的距离)、道路拓扑信息(最短路径)、道路属性信息(每条道路的限速),具有精度高,稳定性好等优点。
4.1 准备候选集
4.2 确定权重
a)空间因素权重(Fs)
b)时间因素权重(Ft)
5 实验结果
6 技术实现要点
6.1 地图投影问题
问题:原始道路网数据的坐标与轨迹点的坐标并不在一个坐标体系下,不能直接进行计算!
解决方法:使用PRJ4地图投影库将两个数据投影到统一坐标下。
6.2 大路网信息数据量的读取
问题:该路网有128万条边,我们采用C++,如果读取每条边都进行new和delete操作,将执行128万次,效率极低!
解决方法:使用内存池技术。
6.3 最短路径算法的选择
问题:候选集不同层次的候选点之间都要计算最短路径,使用最常用的Dijkstra最短路径算法效率极低!
解决方法:使用启发式最短路径算法:A-star算法。
6.4 索引
问题:由于竞赛真实测试会使用很多不同的路网数据,所以建立索引没必要,但是计算某一GPS点的候选集时路网所有数据会参与计算,效率很低;
解决方法:计算某一GPS点的候选集时,先进行切片过滤,比如以该GPS点为中心,生成200m的正方形框,然后在该框里建立新的道路网,这时计算候选集时只需要与该框内的道路网数据计算。
-
一种基于理想隐性马尔科夫模型的地图匹配算法
2021-03-25 11:41:41一种基于理想隐性马尔科夫模型的地图匹配算法 -
gps地图匹配算法
2013-04-22 21:34:59gps地图匹配算法,对地图匹配的几种算法进行深入分析和比较 -
数据融合matlab代码-IF-Matching:用于地图匹配的IF匹配算法的MATLAB实现
2021-05-22 13:10:33在本文中,我们提出了一种使用相关元信息来描述运动对象的新颖模型,并提出了一种称为IF匹配的地图匹配算法。 它可以处理许多模棱两可的情况,而现有方法无法正确匹配这些情况。 我们在整个城市的道路网络上使用出租... -
地图匹配(map-matching)
2021-09-27 09:34:56文章目录地图匹配算法实现前言一、代码环境介绍?二、使用步骤1.引入库2.读入数据3.读入数据4.构造相交的位置5、将点匹配到相应的道路上总结 前言 GPS数据由于信号不良、通信异常、定位误差等原因,不能很好地落在...地图匹配(map-matching)
地图匹配算法实现
前言
GPS数据由于信号不良、通信异常、定位误差等原因,不能很好地落在道路上,所以需要对GPS数据进行地图匹配,与道路进行关联。数据预处理阶段,必须要做的工作之一就是地图匹配,地图匹配就是,把车辆的行驶轨迹和电子地图数据库中的道路网进行比较,在地图上找出与行驶轨迹最相近的路线,并将实际定位数据映射到直观的数字地图上。匹配前的地图如下所示
提示:以下是本篇文章正文内容,下面案例可供参考
一、代码环境介绍?
本文中使用的开发工具为PyCharm和ArcMap10.2中内置的Python环境,其中内置的Python环境是Python2.7。
二、使用步骤
1.引入库
代码如下(示例):
#-*- encoding: UTF-8 -*- import sys reload(sys) sys.setdefaultencoding("utf-8") import arcpy from arcpy import env # 工作空间,即文件的输出路径 env.workspace = r'C:\Users\96571\Documents\ArcGIS\Default.gdb'
2.读入数据
代码如下(示例):
road_name = r"C:\Users\96571\Desktop\map_matching\data_0914\51公交线路\51公交线路.shp" #道路名称,注意要输入绝对路径 point_path = r"C:\Users\96571\Desktop\map_matching\data_0914\站点筛选0914\bus2_point.shp" #点的文件名称,注意要输入绝对路径
该数据为本人电脑中存储的路径,后续读者可以根据自己的需求来修改。
3.读入数据
地图匹配的类和创建缓冲区代码如下:
class MapMatching: def __init__(self, Road_Name=None, point_path=None): self.Road_Name = Road_Name self.point_path = point_path def make_buffer(self): Road_Name = self.Road_Name print 'Buffer' buffer = arcpy.Buffer_analysis(Road_Name, '#', '20 Meters', 'FULL', 'ROUND', 'ALL', '#') buffer = buffer.getOutput(0) # buffer的路径 self.buffer_Name = buffer.split('\\')[-1]
4.构造相交的位置
缓冲区与GPS点的数据相交的代码如下,目的是为了将缓冲区内部的点都提取出来,为之后的地图匹配做准备:
def intersect_anaysis(self): # 缓冲区与GPS数据相交 point_path = self.point_path print 'Intersect' GPS_Intersect = arcpy.Intersect_analysis(point_path + ' #;' + self.buffer_Name + ' #', '#', 'ALL', '#', 'INPUT') GPS_Intersect = GPS_Intersect.getOutput(0) # 相交后GPS数据的路径 self.GPS_Intersect_Name = GPS_Intersect.split('\\')[-1] # GPS数据,对Road路网,做近邻分析 arcpy.Near_analysis(self.GPS_Intersect_Name, self.Road_Name, '#', 'LOCATION', 'NO_ANGLE') # 注意:location参数为必要的 # 对每一条GPS数据提取地图匹配后的位置
5、将点匹配到相应的道路上
根据此代码可将点匹配到相应的道路上:
def update_data(self): dic = {} cursor = arcpy.da.SearchCursor(self.GPS_Intersect_Name, ['OBJECTID', 'NEAR_X', 'NEAR_Y']) for row in cursor: dic[row[0]] = [row[1], row[2]] del cursor del row # 更新几何 cursor = arcpy.da.UpdateCursor(self.GPS_Intersect_Name, ['OBJECTID', 'SHAPE@XY']) for row in cursor: row[1] = dic[row[0]] cursor.updateRow(row) del cursor del row
总结
地图匹配之后的效果如下所示
-
pinche:拼车匹配算法模块
2021-06-30 09:34:35#百度地图API 一: 二: -
坐标点地图匹配方法
2020-12-08 09:48:36性能提升方法 为了结局在空间数据库中快速匹配到附近的道路点,特采用geohash算法: 导入数据的roadpoint表结构如下: 建立空间索引的sql如下: update roadpoint set gisp = point(lng,lat) where gisp is null;...1.概述
1.1.背景
随着公司业务发展,车定位轨迹数据越来越多,目前发现轨迹数据存在偏移问题,本文主要目的在于用图数据库和空间数据库来解决偏移问题,做到轨迹纠偏,将偏移的定位点放置到附近的道路上。
例如在上图中有个点不在轨迹上,也不在道路上,本文将通过计算的方法给它找到附近最近的道路上的点。
1.2.绑路方法
绑路的方法主要分为以下几个步骤:
1、获取路网数据保存至Neo4j数据库
2、将路网中的点数据保存到Postgresql数据库
3、输入一组经纬度点,分别找到每个点附近出现的在路上的点,在图数据库中查找这些点之间是否有连线关系,组成周围存在的路。
4、从周围存在的路中找到该点对于每个路线段的垂线在该路网线段的垂足,并计算垂足到该点的距离。
5、找出最近的距离的垂足作为该点绑路的点。
如上图中,就有三个备选点,分别对绑路的点对三个路网线段做垂线获得备选点,然后求垂足A、B、C与绑路的点的距离,选取A、B、C中到该点距离最短的作为结果输出。
2.数据清洗与保存
2.1.数据格式
获取的路网数据经过清洗格式如下图所示:
上图中第一幅表示连线关系第二幅为点坐标。
将连线关系和点的经纬度保存至图数据库中,将点的经纬度保存至空间数据库中。
空间数据库表格式:
CREATE TABLE "public"."roadpoint" (
"id" serial NOT NULL,
"lat" float8 DEFAULT 0,
"lng" float8 DEFAULT 0,
"gisp" point
)
WITH (OIDS=FALSE)
;
ALTER TABLE "public"."roadpoint" OWNER TO "bmkpdev";
COMMENT ON COLUMN "public"."roadpoint"."lat" IS '纬度';
COMMENT ON COLUMN "public"."roadpoint"."lng" IS '经度';
CREATE INDEX "georoadpointgis_idx" ON "public"."roadpoint" USING gist ("gisp") WITH (fillfactor = 85);
其中gisp是空间数据类型,后建立空间索引georoadpointgis_idx,用于检索最近的路网当中的点。
图数据库中创建点的Cypher语句如下:
创建点
create (:point {lng:114.3086811059,lat:30.335394066259});
create (:point {lng:114.30853126854,lat:30.336053775889});
创建点的关系
match (a:point),(b:point)
where a.lng=114.3086811059 and a.lat=30.335394066259 and b.lng=114.30853126854 and b.lat=30.336053775889
create (a)-[r:to]->(b)
return r;
从Neo4j的web管理界面上可以查找到该点:
为了加快在图数据库中的查询速度 需要在图数据库中建立索引,索引语句如下:
create index on:node(lat)
create index on:node(lng)
2.2.Python连接Neo4j
获取图数据库中的点与点之间是否有连线关系,查询代码如下:
find_relationship = test_graph.match_one(start_node=find_code_1,end_node=find_code_3,bidirectional=False)
print find_relationship
2.3.Python连接Postgresql
示例代码如下:
import psycopg2# 数据库连接参数
conn = psycopg2.connect(database="platoon", user="postgres", password="postgres", host="192.168.10.80", port="5432")
cur = conn.cursor()
cur.execute("CREATE TABLE test(id serial PRIMARY KEY, num integer,data varchar);")# insert one item
cur.execute("INSERT INTO test(num, data)VALUES(%s, %s)", (1, 'aaa'))
cur.execute("INSERT INTO test(num, data)VALUES(%s, %s)", (2, 'bbb'))
cur.execute("INSERT INTO test(num, data)VALUES(%s, %s)", (3, 'ccc'))
cur.execute("SELECT * FROM test;")
rows = cur.fetchall() # all rows in tableprint(rows)for i in rows:
print(i)
conn.commit()
cur.close()
conn.close()
2.4.垂足计算公式
假设图中O点为待绑定的点,AB为周围的路网点:
垂足坐标如下:
y坐标和x坐标对称。
筛选选数据库小数点后面两位不一样就抛弃
找出最近的十个点的SQL:
select *,geo_distance(gisp,point(114.404498,30.511795)) as distance from roadpoint where geo_distance(gisp,point(114.404498,30.511795)) < 0.62 ORDER BY distance limit 10
2.5.计算结果展示
未进行绑路的点的分布如图
从上图看出效果比较理想,实现了定位点到道路点的转化
程序有几个可以优化的地方:
1、根据方向判断在哪条路上
2、计算点到直线的距离有更快的方法
3、选择子集有更快的方法
求(x0, y0)到经过(x1, y1); (x2, y2)直线的距离。
直线方程中
A = y2 - y1,
B = x1- x2,
C = x2 y1 - x1 y2;
点的直线的距离公式为:
double d = (fabs((y2 - y1) x0 +(x1 - x2) y0 + ((x2 y1) -(x1 y2)))) / (sqrt(pow(y2 - y1, 2) + pow(x1 - x2, 2)));
2.6.Neo4j快速导入数据的方法
数据格式如下:
导入语句如下:
using periodic commit 1000 load csv from "file:///pointinfo.csv" as line create (:point {toFloat(lng:line[0]), lat:toFloat(line[1])})
3.性能提升方法
为了结局在空间数据库中快速匹配到附近的道路点,特采用geohash算法:
导入数据的roadpoint表结构如下:
建立空间索引的sql如下:
update roadpoint set gisp = point(lng,lat) where gisp is null;
增加新列geohashcode的sql如下:
ALTER table roadpoint add geohashcode varchar(20) DEFAULT NULL;
CREATE INDEX "geohash_index" ON "public"."roadpoint" USING hash ("geohashcode");
3.1.感性认识GeoHash
首先来点感性认识,http://openlocation.org/geohash/geohash-js/ 提供了在地图上显示geohash编码的功能。
1)GeoHash将二维的经纬度转换成字符串,比如下图展示了北京9个区域的GeoHash字符串,分别是WX4ER,WX4G2、WX4G3等等,每一个字符串代表了某一矩形区域。也就是说,这个矩形区域内所有的点(经纬度坐标)都共享相同的GeoHash字符串,这样既可以保护隐私(只表示大概区域位置而不是具体的点),又比较容易做缓存,比如左上角这个区域内的用户不断发送位置信息请求餐馆数据,由于这些用户的GeoHash字符串都是WX4ER,所以可以把WX4ER当作key,把该区域的餐馆信息当作value来进行缓存,而如果不使用GeoHash的话,由于区域内的用户传来的经纬度是各不相同的,很难做缓存。
2)字符串越长,表示的范围越精确。如图所示,5位的编码能表示10平方千米范围的矩形区域,而6位编码能表示更精细的区域(约0.34平方千米)
3)字符串相似的表示距离相近(特殊情况后文阐述),这样可以利用字符串的前缀匹配来查询附近的POI信息。如下两个图所示,一个在城区,一个在郊区,城区的GeoHash字符串之间比较相似,郊区的字符串之间也比较相似,而城区和郊区的GeoHash字符串相似程度要低些。
城区 郊区
通过上面的介绍我们知道了GeoHash就是一种将经纬度转换成字符串的方法,并且使得在大部分情况下,字符串前缀匹配越多的距离越近,回到我们的案例,根据所在位置查询来查询附近餐馆时,只需要将所在位置经纬度转换成GeoHash字符串,并与各个餐馆的GeoHash字符串进行前缀匹配,匹配越多的距离越近。
3.2.GeoHash算法的步骤
下面以北海公园为例介绍GeoHash算法的计算步骤
2.1. 根据经纬度计算GeoHash二进制编码
地球纬度区间是[-90,90], 北海公园的纬度是39.928167,可以通过下面算法对纬度39.928167进行逼近编码:
1)区间[-90,90]进行二分为[-90,0),[0,90],称为左右区间,可以确定39.928167属于右区间[0,90],给标记为1;
2)接着将区间[0,90]进行二分为 [0,45),[45,90],可以确定39.928167属于左区间 [0,45),给标记为0;
3)递归上述过程39.928167总是属于某个区间[a,b]。随着每次迭代区间[a,b]总在缩小,并越来越逼近39.928167;
4)如果给定的纬度x(39.928167)属于左区间,则记录0,如果属于右区间则记录1,这样随着算法的进行会产生一个序列1011100,序列的长度跟给定的区间划分次数有关。
根据纬度算编码
bit min mid max
1 -90.000 0.000 90.000
0 0.000 45.000 90.000
1 0.000 22.500 45.000
1 22.500 33.750 45.000
1 33.7500 39.375 45.000
0 39.375 42.188 45.000
0 39.375 40.7815 42.188
0 39.375 40.07825 40.7815
1 39.375 39.726625 40.07825
1 39.726625 39.9024375 40.07825
同理,地球经度区间是[-180,180],可以对经度116.389550进行编码。
根据经度算编码
bit min mid max
1 -180 0.000 180
1 0.000 90 180
0 90 135 180
1 90 112.5 135
0 112.5 123.75 135
0 112.5 118.125 123.75
1 112.5 115.3125 118.125
0 115.3125 116.71875 118.125
1 115.3125 116.015625 116.71875
1 116.015625 116.3671875 116.71875
2.2. 组码
通过上述计算,纬度产生的编码为10111 00011,经度产生的编码为11010 01011。偶数位放经度,奇数位放纬度,把2串编码组合生成新串:11100 11101 00100 01111。
最后使用用0-9、b-z(去掉a, i, l, o)这32个字母进行base32编码,首先将11100 11101 00100 01111转成十进制,对应着28、29、4、15,十进制对应的编码就是wx4g。同理,将编码转换成经纬度的解码算法与之相反,具体不再赘述。
3.3.GeoHash Base32编码长度与精度
下表摘自维基百科:http://en.wikipedia.org/wiki/Geohash
可以看出,当geohash base32编码长度为8时,精度在19米左右,而当编码长度为9时,精度在2米左右,编码长度需要根据数据情况进行选择。
3.4.GeoHash算法
上文讲了GeoHash的计算步骤,仅仅说明是什么而没有说明为什么?为什么分别给经度和维度编码?为什么需要将经纬度两串编码交叉组合成一串编码?本节试图回答这一问题。
如图所示,我们将二进制编码的结果填写到空间中,当将空间划分为四块时候,编码的顺序分别是左下角00,左上角01,右下脚10,右上角11,也就是类似于Z的曲线,当我们递归的将各个块分解成更小的子块时,编码的顺序是自相似的(分形),每一个子快也形成Z曲线,这种类型的曲线被称为Peano空间填充曲线。
这种类型的空间填充曲线的优点是将二维空间转换成一维曲线(事实上是分形维),对大部分而言,编码相似的距离也相近, 但Peano空间填充曲线最大的缺点就是突变性,有些编码相邻但距离却相差很远,比如0111与1000,编码是相邻的,但距离相差很大。
除Peano空间填充曲线外,还有很多空间填充曲线,如图所示,其中效果公认较好是Hilbert空间填充曲线,相较于Peano曲线而言,Hilbert曲线没有较大的突变。为什么GeoHash不选择Hilbert空间填充曲线呢?可能是Peano曲线思路以及计算上比较简单吧,事实上,Peano曲线就是一种四叉树线性编码方式。
3.5.使用注意点
1)由于GeoHash是将区域划分为一个个规则矩形,并对每个矩形进行编码,这样在查询附近POI信息时会导致以下问题,比如红色的点是我们的位置,绿色的两个点分别是附近的两个餐馆,但是在查询的时候会发现距离较远餐馆的GeoHash编码与我们一样(因为在同一个GeoHash区域块上),而较近餐馆的GeoHash编码与我们不一致。这个问题往往产生在边界处。
解决的思路很简单,我们查询时,除了使用定位点的GeoHash编码进行匹配外,还使用周围8个区域的GeoHash编码,这样可以避免这个问题。
2)我们已经知道现有的GeoHash算法使用的是Peano空间填充曲线,这种曲线会产生突变,造成了编码虽然相似但距离可能相差很大的问题,因此在查询附近餐馆时候,首先筛选GeoHash编码相似的POI点,然后进行实际距离计算。
4.服务发布
本程序采用flask框架部署上线:
Flask是一个使用 Python 编写的轻量级 Web 应用框架。其 WSGI 工具箱采用 Werkzeug ,模板引擎则使用 Jinja2 。Flask使用 BSD 授权。
Flask也被称为 “microframework” ,因为它使用简单的核心,用 extension 增加其他功能。Flask没有默认使用的数据库、窗体验证工具。
访问url示例如下:
http://127.0.0.1:8881/latlonPoint?lng=114&lat=30
Python示例程序如下:
#!/usr/bin/env python
-- coding: utf-8 --
## 对flask框架模块调用
## 要注意Python Interpreter选取、virtualenv虚拟环境
## 详见Flask环境搭建、目的是隔离出一个独立环境
## 查询需要数据库支撑,MySQL
import os
import json
from flask import Flask
from flask import request
from flask import redirect
from flask import jsonify
from flask_cors import CORS
app = Flask(__name__)
CORS(app)
@app.route('/latlonPoint' , methods=['GET', 'POST'])
def index():
#接收POST参数
#接收参数类型为json格式
#字符串格式需要将 undecode转化为 UTF-8
#如果接收方式为post方法,则直接接收数据
if request.method == 'GET' :
#rev_data = json.loads(request.get_data())
#lng = float(rev_data.get('lng')) # 字符串:lng
#lat = float(rev_data.get('lat')) # 字符串:lat
lng = request.args.get('lng')
lat = request.args.get('lat')
datalist = {"lng" :lng,"lat" :lat }
return json.dumps(datalist)
else:
return '
只接受post请求!
'@app.route('/')
def user():
return'
Please input your detail route!
'if __name__ =='__main__':
#app.run(host = '0.0.0.0',port=8881,ssl_context='adhoc')
# app.run(host = '0.0.0.0',port=8881)
app.run(port=8881, debug=True,threaded=True)
解决桥上桥下的问题
位置定位数据中,一直有个关键问题就是当定位数据处于立交桥的交汇处,如何判断,该定位点在桥上还是桥下。
此时需要输入前面的定位数据,通过以上的绑路算法 判断在哪一条路上 ,然后在图数据库中搜索与之相关联的路,作为备选,这一切的前提是图数据库中的数据点之间是能够关联上的。
-
地图匹配算法设计与实现
2012-02-29 12:10:56路相似性三种因素的权重,设计出一种新的地图匹配算法。该算法在确定误差区 域后,计算和比较每条候选道路的实际匹配度,最后通过定位修正后正确显示出 车辆当前的所在位置。本系统基于Carbide.C++进行开发,本人所... -
基于隐马尔科夫模型(HMM)的地图匹配(Map-Matching)算法
2020-12-08 09:48:351. 摘要本篇博客简单介绍下用隐马尔科夫模型(Hidden Markov Model, HMM)来解决地图匹配(Map-Matching)问题。转载请注明网址。2. Map-Matching(MM)问题根据wikipedia的定义,地图匹配是将一系列有序的用户或者交通... -
ST-Matching:ST-Matching 算法的 Python 实现
2021-05-31 05:45:11用于低采样率 GPS 轨迹的 ST 匹配算法的 Python 实现 [1]。 [1] Lou, Y., Zhang, C., Zheng, Y., Xie, X., Wang, W. 和 Huang, Y.,2009 年 11 月。 低采样率GPS轨迹的地图匹配。 在第 17 届 ACM SIGSPATIAL 地理... -
基于地图匹配的时空轨迹匿名算法 (2014年)
2021-06-12 03:15:38为此,提出一种基于地图匹配的时空轨迹匿名算法,利用真实路网数据构造假轨迹的候选匹配集,通过设置时间和空间匿名函数,利用启发式广度优先搜索算法搜索目标匹配轨迹点,满足时空匿名性和空间相关性的隐私安全条件... -
一种改进ICCP水下地形匹配算法 (2012年)
2021-05-17 16:21:29针对水下地形最近等值线迭代(ICCP)匹配算法的原理缺陷和惯性导航累积误差对匹配精度的影响,提出了一种利用粒子群算法优化估计航路的改进ICCP算法.分析了ICCP算法的不足,利用估计航路、惯性导航定位误差和数字地图... -
地图匹配算法在基于GPS的汽车导航系统中的应用
2009-05-21 09:29:36为了解决这个问题,本文介绍了GPS的导航系统结合地图匹配的算法,将以最短的距离算法和助理地图匹配算法的经验为基础的全球定位导航系统。经过我们正确性测试该算法的实际运行,它可以使全球定位系统轨道和电子地图... -
道路匹配算法
2011-11-24 23:01:16java编写的矢量道路变化检测算法,主要用于GIS方面不同时态的变化发现。 -
karto算法论文阅读及代码讲解-扫描匹配(correlative scan matching,csm)
2022-03-21 10:39:55扫描匹配算法csm,correlative scan matching1.论文阅读 本博客前部分论文阅读,是对论文的高度概括。 1.论文阅读 图2 概率扫描匹配的图形模型 根据图2,已知x-1 和z-1 ,也测量到了u 和 z ,如何尽可能... -
Shazam-linke 散列算法和数据库搜索 的Matlab实现_Matlab实现音乐散列和track db匹配算法
2022-06-07 11:15:27Matlab实现音乐散列和track db匹配算法 项目结构 目标文件夹:在此处放置将形成曲目数据库的曲目列表。 hashes.mat:存储数据库的 Matlab 文件。由 Matlab 执行add_tracks()函数后生成。 查询文件夹:将曲目片段... -
地图匹配实例-几何匹配
2021-03-14 20:22:50由于苦心钻研了好久才弄明白,所以选择了对知识的收费,货真价实:效果图如下...说一下地图匹配的性质,我这个方法是对点的最近的线进行的几何性质的匹配,也就是说垂直映射到最近的线上,不需要的可以无需购买。 ... -
astar算法matlab代码-Optimal-Path-Planning:实现A*搜索算法以在生成的地图上找到最佳路径
2021-05-24 09:37:09astar算法matlab代码最佳路径规划 实现A *搜索算法以在生成的地图上找到最佳路径。 该项目是我在荷兰TU Delft期间逗留期间创建的。 它包含编写的代码和此报告中包含的最终报告。 由于我在此代码中使用了许多功能,... -
地图匹配实践
2020-12-12 09:48:09地图匹配(Map Matching)是指将行车轨迹的经纬度采样序列与数字地图路网匹配的过程,其本质上是平面线段序列的模式匹配问题(Alt等,2003)。在实际应用中,GPS采样信号的质量会严重影响地图匹配结果:采样频率的降低、... -
JUST技术:基于HMM的实时地图匹配
2021-01-04 21:47:00目前,基于HMM的实时地图匹配算法[2]被广泛使用于很多业务场景中,如公交车实时位置播报、快递员配送位置跟踪。以危化品运输车辆的监管为例,危化品运输车若偏离原报备路线,通过实时的地图匹配可以在第一时间获取其... -
机器人算法的Python示例代码
2022-05-25 19:02:04高斯栅格地图 光线投射栅格贴图 猛击 迭代最近点(ICP)匹配 EKF大满贯 FastSLAM 1.0 FastSLAM 2.0 基于图形的SLAM 路径规划 动态窗口方法 基于网格的搜索 Dijkstra算法 A*算法 势场算法 模型预测轨迹...