楊廣武
(廣東省國土資源測繪院,廣東 廣州 510663)
水深點、等深線是水下地形測量的主要組成部分,能直接地表示水下地形的起伏狀態(tài)及反映水底地貌。等深線在生產(chǎn)過程中以軟件程序初步生成,再進行人工修改,在人工修改部分就難免會出現(xiàn)部分水深點與等深線水深值不一致或者丟失等深線的現(xiàn)象。傳統(tǒng)人工的逐點排查水深點與等深線矛盾不僅增加了內業(yè)人員的工作量,還容易導致檢查不完整出現(xiàn)錯漏,甚至產(chǎn)生新的錯誤,尤其在大批量的數(shù)據(jù)下,這種人工目視檢查水深點與等深線矛盾的方法不但檢查效率低下,而且對數(shù)據(jù)的正確性也難以控制。本文提出將大范圍的水深點和等深線進行分區(qū),再利用水深點構建不規(guī)則三角網(wǎng)(Triangular Irregular Network,TIN),將TIN 邊線與等深線相交比對算法來判斷點線矛盾,既能準確的找出點線矛盾和丟失等深線問題,又能更加快速查出錯誤,并且以.NET 為平臺,結合ArcGIS Engine 組件,以Microsoft Visual Studio 2010 為開發(fā)環(huán)境,Visual C#為系統(tǒng)開發(fā)語言實現(xiàn)該算法。
目前有關等高線點線矛盾的檢查方法,已有不少學者提出了算法,比如不規(guī)則三角網(wǎng)(TIN)檢查法、放射線檢查法等。這些算法基本實現(xiàn)高程點與等高線矛盾的檢查,但是存在一些缺陷:不規(guī)則三角網(wǎng)檢查法,結果的準確率較高,但程序運行速度較慢;放射檢查法雖然程序運行效率高,編程簡單,但是檢查結果的錯誤類型單一,疑似錯誤率相對較高。本文采用了不規(guī)則三角網(wǎng)(TIN)檢查法檢查水深點與等深線矛盾問題,但為了程序運行效率,增加了先將水深點與等深線進行分區(qū)循環(huán)再檢查的思路,即大大提高檢查的速度且不影響檢查結果。
數(shù)據(jù)要分區(qū),其實還有數(shù)據(jù)本身原因,本文程序成果主要用于1:10 000 比例尺水下地形測量水深點與等深線數(shù)據(jù)庫檢查。在1:10 000 比例尺的水下地形圖中水深點測量時,設計的航線要求是相互之間隔100 米,航線上的測量水深點相差50 米。在相同陸地比例尺、面積內的高程點數(shù)量會遠低于水深點數(shù)量,導致程序運行起來更加緩慢。等深線直接采用0、2、5、10、15、20、25、30、35、40、50 米(之后以10 米作為等深距)作為等深值,雖然等深線與等高線數(shù)量相比要減少很多,但由于海底地形普遍平坦和等深線之間距離較大,等深線橫跨距離相當長,且海域范圍普遍較大,都會降低程序運行速度,甚至程序直接崩潰。采用水深點與等深線分區(qū)再循環(huán)檢查,這問題就輕松解決了。
數(shù)據(jù)分區(qū)算法原理:首先將水深點與等深線遍歷獲得檢查全區(qū)域的范圍坐標,其次按照固定的長度、寬度進行分區(qū),由于在1:10 000 比例尺中水深點之間距離保持在100 米左右,因此相鄰分區(qū)需要重疊150 米左右來解決分區(qū)之間遺漏構建TIN 的問題。
現(xiàn)存關于構建TIN 的方法已經(jīng)很多,在二維約束Delaunay 三角網(wǎng)(Cormtrained Delaunay Triangular Irregular Network,CD-TIN)構建的方法,首先對約束數(shù)據(jù)集建立非約束Delaunay 三角網(wǎng),其次將約束線段嵌入應用,學者劉學軍等提出約束線段嵌入迭代算法和學者劉少華對其進行了改進和補充。本文構建TIN 過程采用生長三角形法,由于只用于點線矛盾的檢查,未進行最小角最大優(yōu)化,該方法簡單、易于編程實現(xiàn)。在提高程序運行效率和程序簡潔,還將構建TIN 工作放置到后臺運行。為了防止冗余計算,將TIN 簡化為離散邊,即將TIN 的各邊全部使用單一線連接,兩個點之間只保留一條線,不重復連線。
水深點與等深線矛盾檢查的前提是假設每個水深點的水深值都正確,再來檢查等深線的水深值正確性及是否遺漏等深線,是等深線重新生成的過程。在利用水深點構建TIN,用TIN 邊線與等深線相交,且記錄等深線水深值,其次利用該TIN 邊線兩端的水深點的水深值分析得到穿過該邊線的等深線水深值。為數(shù)值,為數(shù)組,與之間判斷邏輯關系為:(1)包含,則合理,從中移除。(2)不包含,則為多余的等深線值。(3)該邊線與所有等深線相交后,中還存在數(shù)值,則為遺漏的等深線值。
圖1為存在多余等深線空間位置關系圖,會記錄邊線AB 之間多余2 米等深線。
圖1 多余等深線關系圖
圖2為遺漏等深線空間位置關系圖,會記錄邊線AB 之間遺漏15 米等深線。
圖2 遺漏等深線關系圖
ArcGIS Engine 是美國ESRI 公司基于ArcObjects 的推出的獨立工具包,主要用于開發(fā)C/S 應用系統(tǒng),它是將ArcObjects 的部分功能進行封裝構建組件庫,軟件開發(fā)人員可以調用任何支持COM 的編程語言進行編程,如C#、Visual Basic.NET、Visual Basic、Java、C 語言、C++ 語言等,在不同的操作系統(tǒng)平臺和軟件開發(fā)環(huán)境安裝相對應的ArcObjects SDK,便可以讓開發(fā)者能夠快速且方便的開發(fā)出自定義的GIS 應用程序。用戶需要安裝ArcGIS Desktop 才能保證應用程序正常運行。開發(fā)所具有的特點包括:繼承性、專業(yè)性、復雜性、實用性、緊迫性等。
本文在假定水深點值是正確的前提下,首先將水深點和等深線分區(qū),其次將分區(qū)的水深點構建TIN,遍歷TIN 邊線,通過比較兩端點之間的水深值及分析TIN 邊線與等深線的交點,按照1.3 中所述的邏輯關系進行判斷可以準確地知道水深點與等深線之間的矛盾是否存在,具體算法流程如圖3所示。
圖3 程序設計示意圖
2.3.1 數(shù)據(jù)讀取
選擇數(shù)據(jù)存儲的數(shù)據(jù)庫,篩選出數(shù)據(jù)庫水深點和等深線圖層,依次對每個水深點和等深線進行遍歷,核心代碼為:
2.3.2 數(shù)據(jù)分區(qū)
各分區(qū)范圍的Min_X、Max_X、Min_Y、Max_Y 值,遍歷水深點將水深點分區(qū),遍歷等深線進行分割得到各分區(qū)等深線。部分核心代碼如下:
2.3.3 數(shù)據(jù)判斷
利用各分區(qū)后的水深點和等深線,再遍歷各分區(qū)水深點和等深線進行檢查,首先將水深點構建TIN,提取TIN 邊線且記錄兩端點的水深值,其次遍歷TIN 邊線時剔除長度大于300 米的邊線,可以減少誤報和程序運行速度,再判斷TIN邊線與等深線交點數(shù)量和兩端點水深值判之間存在的等深線數(shù)量,最后根據(jù)點線矛盾關系得到檢查結果。部分核心代碼為:
為了充分驗證算法程序的實際應用效果,本文選取湛江市湛江港附近海域1:10 000 水下地形圖數(shù)據(jù)進行實驗性檢查,該海域航道較多,地形復雜,最大水深達40 米,共有31 206 個水深點和368 條等深線。現(xiàn)將水深點與等深線數(shù)據(jù)分成三個區(qū)域進行實驗,人工檢測和程序檢測進行比較的結果如表1所示。
表1 程序和人工檢測結果對比
通過實驗結果分析表明:數(shù)據(jù)檢查的時間跟水深點和等深線的數(shù)量有關系,水深點越多數(shù)據(jù)檢查使用的時間越長;同理,等深線越多,數(shù)據(jù)檢查所使用的時間也越長。數(shù)據(jù)的數(shù)量與時間基本成一種線性正比關系。
程序檢查的錯誤100%包含了人工檢查出來的錯誤,同時還檢查出人工遺漏的錯誤。通過對實驗數(shù)據(jù)結果分析,人工目視方式檢查水深點與等深線矛盾的遺漏率達到15%左右。在數(shù)據(jù)檢查所需的時間上,程序檢查所需時間大大低于了人工檢查所需時間。因此本實驗表明,該水深點與等深線矛盾檢查方法在實際工作中具有很高的應用價值。
在生產(chǎn)工作實際中,作業(yè)員只需對水深點與等深線矛盾檢查結果進行排查和修改,便可以大大縮短解決點線矛盾問題的時間。
本文對不規(guī)則三角網(wǎng)檢查法在編程實現(xiàn)運行慢的問題上提出了數(shù)據(jù)分區(qū)解決法,并在ArcGIS Engine 平臺下實現(xiàn)了對mdb、gdb 數(shù)據(jù)進行的水深點、等深線線矛盾檢測。從理論上和實際上都達到了預期,可以明顯減輕質量檢查人員在檢查水下地形圖的水深點與等深線矛盾錯誤時的工作強度,并且在提高整體工作效率和數(shù)據(jù)質量正確率中發(fā)揮了重要作用。解決了質檢人員人工查找水深點與等深線矛盾的難題,在實際工作中具有很好的應用價值。