摘 要:數(shù)字地圖中經(jīng)常存在沒有賦高程值和高程值賦值錯(cuò)誤的情況,為后期應(yīng)用及入庫帶來很多的不便。針對此問題筆者結(jié)合Tin三角網(wǎng)原理,提出以高程散點(diǎn)為基準(zhǔn),構(gòu)建Tin三角網(wǎng),通過Tin三角形的邊長與等高線在空間上的相交關(guān)系,自動(dòng)檢查和對等高線進(jìn)行賦值。經(jīng)過筆者理論和實(shí)踐分析,其正確率非常高,完全可用于對地形圖等高線高程的檢查和自動(dòng)賦值。
關(guān)鍵詞:Tin 自動(dòng)高程賦值 等高線 空間分析
中圖分類號:P283 文獻(xiàn)標(biāo)識(shí)碼:A 文章編號:1672-3791(2013)06(a)-0039-02
傳統(tǒng)的CAD中等高線往往通過高程點(diǎn)注記來識(shí)別等高線的高程,因此在CAD應(yīng)用中,等高線很多就是普通的曲線,沒有高程值。隨著數(shù)字地圖的應(yīng)用范圍日益拓廣,通過讀取等高線的高程值來實(shí)現(xiàn)多種應(yīng)用變得非常普遍,因此等高線沒有高程值,對后期數(shù)字地圖的應(yīng)用在成很多不便。
1 實(shí)現(xiàn)思路
等高線自動(dòng)高程賦值一直是工程應(yīng)用中的一個(gè)難題,當(dāng)前常見的處理方式有兩種,人工模式和半自動(dòng)化模式。前者主要通過人工方式,逐條錄入等高線的高程值,另一種模式是由人工指定起始等高線,根據(jù)等高距及高差,自動(dòng)通過空間關(guān)系完成等高線的高程賦值。前者工作量巨大,在生產(chǎn)中基本不予采用,后者雖然部分實(shí)現(xiàn)自動(dòng)化,但仍需人工干預(yù),特別是出現(xiàn)地貌突變?nèi)缍缚?、建筑物等,自?dòng)賦值往往失敗。市場上常見的具有此功能的軟件有MapGis、清華山維等。
為了減輕等高線高程賦值的工作量,提高賦值的正確率,筆者擬采用采集的高程點(diǎn),通過構(gòu)建Tin三角網(wǎng),實(shí)現(xiàn)等高線高程自動(dòng)賦值。
傳統(tǒng)的CAD地形圖中,等高線的高程信息主要通過鄰近的高程點(diǎn)進(jìn)行獲取,因此地形圖中的高程點(diǎn)具有以下功能。
(1)是獲取等高線高程信息的有效手段。
(2)是對數(shù)字地圖中等高線高程信息進(jìn)行檢核的有效手段。
因此,通過高程點(diǎn)獲取等高線高程信息,是最為可行和有效的手段。對等高線和高程點(diǎn)做以下分析。
在沒有地形突變的情況下,兩高程點(diǎn)的連線與等高線相交的條數(shù)必然等于兩高程點(diǎn)高程值整數(shù)部分差值與基本等高距的比值。如兩個(gè)高程點(diǎn)高程值整數(shù)部分分別為N和M,其整數(shù)部分差值為(N-M),假設(shè)基本等高距為K,則與此兩等高點(diǎn)相交的等高線條數(shù)必然為(N-M)/K。
再對(N-M)/K條等高線進(jìn)行如下分析,首先,以較低的高程點(diǎn)作為基點(diǎn),分別將其與(N-M)/K條等高線和高程點(diǎn)兩點(diǎn)連線的交點(diǎn)進(jìn)行連接,將得到(N-M)/K條線段。分別求得每條線段與等高線的交點(diǎn)個(gè)數(shù)P,則待求等高線的高程就等于基點(diǎn)與交點(diǎn)個(gè)數(shù)的和即(M+P)。
以上思路結(jié)構(gòu)合理,理論嚴(yán)謹(jǐn),但在應(yīng)用中仍存在以下問題:首先對于地形突變處的處理,經(jīng)分析可知,地形突變主要的影響在于等高線的標(biāo)高出現(xiàn)不連續(xù),如陡坎比高超過基本等高距,則其前后兩條等高線的高程差就不為基本等高距。因此可通過如下條件過濾,當(dāng)出現(xiàn)地形突變,則高程點(diǎn)的連線與等高線的交點(diǎn)必然少于兩高程點(diǎn)高程值整數(shù)部分的差值。再次,對于交點(diǎn)數(shù)雖然等于兩高程點(diǎn)高程值整數(shù)部分的差值,但仍存在如下可能:如果兩個(gè)高程點(diǎn)高程值有誤,如上文所述,若兩高程點(diǎn)高程分別為M+1和N+1,則可能存在高程賦值錯(cuò)誤。為此可進(jìn)行如下處理。
對等高線高程賦值的兩點(diǎn),其連線必須是最優(yōu)三角形。
當(dāng)存在多次賦值時(shí),將賦值過程中高程值出現(xiàn)概率最大的賦予對應(yīng)等高線。
前者可以通過構(gòu)建Tin三角形滿足要求,后者主要是通過概率判斷,提升高程賦值的準(zhǔn)確性。經(jīng)過以上分析,即可通過程序?qū)崿F(xiàn)等高線的自動(dòng)賦值了。
2 算法實(shí)現(xiàn)
通過上文理論分析,通過高程點(diǎn)自動(dòng)對等高線進(jìn)行賦值是可行的,為了在程序上實(shí)現(xiàn)上文的賦值過程,筆者擬采用如下流程實(shí)現(xiàn)等高線的自動(dòng)賦值。
首先,將等高線提取出來,單獨(dú)存放一個(gè)圖層。
其次,將高程注記點(diǎn)提取出來。
第三,通過高程注記點(diǎn),構(gòu)建Tin三角形。
第四,讀取Tin三角形中每個(gè)節(jié)點(diǎn)的高程,并賦予三角形的每條邊。
第五,讀取三角形其中一條邊,通過空間分析,求得與之相交的每條等高線。
第六,若交點(diǎn)數(shù)與兩高程點(diǎn)的高程值整數(shù)部分差值相同,則根據(jù)等高距,自動(dòng)將高程值賦予等高線,同時(shí)記錄賦值的次數(shù),否則不參與賦值。
第七,若出現(xiàn)高程賦值不同,根據(jù)賦值次數(shù),將出現(xiàn)概率最大的高程值賦予對應(yīng)等高線。具體的流程圖示例如(圖1)。
下文是實(shí)現(xiàn)算法的部分關(guān)鍵代碼:
DivElevation=Int(RecL.GetFieldValue("端點(diǎn)2"))-Int(RecL.GetFieldValue("端點(diǎn)1"))
//求取Tin三角形邊長兩端點(diǎn)的高程值
Lts.Add Ln.GetPartAt(1)(1)
TemLine.AddPart Lts
i=Ltt.QueryEx
(TemLine,,"smid>0").RecordCount
Ltes.Add Ln.GetPartAt(1)(2)
//求取一端點(diǎn)交點(diǎn)連線和等高線交點(diǎn)個(gè)數(shù)
TempLine.AddPart Ltes
j = Ltt.QueryEx
(TempLine,5,"smid>0").RecordCount
//求取另一端點(diǎn)交點(diǎn)連線和等高線交個(gè)數(shù)
If(Int(RecL.GetFieldValue("端點(diǎn)1")) + i+1)>CDbl(RecL.GetFieldValue("端點(diǎn)1")) And(Int(RecL.GetFieldValue("端點(diǎn)1"))+ i+1) //判斷交點(diǎn)的高程值是否在兩端點(diǎn)范內(nèi) If i+j-1=DivElevation Then //判斷交點(diǎn)、端點(diǎn)連線和等高線交點(diǎn)個(gè) //數(shù)是否滿足端點(diǎn)差值與基本等高距的比值 RecP.Edit bf=RecP.SetFieldValue ("Elevation",Int(RecL.GetFieldValue("端點(diǎn)1"))+i) //將正確的高程信息賦予等高線 RecP.Update End If End If 3 案例分析 為了驗(yàn)證以上思路,筆者擬采用1∶1000地形圖約17幅,等高線條數(shù)約為5000條,經(jīng)過初步驗(yàn)證,其識(shí)別率非常高,實(shí)驗(yàn)證實(shí),通過Tin模式是可以實(shí)現(xiàn)自動(dòng)化對等高線進(jìn)行賦值。以下是實(shí)驗(yàn)數(shù)據(jù)的抓圖。 4 結(jié)語 通過高程點(diǎn)及構(gòu)建Tin三角網(wǎng)模式在理論上可以完美實(shí)現(xiàn)對等高線高程的自動(dòng)賦值,經(jīng)筆者試驗(yàn),準(zhǔn)確率優(yōu)于95%以上。出現(xiàn)賦值錯(cuò)誤的原因主要在于高程點(diǎn)本身的錯(cuò)誤及圖幅邊界處高程點(diǎn)的缺失,通過高程點(diǎn)構(gòu)建Tin不僅可以對等高線高程自動(dòng)賦值,還可以對已經(jīng)賦值的等高線高程進(jìn)行檢核,實(shí)踐及理論分析證實(shí),本方法是一種切實(shí)可行等高線高程自動(dòng)賦值方法。未來應(yīng)用需注意自動(dòng)賦值時(shí)數(shù)據(jù)量的大小,具體的數(shù)據(jù)量可根據(jù)計(jì)算機(jī)的性能而定。以Pentium D 3.0G,1∶1000地形圖為例,建議每次處理的數(shù)據(jù)量不超過25幅為宜。 參考文獻(xiàn) [1]SuperMap Objects 開發(fā)教程(初級篇) 2008. [2]SuperMap Objects 開發(fā)教程(中級篇)2008.