栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Python

地图匹配(map

Python 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

地图匹配(map

文章目录 地图匹配算法实现前言一、代码环境介绍 二、使用步骤1.引入库2.读入数据3.读入数据4.构造相交的位置5、将点匹配到相应的道路上 总结

前言

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.gdb 
2.读入数据

代码如下 示例

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
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/267182.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号