任振娜
(武警指揮學(xué)院,天津 300250)
[關(guān)鍵字] 等高線數(shù)據(jù);Delaunay三角網(wǎng);地形特征;提取
地形特征是指對于描述地形形態(tài)有著特別意義的地形表面上的點、線、面,它構(gòu)成了地形變化起伏的骨架。其中,地形特征點包括:山峰點、谷底點、鞍部點等,地形特征線包括:山脊線、山谷線等。地形特征是地形地表在空間分布、延展的具有骨架化控制作用的重要結(jié)構(gòu)化信息,在地圖制圖、地貌形態(tài)識別、水文分析等領(lǐng)域具有重要的支持作用。由于歷史的原因,現(xiàn)有的地形數(shù)據(jù)更多的是等高線,DEM建立的數(shù)據(jù)來源也主要是等高線,這樣如何基于等高線建立DEM模型,如何基于建立的模型提取地形結(jié)構(gòu)特征便成為一個感興趣的問題。
總體思路:首先利用等高線數(shù)據(jù)構(gòu)建不規(guī)則三角網(wǎng)DEM模型,然后通過對三角網(wǎng)進(jìn)行分析,提取地形結(jié)構(gòu)特征[1]。而本文是在基于等高線一次性構(gòu)建Delaunay三角網(wǎng)模型的基礎(chǔ)上,進(jìn)一步分析了模型的特點,研究了山脊線和山谷線的提取算法。
定義1:約束邊,本文中稱由等高線上的相鄰兩點確定的線段為約束邊。
定義2:約束邊的起始點和終止點,設(shè)約束邊是由等高線上相鄰兩個點M,N逆時針相連而成,則稱M點是約束邊的起始點,N點是約束邊的終止點。
定義3:基邊,以某一邊為基準(zhǔn)邊,在點集中選取第三點與其構(gòu)成一個三角形,該邊就稱為基邊。
定義4:左右三角形,以約束邊的起始點→終止點的方向為基準(zhǔn)方向,約束邊與位于基準(zhǔn)方向右側(cè)的點組成的三角形稱為右三角形,該點稱為該條約束邊的右側(cè)第三點,約束邊與位于基準(zhǔn)方向左側(cè)的點組成的三角形稱為左三角形,該點稱為該條約束邊的左側(cè)第三點。
定義5:平三角形,是指三角形的三個頂點都在同一條等高線上。
算法的具體過程描述如下:
步驟1:將每一段等高線上的點數(shù)據(jù)以其X,Y坐標(biāo),進(jìn)行逆時針排列,相鄰兩點構(gòu)成一條約束邊。記錄點數(shù)據(jù)到點數(shù)據(jù)鏈表,記錄約束邊數(shù)據(jù)到邊鏈表中,并將每一條等高線數(shù)據(jù)作為一個子元素記錄到等高線數(shù)據(jù)鏈表。
步驟2:根據(jù)點數(shù)據(jù)鏈表創(chuàng)建點數(shù)據(jù)格網(wǎng)索引。
步驟3:置標(biāo)志位于邊鏈表的表尾。
步驟4:在等高線鏈表中,依次將每一個子元素中的每一條約束邊作為基邊,應(yīng)用夾角最大準(zhǔn)則生成左右三角形。更新點數(shù)據(jù)信息,記錄新生成的邊到邊鏈表,記錄新生成的三角形到三角形鏈表,更新基邊信息。
步驟5:從標(biāo)志位的下一條邊開始(即第一條非約束線段),依次取出邊作為基邊,向左應(yīng)用夾角最大準(zhǔn)則生成新的三角網(wǎng),更新點數(shù)據(jù)信息,記錄新生成的邊到邊鏈表,記錄三角形信息,更新基邊信息。
步驟6:從標(biāo)志位的下一條邊開始,依次對同時存在左右三角形的非約束邊,判斷該邊與其左右側(cè)第三點組成的邊是否相交,如果相交,則應(yīng)用簡化的LOP優(yōu)化算法對三角網(wǎng)進(jìn)行優(yōu)化處理。
山脊線和山谷線上的點在等高線上的特征表現(xiàn)為等高線局部曲率最大點,也就是等高線彎曲變化的特征點。曲線特征點的提取算法有多種。其中Split法是一種較常用的曲線特征點提取算法。該法從原理上講屬于整體算法,它所提供的曲線特征點能夠保證曲線變形在規(guī)定的限差之內(nèi)。
Split法的基本思想是[3,4]:先用曲線的最左邊和最右邊的兩個點作為起始點(對于閉合曲線)將閉合曲線分為兩部分,對于非閉合曲線選擇其兩個端點作為起始點。起始點確定后,順序計算曲線上位于兩個起始點之間的每一個點距兩個起始點連線的垂距,并找出最大垂距點。若該點處等高線張角小于給定的閾值,則該點為特征點。它將原曲線分為兩部分,對每一部分確定新的起始點,即用該點分別與原兩個起始點構(gòu)成兩對新的起始點,用相同的方法對這兩段曲線找出各自的特征點。Split法的原理可用圖1表示。
圖1 Split法的原理
圖2 識別山脊點山谷點原理圖
應(yīng)用Split法,即可找出特征點。找出特征點后,還要對其進(jìn)行分析判斷,找出哪些特征點是山脊點,哪些特征點是山谷點。
最直觀的判斷山脊點山谷點的方法如圖2所示,即計算特征點C處等高線張角范圍內(nèi)某點D的高程,并與C點高程比較,如果D點的高程大于C點高程,則C點為山脊點,反之,C點為山谷點。此種方法看似簡單,但計算D點高程算法復(fù)雜,計算量大,影響判斷效率。本文建立的Delaunay三角網(wǎng)模型是以等高線線段為約束邊構(gòu)建的,因此,模型中每一個平三角形三個點均落于一條等高線上;每一個非平三角形三個點分別位于兩條等高線上。因此,在識別山脊點和山谷點時,主要步驟如下:
步驟1:從等高線鏈表中,依次選出第n條線段ln和第n+1條線段ln+1[5,6],以及兩條線段的三個端點dn、dn+1、dn+2。
步驟2:計算以ln為起始方向線,順時針到ln+1的角度值。
步驟3:當(dāng)角度值>195°(195°是閾值)時:根據(jù)ln找到其右三角形的第三個點,當(dāng)?shù)谌齻€點的高程值小于dn+1的高程值,則點dn+1是山谷點,更新點信息;當(dāng)?shù)谌齻€點的高程值大于dn+1的高程值,則點dn+1是山脊點,更新點信息;當(dāng)?shù)谌齻€點的高程值等于dn+1的高程值,則轉(zhuǎn)入步驟5。
步驟4:當(dāng)角度值<165°(165°是閾值)時:根據(jù)ln找到其右三角形的第三個點,當(dāng)?shù)谌齻€點的高程值小于dn+1的高程值,則點dn+1是山脊點,更新點信息;當(dāng)?shù)谌齻€點的高程值大于dn+1的高程值,則點dn+1是山谷點,更新點信息;當(dāng)?shù)谌齻€點的高程值等于dn+1的高程值,則轉(zhuǎn)入步驟6。
步驟5:根據(jù)ln找到其左三角形的第三個點,如果第三個點的高程值大于dn+1的高程值,則點dn+1是山谷點,更新點信息;如果第三個點的高程值小于dn+1的高程值,則點dn+1是山脊點,更新點信息;如果第三個點的高程值等于dn+1的高程值,則轉(zhuǎn)入步驟7。
步驟6:根據(jù)ln找到其左三角形的第三個點,如果第三個點的高程值大于dn+1的高程值,則點dn+1是山脊點,更新點信息;如果第三個點的高程值小于dn+1的高程值,則點dn+1是山谷點,更新點信息;如果第三個點的高程值等于dn+1的高程值,則轉(zhuǎn)入步驟8。
步驟7:從ln開始,圍繞dn+1依次找其右三角形,直至右三角形的某一點高程值不等于dn+1的高程值為止。當(dāng)該點高程值小于dn+1的高程值,則點dn+1是山谷點,更新點信息;當(dāng)該點高程值大于dn+1的高程值,則點dn+1是山脊點,更新點信息。
步驟8:從ln開始,圍繞dn+1依次找其右三角形,直至右三角形的某一點高程值不等于dn+1的高程值為止。當(dāng)該點高程值小于dn+1的高程值,則點dn+1是山脊點,更新點信息;當(dāng)該點高程值大于dn+1的高程值,則點dn+1是山谷點,更新點信息。
3.3.1 連接山谷線
連接山谷線是按照由高向低逐條等高線來搜索的,其搜索過程如下:
步驟1:先從高程最高的等高線起,找出沒有向下連接的山谷點dn,以及與其相連接的兩個點dn-1、dn+1和兩條線段ln、ln+1。
步驟2:以圍繞dn,搜索邊ls從ln開始,向右搜索三角形的第三點d3,當(dāng)d3不是山谷點時,ls=d3dn,繼續(xù)向右搜索三角形的第三點,直至d3是山谷點或者ls=ln+1時為止。
步驟3:當(dāng)存在山谷點d3時,將dn與d3相連接。
步驟4:重復(fù)1、2、3步,直至所有的山谷點都向下搜索不到新的山谷點為止。
3.3.2 連接山脊線
連接山脊線則是由低向高逐條等高線來搜索的,其搜索過程如下:
步驟1:先從高程最低的等高線起,找出沒有向上連接的山脊點dn,以及與其相連接的兩個點dn-1、dn+1和兩條線段ln、ln+1。
步驟2:以圍繞dn,搜索邊ls從ln開始,向左搜索三角形的第三點d3,當(dāng)d3不是山脊點時,ls=d3dn,繼續(xù)向左搜索三角形的第三點,直至d3是山脊點或者ls=ln+1時為止。
步驟3:當(dāng)存在山脊點d3時,將dn與d3相連接。
步驟4:重復(fù)1、2、3步,直至所有的山脊點都向上搜索不到新的山脊點為止。
3.3.3 說明
連接山谷線時,在某點向下找不到可以連接的山谷點的原因可能是此山谷線到達(dá)了封閉的盆地底部或谷底線流入湖泊或海洋,另一種可能是等高線在這一部分分布太稀,數(shù)字化點太少而不能足夠詳細(xì)地描述地貌形態(tài);連接山脊線時,在某點向上找不到可以連接的山脊點的原因可能是此山脊線到達(dá)了山頂;在某點搜索到的山谷線(山脊線)的下一點是別的山谷線(山脊線)上的點的原因是兩條山谷線(山脊線)匯合在此點。
為了檢驗本文算法的正確性和有效性,筆者在VisualC++編程環(huán)境中對上述算法進(jìn)行了實踐。本實驗采用的數(shù)據(jù)是某一地區(qū)的147條數(shù)字化地形等高線。圖3為原始等高線數(shù)據(jù),圖4為基于等高線數(shù)據(jù)構(gòu)建的局部Delaunay三角網(wǎng),圖5為提取的山谷線,圖6為提取的山脊線。從圖4-6所示的實驗結(jié)果可以看出,用本文所提出的算法提取出的山脊線和山谷線是較為準(zhǔn)確的,與實際地形也是相符合的。
圖3 等高線數(shù)據(jù)
圖4 Delaunay三角網(wǎng)模型
圖5 提取的山谷線
圖6 提取的山脊線