本發(fā)明涉及一種基于結(jié)點排序的等深線生成方法及裝置,屬于海圖制圖技術(shù)領(lǐng)域。
背景技術(shù):
等深線是指從理論深度基準(zhǔn)面起算的海底深度相等的各點的連線,即通過同值水深點的曲線。在海圖上,等深線與水深相配合,能直觀、形象地反映海底地形,是三維海底在二維平面的一種表示方式。等深線研究在制圖綜合領(lǐng)域也有著重要的意義,其是海地地貌表達的關(guān)鍵因素之一。隨著海底測量設(shè)備和技術(shù)不斷發(fā)展與進步,采集到的海底地形數(shù)據(jù)量越來越大,如何快速、準(zhǔn)確地生成大數(shù)據(jù)量海底地形的等深線,成為當(dāng)前急需解決的問題之一。
等深線是具有深度屬性的一種等值線,其生成方法與常規(guī)等值線生成方法類似。通常的等值線生成算法有格網(wǎng)追蹤和三角網(wǎng)追蹤,其過程主要有:1)遍歷格網(wǎng)或三角網(wǎng)尋找到等值線追蹤起點;2)從起點開始對相鄰格網(wǎng)或三角網(wǎng)進行追蹤直至生成閉合或者非閉合的完整等深線。當(dāng)前等值線生成都是基于等值線追蹤的算法,這些算法在等深線自動生成作業(yè)中已得到了較好的應(yīng)用,但隨著數(shù)據(jù)量的急劇增加,以有算法的生產(chǎn)效率問題逐漸凸顯,迫切需要發(fā)展高效的、適應(yīng)海量數(shù)據(jù)的等深線生產(chǎn)算法。
技術(shù)實現(xiàn)要素:
本發(fā)明的目的是提供一種基于結(jié)點排序的等深線生成方法及裝置,以解決目前等深線在生成過程中由于采用常規(guī)等值線生成方法導(dǎo)致效率低的問題。
本發(fā)明為解決上述技術(shù)問題而提供一種基于結(jié)點排序的等深線生成方法,該生成方法包括以下步驟:
1)根據(jù)水深數(shù)據(jù)構(gòu)建水深Delaunay三角網(wǎng);
2)遍歷每個三角單元并提取等深線段,將提取的等深線段與已生成的等深線段根據(jù)位置關(guān)系進行排序,并生成某深度值等深線結(jié)點鏈表;
3)根據(jù)排序結(jié)果將等深線結(jié)點鏈表中的等深點按順序連接,所連接得到的線即為等深線。
為消除等深線生成的不確定性因素,在構(gòu)建水深Delaunay三角網(wǎng)前對水深數(shù)據(jù)進行預(yù)處理。
步驟2)中等深線結(jié)點鏈表的生成過程如下:將提取的等深線段的首尾結(jié)點存儲到相應(yīng)ID鏈表中,根據(jù)鏈表之間的關(guān)系對ID鏈表進行合并,合并后的結(jié)果即為等深線結(jié)點鏈表,該鏈表中存儲的結(jié)點順序即為最終的等深點排序結(jié)果。
鏈表之間關(guān)系的具體類型通過表兩ID鏈表的首尾元素值進行判斷。
所述步驟2)的具體實現(xiàn)過程如下:
A.輸入一條等深線段的結(jié)點ID鏈表List_segi,若存在等深線段鏈表集合List_lines為空,則將List_segi加入到List_lines,并執(zhí)行步驟D,若不為空,則執(zhí)行步驟B;
B.將List_segi與List_lines中所有的結(jié)點ID鏈表List_segj逐一進行比較,判斷鏈表之間的關(guān)系斷,若兩個結(jié)點ID鏈表相接,則將List_segi加入到List_lines,并執(zhí)行步驟D,否則將List_segi按照順序或者倒序的排序插入到List_segj中,插入前將插入位置的重復(fù)元素刪除;
C.繼續(xù)將List_segi與List_lines中未比較的結(jié)點ID鏈表進行比較,若List_segi與List_segk為相接的關(guān)系,則執(zhí)行步驟D,否則將List_segk按照順序或者倒序的排序插入到List_segj中,插入前將插入位置的重復(fù)元素刪除,插入后將List_segk刪除,執(zhí)行步驟D;
D.繼續(xù)遍歷三角網(wǎng),輸入下一段等深線段的結(jié)點ID鏈表。
如果鏈表首尾的結(jié)點ID相同則該結(jié)點序列組成的等深線是閉合曲線;如果鏈表首尾的結(jié)點ID不相同則該結(jié)點序列組成的等深線是非閉合曲線。
本發(fā)明還提供了一種基于結(jié)點排序的等深線生成裝置,該生成裝置包括Delaunay三角網(wǎng)構(gòu)建模塊、等深線結(jié)點鏈表生成模塊和等深線確定模塊,
所述Delaunay三角網(wǎng)構(gòu)建模塊用于根據(jù)水深數(shù)據(jù)構(gòu)建水深Delaunay三角網(wǎng);
所述等深線結(jié)點鏈表生成模塊用于遍歷每個三角單元并提取等深線段,將提取的等深線段與已生成的等深線段根據(jù)位置關(guān)系進行排序,并生成某深度值等深線結(jié)點鏈表;
所述等深線確定模塊用于根據(jù)排序結(jié)果將等深線結(jié)點鏈表中的等深點按順序連接,所連接得到的線即為等深線。
為消除等深線生成的不確定性因素,該裝置該包括預(yù)處理模塊,用于在構(gòu)建水深Delaunay三角網(wǎng)前對水深數(shù)據(jù)進行預(yù)處理。
等深線結(jié)點鏈表生成模塊生成等深線結(jié)點鏈表的過程如下:將提取的等深線段的首尾結(jié)點存儲到相應(yīng)ID鏈表中,根據(jù)鏈表之間的關(guān)系對ID鏈表進行合并,合并后的結(jié)果即為等深線結(jié)點鏈表,該鏈表中存儲的結(jié)點順序即為最終的等深點排序結(jié)果。
鏈表之間關(guān)系的具體類型通過表兩ID鏈表的首尾元素值進行判斷。
本發(fā)明的有益效果是:本發(fā)明首先根據(jù)水深數(shù)據(jù)構(gòu)建水深Delaunay三角網(wǎng);然后遍歷每個三角單元并提取等深線段,將提取的等深線段與已生成的等深線段根據(jù)位置關(guān)系進行排序,并生成某深度值等深線結(jié)點鏈表;最后根據(jù)排序結(jié)果將等深線結(jié)點鏈表中的等深點按順序連接,所連接得到的線即為等深線。本發(fā)明通過判斷鏈表間的關(guān)系對鏈表進行合并,最終生成某一深度值對應(yīng)的鏈表,該鏈表中存儲的結(jié)點順序即為最終的等深點排序結(jié)果。本發(fā)明所提取的等深線不僅能夠正確表達海底地形,并且具有較高的效率。
附圖說明
圖1是本發(fā)明的基于結(jié)點排序的等深線生成方法的流程圖;
圖2-a是等深線段結(jié)點鏈表間無公共點的關(guān)系示意圖;
圖2-b是等深線段結(jié)點鏈表間首尾都共點的關(guān)系示意圖;
圖2-c是等深線段結(jié)點鏈表間同位共點的關(guān)系示意圖;
圖2-d是等深線段結(jié)點鏈表間異位共點的關(guān)系示意圖。
具體實施方式
下面結(jié)合附圖對本發(fā)明的具體實施方式做進一步的說明。
本發(fā)明的一種基于結(jié)點排序的等深線生成方法的實施例
本發(fā)明通過構(gòu)建水深Delaunay三角網(wǎng);遍歷每個三角單元并提取等深線段,將提取的等深線段與已生成的等深線段根據(jù)位置關(guān)系進行排序;最后根據(jù)排序結(jié)果將等深點按順序連接成等深線。該方法流程如圖1所示,具體實施過程如下:
1.對水深數(shù)據(jù)進行預(yù)處理,以解決等深線生成的不確定性問題。
2.構(gòu)建水深Delaunay三角網(wǎng)。
本實施例采用逐點插入法構(gòu)建水深Delaunay三角網(wǎng),其基本步驟如下:
1)首先構(gòu)建水深點集的凸殼。
2)然后隨機排列點集P中的所有點P0,P1,…,Pn-1。
3)建立初始三角網(wǎng),以凸殼上x值最小的點為出發(fā)點,按序與其余點相連,對點集P中的點Pr進行插入操作,所用采用的插入規(guī)則如下:
定位包含點Pr的三角形PiPjPk;如果Pr在三角形PiPjPk內(nèi)部,則連接點Pr和三角形PiPjPk的各個頂點,將其剖分成三個子三角形;如果Pr在三角形PiPjPk的邊PiPj上,則連接Pr與共邊PiPj的兩個三角形的第三個點,剖分形成四個子三角形;用Delaunay三角網(wǎng)的空心圓性質(zhì)考查新生成的三角形,如不滿足,則調(diào)換與相鄰三角形所組成的四邊形中相連的對角線,邊交換方法規(guī)格化三角剖分。
4)移除包含大三角形任意頂點的所有三角形。
3.遍歷每個三角單元并提取等深線段,將提取的等深線段與已生成的等深線段根據(jù)位置關(guān)系進行排序。
本步驟是將等深線段按其結(jié)點ID順序鏈表的形式來表達,結(jié)點ID鏈表的首尾元素存儲等深線段的首尾結(jié)點,通過判斷鏈表間的關(guān)系對鏈表進行合并,最終生成某一深度值對應(yīng)的鏈表,該鏈表中存儲的結(jié)點順序即為最終的等深點排序結(jié)果。鏈表之間的關(guān)系包括有相離關(guān)系和相接關(guān)系。創(chuàng)建等深線段鏈表集合ArrayList line,假設(shè)需要生成等深線深度值h,遍歷水深三角網(wǎng)中的三角單元,根據(jù)等深點確定原則判斷三角網(wǎng)格單元邊上是否存在等深點(若存在等深點則點數(shù)必為2),若存在,則兩個等深點組成該三角網(wǎng)格單元的等深線段,將等深線段以按其結(jié)點ID順序鏈表的形式來表達,創(chuàng)建等深線段結(jié)點ID的鏈表數(shù)組List_seg加入到等深線段鏈表集合ArrayList_lines內(nèi)進行結(jié)點排序,若不存在,繼續(xù)遍歷三角網(wǎng),直到遍歷完成所有三角網(wǎng)格單元。結(jié)點排序的過程如下:
A.輸入一條等深線段的結(jié)點ID鏈表List_segi,若存在等深線段鏈表集合List_lines為空,則將List_segi加入到List_lines,并執(zhí)行步驟D;若不為空,則執(zhí)行步驟B。
B.將List_segi與List_lines中所有的結(jié)點ID鏈表List_segj逐一進行比較,判斷鏈表之間的關(guān)系;若兩個結(jié)點ID鏈表,如圖2-a所示,鏈表間無公共點,即為相離關(guān)系,則將List_segi加入到List_lines,并執(zhí)行步驟D;若為如圖2-b、圖2-c、圖2-d所示的相接關(guān)系,其中圖2-b表示鏈表首尾都共點,圖2-c表示鏈表同位共點,圖2-d表示鏈表異位共點,則將List_segi按照順序或者倒序的排序插入到List_segj中,插入前將插入位置的重復(fù)元素刪除;
C.繼續(xù)將List_segi與List_lines中未比較的結(jié)點ID鏈表進行比較;若List_segi與List_segk為如圖2-a所示的相離關(guān)系,則執(zhí)行步驟D;若為如圖2-b、圖2-c、2-d所示的相接關(guān)系,則將List_segk按照順序或者倒序的排序插入到List_segj中,插入前將插入位置的重復(fù)元素刪除,插入后將List_segk刪除(一條等深線段最多與兩條等深線段分別首尾相接),執(zhí)行步驟D。
D.繼續(xù)遍歷三角網(wǎng),輸入下一段等深線段的結(jié)點ID鏈表。
4.根據(jù)排序結(jié)果將等深點按順序連接成等深線。
遍歷完三角網(wǎng)的同時等深線段結(jié)點排序結(jié)束,得到等深線順序結(jié)點ID鏈表集合,如果鏈表首尾的結(jié)點ID相同則該結(jié)點序列組成的等深線是閉合曲線,如果鏈表首尾結(jié)點的ID不相同,則該結(jié)點序列組成的等深線是非閉合曲線,按照結(jié)點ID鏈表集合的順序連接等深點即可生成深度值為h的等深線。
本發(fā)明的一種基于結(jié)點排序的等深線生成裝置的實施例
本實施例中等深線生成裝置包括Delaunay三角網(wǎng)構(gòu)建模塊、等深線結(jié)點鏈表生成模塊和等深線確定模塊,Delaunay三角網(wǎng)構(gòu)建模塊用于根據(jù)水深數(shù)據(jù)構(gòu)建水深Delaunay三角網(wǎng);等深線結(jié)點鏈表生成模塊用于遍歷每個三角單元并提取等深線段,將提取的等深線段與已生成的等深線段根據(jù)位置關(guān)系進行排序,并生成某深度值等深線結(jié)點鏈表;等深線確定模塊用于根據(jù)排序結(jié)果將等深線結(jié)點鏈表中的等深點按順序連接,所連接得到的線即為等深線。各模塊的具體實現(xiàn)過程已在方法的實施例中進行了詳細說明,這里不再贅述。