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
获取图数据库中的点与点之间是否有连线关系,查询

本文介绍了如何使用Python进行地图匹配,解决车定位轨迹数据偏移问题。通过图数据库Neo4j和空间数据库Postgresql,实现轨迹纠偏,将偏离的定位点与附近的道路匹配。绑路方法包括获取路网数据、存储、寻找最近道路点、计算垂足等步骤。同时,文章提到了数据清洗、存储、Python连接数据库的示例代码,以及性能优化方法,如使用GeoHash算法提高查询效率。
最低0.47元/天 解锁文章
1783

被折叠的 条评论
为什么被折叠?



