呂成亮,廉光偉,張馳
(天津市測繪院,天津 300381)
根據天津城市測量成果編制的相關要求,最終測繪成果必須包括DWG和SHP兩種格式。DWG是基于AutoCAD平臺的二進制格式的文件。作為當前數字化測繪的常用結果文件,它直觀地反映了各地物的絕對位置和相對關系。出于商業(yè)競爭的考慮,AutoCAD對于DWG的數據結構暫時處于保密狀態(tài),但是提供了DXF格式來實現數據交換[1]。SHP是基于ArcGIS平臺的矢量數據文件。作為數據入庫的基礎文件,它包含了空間數據的幾何特征和屬性特征。
通常情況下,SHP由DWG進行數據轉換生成。常見數據轉換方法是基于AutoCAD進行二次開發(fā)完成數據轉換。該方法基本能滿足日常測繪生產的需要。但是,受限于程序開發(fā)者和使用者的經驗以及不同測繪項目的復雜程度和要求存在差異,這種數據轉換方法的缺陷也逐漸顯現。
為此,本文匯總分析近年來SHP數據返回修改的主要問題,在原有數據轉換方法的基礎上,提出一套較為完善的城市測量SHP數據制作方案,并在日常的城市測量工作中進行驗證[2~6]。
根據問題產生成因,將該方案中存在的問題匯總如下:
(1)多段線不閉合或者“假閉合”。
使用二次開發(fā)的程序進行數據轉換時,要求DWG中的多段線完全閉合。即多段線必須滿足兩個條件:①多段線的起始點坐標相同;②起點和終點只能共用一個點位(閉合多段線的邊數應該與其頂點數相同)。
當條件①和②都不滿足時,多段線不閉合;當滿足條件①,不滿足條件②時,多段線“假閉合”。如圖1所示,為典型的多段線“假閉合”現象。從圖面上看,該多邊形是四邊形,但是從屬性框中發(fā)現,該多邊形具有5個頂點,即起點和終點各自存在相應的點位,因此CAD判定其為不閉合(“假閉合”)。
圖1 多段線“假閉合”
(2)多段線存在“Z值”。
外業(yè)采集地形點位數據時,經常需要采集高程值,由此導致DWG中的多段線也會帶上標高屬性(“Z值”)。使用二次開發(fā)的程序進行數據轉換時,要求DWG中的多段線不能帶“Z值”,因為多段線的“Z值”會附帶在SHP數據屬性項中,而ArcMap軟件無法識別帶“Z值”的SHP文件。
上述兩種問題會直接導致SHP數據轉換失敗。很多作業(yè)員由于自身知識的局限,不掌握程序使用的基本要求,導致數據反復修改,嚴重影響了測繪生產效率。
(1)圓弧加密算法存在缺陷。
SHP不支持圓弧格式,如果DWG中存在圓弧,在數據轉換之前需要對圓弧進行加密處理,即用一條高度擬合的多段線代替圓弧。現有圓弧加密算法基本思想如下[6]:
假設對圓弧取中內插n次,會形成2n段長度相等的小圓弧,每段小圓弧對應的扇形面積為:
(1)
每段小圓弧對應的圓心三角形面積為:
(2)
扇形與圓心三角形面積之差為:
(3)
其中:θ和r分別代表圓弧的圓心角和半徑。
假設擬合圓弧的多段線與圓心形成的閉合多邊形面積與對應扇形的面積差值限差為△2。如果滿足條件:△2≥2n·△S,則內插停止,圓弧加密結束;否則內插繼續(xù),直至滿足停止條件。
雖然該算法能夠滿足一般情況下圓弧加密要求,但是其存在如下缺陷:①未考慮同時存在多個圓弧的情況;②未考慮圓弧的凹凸性情況。詳見筆者關于圓弧加密的文章《一種地籍數據DWG到SHP格式轉換中圓弧加密的優(yōu)化算法》(呂成亮等,2017)[6]。
上述缺陷會直接導致同一幾何對象在DWG和SHP的屬性不一致,且單個幾何對象不一致數量級較小,往往不易察覺,隨著數據量的增大,這種屬性的差異量級也會逐漸增大,因此必須要進行針對性的修改。
(2)程序中沒有檢查多段線自相交。
自相交,顧名思義是指要素與自身相交,如:“葉形”自相交(自相交部分為點),“回頭線”自相交(自相交部分為線)等。自相交不會影響SHP生成,因此程序開發(fā)者沒有編寫對應的檢查程序。但是ArcGIS在對存在自相交的SHP數據進行后續(xù)處理時,會首先自動對該SHP進行幾何修復,而修復的結果無法預測。
例如:對于程度簡單的“葉形”自相交,常見的修復結果是在相交點處,將原幾何對象打散成兩個幾何對象。對于“回頭線”自相交,常見的修復結果是直接刪除存在問題的幾何對象。
無論是哪種修復結果,都會造成同一幾何對象在DWG和SHP的屬性值發(fā)生較大變化,此時兩者沒有比較的意義。
(3)程序中沒有考慮共線圓弧的加密。
不同圖層的SHP數據存在共線圓弧?,F有圓弧加密算法只是按照圓弧的幾何屬性進行加密,即按照圓弧所屬幾何對象單獨加密,沒有考慮圓弧所屬圖層之間的邏輯關系。
以建設工程規(guī)劃竣工測量為例,最終提交入庫的地上SHP包括:地界,建筑、道路、綠地四個圖層。如圖2所示,綠地層SHP只有AB段圓弧,道路層SHP有AB和DE兩段圓弧。道路層SHP和綠地層SHP存在共線圓弧AB。
圖2 共線圓弧示例
按照現有圓弧加密算法:
對于綠地層,假設AB段圓弧加密n次,綠地SHP面積變化值為△1;
對于道路層,同樣假設AB和DE圓弧加密n次,面積變化值分別為-△1和△2。道路SHP面積變化值為:△3=△2-△1。
假設圓弧加密限差為△S,若滿足△S≥△1,此時綠地層AB段圓弧加密結束。由于無法判定△3和△S的關系,因此道路層AB段圓弧最終的加密次數m與n的關系也無法判斷。如果m與n不相等,圓弧AB在道路層SHP和綠地層SHP就無法完全重合,不可避免存在壓蓋或縫隙。
針對上述問題對于SHP數據制作的影響,本文提出一種優(yōu)化之后的SHP數據制作方案,如圖3所示。該方案特點如下:
圖3 SHP數據制作優(yōu)化方案
(1)增加CAD檢查和修改步驟。
首先進行多段線閉合檢查和修改。推薦使用CAD快速選擇功能,選擇圖形中所有多閉合屬性為“否”的多段線,然后按照上述的不同原因進行修改。對于其中的多段線“假閉合”現象,推薦使用boundary命令,重新快速建立范圍線。
然后進行多段線“Z值”檢查和修改。推薦利用CAD快速選擇功能,將所有的多段線標高統(tǒng)一改為0。
(2)優(yōu)化SHP轉換中圓弧加密算法,增加SHP生成之后檢查和修改步驟
對圓弧加密算法優(yōu)化設計的原理和過程,詳見筆者關于圓弧加密的文章《一種地籍數據DWG到SHP格式轉換中圓弧加密的優(yōu)化算法》(呂成亮等,2017)。
SHP生成之后檢查包括自相交檢查和拓撲(壓蓋)檢查。首先進行SHP自相交檢查:推薦使用ArcMap“檢查幾何”工具對SHP數據進行檢查。對于檢查出的SHP自相交問題,優(yōu)先推薦使用ArcMap“高級編輯”工具條中的“拆分多部件要素”對該面SHP進行處理;其次,可以使用ArcMap“修復幾何”工具,由于該工具會直接刪掉存在問題的SHP,所以在使用后應注意檢查修復是否正確。
然后進行SHP壓蓋檢查,修改。推薦使用ArcMap的“拓撲”功能,按照項目要求添加拓撲規(guī)則,對涉及的SHP層進行拓撲檢查。
(3)修改SHP制作流程。
由于目前SHP制作是分圖層進行,暫時無法從算法上進行根本解決。筆者建議可以從SHP制作流程上進行相應的規(guī)范,避免此類問題。
以建設工程規(guī)劃竣工測量為例。首先,分別制作建筑圖層和地界圖層;然后,制作綠地圖層時,以建筑圖層為裁切面,對綠地圖層進行裁切,確保建筑圖層和綠地圖層之間沒有壓蓋;最后,將綠地圖層和建筑合并成一個圖層,對地界圖層進行裁切,得到的就是道路圖層,這樣確保了建筑、道路、綠地三個圖層之間不會存在壓蓋的問題。
以測繪院一個月的項目數為例,方案優(yōu)化后SHP數據制作一次成功率的比例從70%提升到96%,極大地提高了工作效率和數據質量。
本文針對現有SHP制作過程中存在的問題進行分析,然后有針對性地提出優(yōu)化的SHP數據制作方案。在日常的城市測量工作中驗證發(fā)現:優(yōu)化之后的SHP數據制作方案有效地避免了之前存在的各種問題,提高了SHP制作的一次成功率。
[1] 陳能,施蓓琦. AutoCAD地形圖數據轉換為GIS空間數據的技術研究與應用[J]. 測繪通報,2005(8):11~14.
[2] 張葉,孫毅中,陳年松. CAD城市基礎數據到GIS轉換的有關問題探討[J]. 測繪與空間地理信息,2007(11):94~97.
[3] 肖鋒,呂寶奇,林蒙恩. DWG到SHP格式轉換技術的研究與實現[J]. 測繪與空間地理信息,2013(9):87~89.
[4] 齊立波. C#入門經典(第6版)[M]. 北京:清華大學出版社,2012.
[5] 安衛(wèi). 基于VBA的兩證合一SHP數據制作自動化的實現[J]. 城市勘測,2011(2):141~143.
[6] 呂成亮,廉光偉,黃毅. 一種地籍數據DWG到SHP格式轉換中圓弧加密的優(yōu)化算法[J]. 城市勘測,2017(4):149~151.