基於ArcGIS 的GPS數據地圖匹配

GPS數據由於信號不良、通信異常、定位誤差等原因,不能很好地落在道路上,所以需要對GPS數據進行地圖匹配,與道路進行關聯。而空間數據由於其特殊的數據格式,最佳的處理途徑仍舊是ArcGIS Desktop系列軟件。

一、路網數據檢查

根據實驗的需要提取出路網數據,對路網進行拓撲檢查,包括不能有重疊、不能有懸掛點等,對拓撲錯誤進行修改;同時,需要進行“在折點處打斷”操作,形成正確可用的路網數據。
這裏寫圖片描述

二、GPS數據檢查

GPS數據預處理是GPS數據使用的第一步,詳見博客。

三、地圖匹配

1、GPS數據提取

現有的GPS數據由城市中運行的出租車生成,在將GPS點匹配到路網數據之前,需要考慮數據更新問題:城市每天都在變化,路網每天都在更改,GPS數據中也許蘊含着一些現有路網中不存在的道路,所以也就引出了”基於GPS數據的道路更新”1的課題。由於本次實驗重點討論現有路網,所以,首先要將與現有道路相關聯的GPS數據提取出來。

#coding:utf-8

import arcpy
from arcpy import env
env.workspace = r'F:\GraduateStudy\Graduate\Data\Scratch.gdb'

#做緩衝區
print 'Buffer'
buffer = arcpy.Buffer_analysis('Road', '#', '20 Meters', 'FULL', 'ROUND', 'ALL', '#', 'PLANAR')
buffer = buffer.getOutput(0)#buffer的路徑
buffer_Name = buffer.split('\\')[-1]

#緩衝區與GPS數據相交
print 'Intersect'
GPS_Intersect = arcpy.Intersect_analysis('GPS20121114 #;'+ buffer_Name + ' #','#', 'ALL', '#', 'INPUT')
GPS_Intersect = GPS_Intersect.getOutput(0)#相交後GPS數據的路徑
GPS_Intersect_Name = GPS_Intersect.split('\\')[-1]

對道路做buffer緩衝區分析,同時將得到的緩衝區融合(不然會有重複的部分,使得切割GPS點的時候有重合)。依據實驗中GPS點的精度,對路網做20米的緩衝區。
這裏寫圖片描述
將GPS點與Buffer相交,得到現有路網範圍內的GPS數據。
這裏寫圖片描述
這裏寫圖片描述

2、匹配度指標選取

匹配度指標的選取是地圖匹配中最重要的一環,也直接決定着匹配效果。一般來說,點和線的匹配,需要考慮距離和方向兩個因素。距離因素的考慮自不用說,在一定距離範圍內,有多條可能路段的前提下,就需要考慮哪一條路段與GPS點方向最爲接近。匹配度的計算公式爲:這裏寫圖片描述
在ArcGIS中可以用“近鄰分析”計算GPS點與各候選路段的距離;以正北爲0°,順時針旋轉,統一構建角度度量,計算GPS點方向與各候選路段之間的夾角;最終計算得到匹配度。

3、使用更新幾何的方法,將GPS點移動到道路上。

#GPS數據,對Road路網,做近鄰分析
arcpy.Near_analysis(GPS_Intersect_Name, Road_Name, '#', 'LOCATION', 'NO_ANGLE', 'PLANAR')
Field_X = 'NEAR_X'
Field_Y = 'NEAR_Y'

#對每一條GPS數據提取地圖匹配後的位置
dic = {}
cursor = arcpy.da.SearchCursor(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(GPS_Intersect_Name,['OBJECTID', 'SHAPE@XY'])
for row in cursor:
    row[1] = dic[row[0]]
    cursor.updateRow(row)
del cursor
del row

這裏寫圖片描述

寫在最後

地圖匹配算法的研究已經不是一個新問題,大量學者對地圖匹配算法進行了改進2,本文僅僅是其中最簡單的幾何匹配,而且在實際應用中,考慮到數據的不一致性、地圖匹配的目的等具體問題,每個人的方法均不相同。希望本文的方法能有所幫助,歡迎多多交流指教。

(By MrHammer 2016-05-08 下午3點 @Bin House Rainy)

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章