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:Users96571documentsArcGISDefault.gdb2.读入数据
代码如下 示例
road_name r C:Users96571Desktopmap_matchingdata_091451公交线路51公交线路.shp #道路名称 注意要输入绝对路径 point_path r C:Users96571Desktopmap_matchingdata_0914站点筛选0914bus2_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



