地图匹配(map-matching)
地图匹配(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 = Output(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 = Output(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
总结
go2map地图北京地图匹配之后的效果如下所⽰

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。