任雷鵬
(山西省測(cè)繪地理信息院測(cè)繪地理信息數(shù)據(jù)中心,山西 太原 030001)
地理國(guó)情是空間化、可視化的國(guó)情信息,是從地理的角度分析、研究和描述國(guó)情,是重要的基本國(guó)情之一。地理國(guó)情監(jiān)測(cè)是綜合利用現(xiàn)代測(cè)繪技術(shù)和各時(shí)期已有測(cè)繪成果檔案,對(duì)地表覆蓋和地理國(guó)情要素等進(jìn)行全面普查和監(jiān)測(cè),并統(tǒng)計(jì)分析其分布特征與差異、變化量和變化頻率以及相互關(guān)系等,形成反映各類自然資源、生態(tài)環(huán)境、社會(huì)經(jīng)濟(jì)要素的空間分布及其發(fā)展變化規(guī)律的地理國(guó)情數(shù)據(jù)、地圖和報(bào)告。
其中地理國(guó)情監(jiān)測(cè)成果建庫(kù)是地理國(guó)情監(jiān)測(cè)的重要內(nèi)容,是對(duì)監(jiān)測(cè)成果數(shù)據(jù)進(jìn)行集成管理、統(tǒng)計(jì)分析、應(yīng)用服務(wù)的前提,是為今后開(kāi)展地理國(guó)情監(jiān)測(cè)常態(tài)監(jiān)測(cè)提供本底數(shù)據(jù)庫(kù)及應(yīng)用服務(wù)平臺(tái)。地理國(guó)情監(jiān)測(cè)數(shù)據(jù)庫(kù)與傳統(tǒng)的基礎(chǔ)地理數(shù)據(jù)庫(kù)相比,在技術(shù)要求和標(biāo)準(zhǔn)都有較大幅度的提高。由于在建庫(kù)過(guò)程中遇到地理數(shù)據(jù)結(jié)構(gòu)復(fù)雜、數(shù)據(jù)量大、數(shù)據(jù)源多等特點(diǎn),因此需要在建庫(kù)前對(duì)地理國(guó)情數(shù)據(jù)進(jìn)行數(shù)據(jù)預(yù)處理。地理國(guó)情監(jiān)測(cè)入庫(kù)前預(yù)處理,是指按照數(shù)據(jù)庫(kù)技術(shù)設(shè)計(jì),對(duì)監(jiān)測(cè)生產(chǎn)成果數(shù)據(jù)作入庫(kù)前處理,使得成果數(shù)據(jù)內(nèi)容及形式滿足數(shù)據(jù)建庫(kù)與管理要求。
在地理國(guó)情監(jiān)測(cè)數(shù)據(jù)預(yù)處理過(guò)程中,路網(wǎng)數(shù)據(jù)更新與檢查是整個(gè)數(shù)據(jù)預(yù)處理過(guò)程中很重要的一步。由于道路數(shù)據(jù)量大,更新情況比較多,更新工作量大,尤其是2019年收集公路數(shù)據(jù)中,道路數(shù)據(jù)屬性變化比較多,全省道路數(shù)據(jù)有20多萬(wàn)條記錄,發(fā)生變化的道路達(dá)到7萬(wàn)多條記錄,更新比例超過(guò)30%。如果單純依靠人工檢查,在預(yù)處理時(shí)間不充裕的情況下,很難保證路網(wǎng)數(shù)據(jù)及時(shí)檢查完成,因此需要實(shí)現(xiàn)對(duì)路網(wǎng)檢查實(shí)現(xiàn)自動(dòng)化檢查,以提高質(zhì)檢效率。本文選擇Python作為開(kāi)發(fā)語(yǔ)言,以arcpy站點(diǎn)包作為工具,實(shí)現(xiàn)地理國(guó)情監(jiān)測(cè)路網(wǎng)更新自動(dòng)化檢查,提高質(zhì)檢效率與質(zhì)檢準(zhǔn)確率。
路網(wǎng)更新是將本底數(shù)據(jù)N_LRDL層拷貝為變化數(shù)據(jù)層UN_LRDL,并按要求從分區(qū)數(shù)據(jù)中提取道路變化信息通用屬性項(xiàng),更新到相應(yīng)路網(wǎng)數(shù)據(jù)中。
地理國(guó)情監(jiān)測(cè)路網(wǎng)更新數(shù)據(jù)包括本底路網(wǎng)數(shù)據(jù)和分區(qū)數(shù)據(jù)中變化道路數(shù)據(jù)。其中本底路網(wǎng)數(shù)據(jù)主要是指上一年度不分區(qū)數(shù)據(jù)中的路網(wǎng)數(shù)據(jù),主要是由公路數(shù)據(jù)以及部分起聯(lián)通作用的農(nóng)村道路、城市道路合并的一套完整的道路路網(wǎng)。
分區(qū)數(shù)據(jù)中包括公路UV_LRDL、城市道路UV_LCTL、農(nóng)村道路UV_LVLL,不分區(qū)數(shù)據(jù)庫(kù)中包括路網(wǎng)本底數(shù)據(jù)N_LRDL,更新結(jié)果為UN_LRDL。路網(wǎng)更新數(shù)據(jù)(以太原市為例)(如圖1所示):
圖1 太原市路網(wǎng)更新數(shù)據(jù)
路網(wǎng)變化類型主要包括三種變化:圖形變化、屬性變化以及圖形和屬性變化,變化類型通過(guò)屬性字段changetype與changeatt兩個(gè)字段表示。其中changeatt主要是記錄變化字段,changetype主要記錄變化類型,分別用 -2、-1、0、1、2、3、9 表示,Changetype 字段說(shuō)明(如表1所示):
表1 分區(qū)數(shù)據(jù)道路中的Changetype字段說(shuō)明
路網(wǎng)更新方法是以上一年度路網(wǎng)數(shù)據(jù)UN_LRDL作為本底,從完成入庫(kù)檢查和修改的分區(qū)公路要素層UV_LRDL、城市道路UV_LCTL層和鄉(xiāng)村道路UV_LVLL層中提取除標(biāo)記為滅失的國(guó)道、省道、縣道和鄉(xiāng)道、連接道等要素以及保持公路網(wǎng)弧段連通所需的其他要素,提取后按照相應(yīng)的變化類型,對(duì)UN_LRDL進(jìn)行更新。更新時(shí)對(duì)路網(wǎng)中不再存在的路網(wǎng)弧段,直接進(jìn)行物理刪除,不記錄變化類型。更新時(shí)注意保持路網(wǎng)連通性,最終形成以省級(jí)任務(wù)區(qū)為整體的不分區(qū)數(shù)據(jù)庫(kù)文件UN_LRDL層,路網(wǎng)更新方法(如圖2所示):
圖2 路網(wǎng)更新方法
路網(wǎng)質(zhì)檢主要是檢查路網(wǎng)數(shù)據(jù)是否根據(jù)分區(qū)道路數(shù)據(jù)進(jìn)行合理更新,主要包括圖形信息與屬性信息是否根據(jù)分區(qū)數(shù)據(jù)中道路變化類型進(jìn)行相應(yīng)更新。
在數(shù)據(jù)預(yù)處理過(guò)程中,路網(wǎng)生產(chǎn)相對(duì)其他數(shù)據(jù)預(yù)處理工作量比較大。而且過(guò)程繁雜、參與作業(yè)人員較多,導(dǎo)致路網(wǎng)生產(chǎn)過(guò)程中出現(xiàn)數(shù)據(jù)質(zhì)量不一致,不合理的情況相對(duì)較多。在全省數(shù)據(jù)匯交時(shí),各類更新問(wèn)題同時(shí)被發(fā)現(xiàn),如果依靠人工檢查,在匯交時(shí)間緊張,數(shù)據(jù)質(zhì)量不能下降的情況下,路網(wǎng)質(zhì)檢很難做到及時(shí)準(zhǔn)確發(fā)現(xiàn)問(wèn)題。
由于分區(qū)數(shù)據(jù)中的道路數(shù)據(jù)分散在全省117個(gè)任務(wù)區(qū)數(shù)據(jù)庫(kù)中,道路數(shù)據(jù)達(dá)到20多萬(wàn)條記錄,數(shù)據(jù)量非常大。人工檢查需要分別加載分區(qū)道路對(duì)比路網(wǎng)更新內(nèi)容,過(guò)程繁雜,容易漏檢查,因此,需要一款軟件實(shí)現(xiàn)路網(wǎng)自動(dòng)化檢查,以提高質(zhì)檢效率。
arcpy是以arcgisscripting模塊為基礎(chǔ),并繼承了相應(yīng)功能而構(gòu)建成的站點(diǎn)包。它是以實(shí)用高效的方式通過(guò)Python執(zhí)行地理數(shù)據(jù)分析、數(shù)據(jù)轉(zhuǎn)換、數(shù)據(jù)管理和地圖自動(dòng)化創(chuàng)建基礎(chǔ)。通過(guò)arcpy可訪問(wèn)地理處理工具和其他函數(shù)、類和模塊,從而快速輕松地創(chuàng)建各種簡(jiǎn)單或復(fù)雜工作流。本文選擇Python作為編程語(yǔ)言,結(jié)合arcpy站點(diǎn)包實(shí)現(xiàn)路網(wǎng)質(zhì)檢自動(dòng)化,通過(guò)程序?qū)崿F(xiàn)路網(wǎng)問(wèn)題的快速定位,以快速反饋給作業(yè)人員及時(shí)進(jìn)行相應(yīng)修改,提高數(shù)據(jù)預(yù)處理的效率。
根據(jù)路網(wǎng)數(shù)據(jù)與路網(wǎng)更新方法,質(zhì)檢程序整體設(shè)計(jì)主要包括讀取數(shù)據(jù)、數(shù)據(jù)預(yù)處理、數(shù)據(jù)分析對(duì)比、結(jié)果輸出四個(gè)模塊。其中數(shù)據(jù)分析對(duì)比是整個(gè)程序的主要模塊,根據(jù)地理國(guó)情監(jiān)測(cè)路網(wǎng)更新方法,在此確定數(shù)據(jù)對(duì)比分析分為圖形更新檢查與屬性更新檢查,整體設(shè)計(jì)(如圖3所示):
圖3 整體設(shè)計(jì)圖
通過(guò)對(duì)數(shù)據(jù)內(nèi)容與總體設(shè)計(jì)分析,結(jié)合python特點(diǎn),分別對(duì)數(shù)據(jù)讀取、數(shù)據(jù)預(yù)處理、數(shù)據(jù)分析對(duì)比、成果輸出四個(gè)部分進(jìn)行詳細(xì)設(shè)計(jì),詳細(xì)設(shè)計(jì)(如圖4所示):
圖4 詳細(xì)設(shè)計(jì)圖
3.3.1 數(shù)據(jù)讀取
由于分區(qū)數(shù)據(jù)中道路包括UV_LRDL、UV_LVLL、UV_LCTL,分別存儲(chǔ)在分區(qū)數(shù)據(jù)庫(kù)的數(shù)據(jù)集中,分別讀取比較費(fèi)時(shí)費(fèi)力,在此我們利用arcpy.ListWorkspaces與arcpy.ListFeatureClass函數(shù)實(shí)現(xiàn)對(duì)分區(qū)數(shù)據(jù)庫(kù)中道路的遍歷。
3.3.2 數(shù)據(jù)預(yù)處理
第一步,通過(guò)數(shù)據(jù)遍歷獲取各分區(qū)數(shù)據(jù)庫(kù)中的UV_LRDL、UV_LCTL、UV_LVLL,利用 arcpy.Append_management實(shí)現(xiàn)各分區(qū)道路的合并,將質(zhì)檢任務(wù)區(qū)內(nèi)分區(qū)道路合并成整個(gè)任務(wù)區(qū)完整道路。
第二步,由于路網(wǎng)更新主要是更新UV_LRDL中變化數(shù)據(jù),而UV_LCTL與UV_LRDL存在道路重疊情況,因此,需要先通過(guò)空間選擇算法將重疊的城市道路選出并進(jìn)行刪除操作,在此主要用到arcpy.SelectLayer ByLocation_management與arcpy.DeleteFeatures_management函數(shù)實(shí)現(xiàn)。
第三步,是需要將整合的UV_LRDL、UV_LCTL、UV_LVLL進(jìn)行進(jìn)一步合并,形成融合公路、城市道路、農(nóng)村道路的數(shù)據(jù)UV_LRDL1,方便下一步對(duì)路網(wǎng)數(shù)據(jù)進(jìn)行對(duì)比,在此主要利用arcpy.Merge_management函數(shù)實(shí)現(xiàn)道路合并。
3.3.3 數(shù)據(jù)分析對(duì)比
數(shù)據(jù)分析對(duì)比主要包括圖形對(duì)比與屬性對(duì)比。
圖形對(duì)比分為兩部分,分別是對(duì)打斷更新識(shí)別判斷與對(duì)伸縮、新增、滅失等更新的識(shí)別判斷。
(1)對(duì)道路容易漏更新的打斷更新進(jìn)行檢查,主要檢查changetype為 -1、0的變化道路;利用FeatureVerticesToPoints_management函數(shù)實(shí)現(xiàn)道路斷點(diǎn)的提取,然后對(duì)兩者進(jìn)行擦出,提取多余斷點(diǎn),生成斷點(diǎn)圖層,并輸出到結(jié)果數(shù)據(jù)庫(kù)中。
(2)對(duì)變化類型為微調(diào)、伸縮、新增、滅失等更新的檢查,重點(diǎn)檢查 changetype為 -2、1、2、3、9 等變化類型的UN_LRDL是否根據(jù)分區(qū)數(shù)據(jù)進(jìn)行相應(yīng)更新。分別提取UN_LRDL1與UN_LRDL中變化要素,利用arcpy.Erase_analysis進(jìn)行擦出操作,提取圖形未更新的道路,并輸出到結(jié)果數(shù)據(jù)庫(kù)中。
屬性對(duì)比主要包括道路相交提取與字段對(duì)比兩部分。
(1)針對(duì)發(fā)生變化的UV_LRDL1與相同位置的UN_LRDL進(jìn)行字段對(duì)比,通過(guò)篩選UV_LRDL1中變化數(shù)據(jù)與路網(wǎng)數(shù)據(jù)進(jìn)行相交,利用arcpy.Intersect_analysis實(shí)現(xiàn)道路相交形成新圖層,然后利用arcpy.AddField_management實(shí)現(xiàn)字段追加,新增字段用來(lái)記錄字段值不相等的字段名稱。
(2)對(duì)相交形成的新圖層進(jìn)行字段對(duì)比實(shí)現(xiàn)分區(qū)道路字段與路網(wǎng)字段的訓(xùn)循環(huán)對(duì)比。如果字段不相等,則在新增的問(wèn)題字段中追加相應(yīng)字段名稱,利用arcpy.da.UpdateCursor實(shí)現(xiàn)對(duì)新增字段的字段值更新。
3.3.4 結(jié)果輸出
質(zhì)檢結(jié)果主要包括三層數(shù)據(jù),分別是漏打斷更新的點(diǎn)圖層、判斷伸縮、新增、滅失等更新不一致的線圖層、判斷字段更新不一致的線圖層。
本文研究了使用Python和arcpy實(shí)現(xiàn)路網(wǎng)更新自動(dòng)化檢查。經(jīng)實(shí)踐,通過(guò)該程序能快速定位路網(wǎng)更新問(wèn)題,提高質(zhì)檢工作效率。相比人工檢查,質(zhì)檢程序能高效、準(zhǔn)確的定位更新問(wèn)題,以往需要數(shù)天甚至十多天的質(zhì)檢工作,縮短至十幾分鐘,極大的提高質(zhì)檢效率。
在實(shí)踐操作過(guò)程中,同時(shí)發(fā)現(xiàn)匯交數(shù)據(jù)的多樣性與數(shù)據(jù)問(wèn)題的差異性,造成全省路網(wǎng)數(shù)據(jù)檢查過(guò)程中,個(gè)別問(wèn)題仍需要依靠人工排查。因此,還需認(rèn)真研究建立相關(guān)檢查方法與檢查模型,最大程度的實(shí)現(xiàn)計(jì)算機(jī)自動(dòng)化檢查,以促進(jìn)地理國(guó)情監(jiān)測(cè)數(shù)據(jù)預(yù)處理工作與匯交工作的順利、快速、準(zhǔn)確的完成。