王會然,劉學民
(河北省地質測繪院,河北 廊坊 065000)
地面的高程信息,反映了地形起伏的狀態(tài),一個區(qū)域的高程信息同實際地形的接近程度與采樣點的密度成正比。用高程點和等高線描述高程信息,是地形圖中表示地形的主要方法,高程點表示所在地形處局部的平均高程,具有離散性,等高線表示地形在某高度的地面點連續(xù)狀態(tài),在一定程度上顯現(xiàn)了地形的形態(tài)特征。由于實際地面的復雜性和偶然性,無法用高程點、等高線以抽樣的離散數(shù)據(jù)來無差別地表示連續(xù)的地形起伏。為了能夠科學地描述地形,對復雜的地形高程信息進行適當?shù)钠交?、綜合,剔除零星的異常凸凹點,去除次要的、非地形的高程信息,構成了與真實地面接近由具體點線表達的幾何地形表面,在后續(xù)地形圖應用中高程處理如高程內插、工程土石方量計算、通視分析、線路規(guī)劃等工作,都是在這個幾何面上進行的。對高程數(shù)據(jù)中與實際地形存在的不一致,稱之為地形高程誤差,顯然此差異不應超過地形圖精度要求的規(guī)定。在每兩個相鄰等高線之間,所有采集的地面點的高程值,均應落在此兩等高線所代表的高程以內,否則就稱之為矛盾。在實際地形圖生產中,經(jīng)常因地形破碎、人為原因而采集了某些不具有代表性、不符合所描述的地面主體特征的高程點,與圖內相鄰等高線產生矛盾,需要我們找到這些點進行調整修改。在計算機制圖以前,這些工作都是有人工檢查的,現(xiàn)在制圖方法已基本都是計算機制圖,對于高程檢查,也產生了一些相關的軟件工具,其檢查方法主要有:DEM套合檢查法、地面三角網(wǎng)TIN法、相鄰等高線查找比較法,這些方法有些不足,本文提出了依據(jù)相鄰比較法按一定數(shù)量多個方向在計算機上快速查找的方法,并編寫了相應的程序,通過實際生產驗證表明:該方法檢查結果完全正確,并且適應性強,很少發(fā)現(xiàn)漏判,沒有發(fā)現(xiàn)誤判。檢查速度快,100 M左右文件查找時間不到 30 s。目前,國內地圖生產單位技術參差不齊,使用的軟件也多種多樣,包括采集、編圖、GIS管理、遙感,但在高程點線矛盾檢查方面能與自己單位實際情況高度適應的工具很少,大都需要二次開發(fā),本文詳盡說明了此方法的原理和步驟,對需要從事此開發(fā)任務的人員有一定的幫助。
根據(jù)等高線利用一定方法生成區(qū)域內的數(shù)字高程模型DEM,對采集的高程點高程與DEM擬合出的該高程點處的高程值比較,當差值大于一個等高距時,則認為發(fā)生了矛盾。DEM套合方法只能檢查高程點與等高線所表示的地面高程符合性,而不能檢查相鄰等高線與高程點間是否缺少等高線,也不能檢查出山頂處出現(xiàn)平三角時的正負地貌矛盾,如圖1所示,高程點A的北側缺少等高線15,高程點B處應為正向地貌。
圖1 等高線缺少及山頂處情況
利用等高線構造地面三角網(wǎng)TIN,根據(jù)其內插出的高程點處高程值與采集的該點高程值比較。此方法需要構造三角網(wǎng),內插運算和坡度計算復雜,對于有特征線如道路、溝渠、坡坎時,要求這些線上的點必須有被高程并參與構網(wǎng),否則在這些線附近的高程點是無法正確檢查的。
通過相鄰等高線與高程點之間的高程值直接對比判斷是否矛盾,該方法主要問題是如何確定哪些點和線構成相鄰關系。實際數(shù)據(jù)中,點和線、線和線的相鄰關系均不是一一對應關系而是一對多關系,找到某高程點所相鄰的所有等高線是消除漏查率的關鍵。射線法是一種很好的查找方法,但是由于地形的復雜性,該方法檢查方向數(shù)量的多少是影響漏查率的主要因素,方向多漏查率低,但速度慢。對于一般地形如平原、丘陵、山地等地形完整地區(qū),因等高線比較長,每個高程點相鄰的等高線基本是兩條,按四方向查找時均可達到1%以下的漏查率,對于較破碎的蜂窩狀地形如內蒙古地區(qū)的沙丘地,則漏查率會高些,可能達到5%或更高,通過增加檢查方向,很容易將漏查率降低到1%以下。實際生產中所使用的軟件尚無準確可靠和全面的檢查能力,主要是檢查工具與實際數(shù)據(jù)情況不適應,錯報漏報嚴重,很多單位仍主要靠人工方法檢查,使得工作效率和質量都受到很大影響。
有限方向檢測法原理是對于一個高程點,從該點出發(fā)沿一個方向查找與其相交的所有等高線,選擇交點到該高程點最近的等高線作為相鄰等高線,選擇第二近的等高線為次臨等高線。同樣,按另一個方向查找,找到對應的相鄰等高線和次臨等高線。盡可能按所有方向,查找各自對應的相鄰線和次臨等高線。比較該點的高程與所有找到的相鄰線的高程,如果其差值大于等于一個等高距時,則認為該點與對應的相鄰等高線存在點線矛盾,對沒發(fā)現(xiàn)相鄰等高線的方向,按無矛盾處理。當該點的高程與相鄰等高線高程差在一個等高距內時,在一檢查方向上,從該高程點到相鄰等高線,再到次相鄰等高線,三者代表的高程值是否依次遞增或遞減,如不是則認為此檢查方向發(fā)生矛盾。對沒發(fā)現(xiàn)次臨等高線的方向,只考慮上一條。對所有高程點進行同樣的操作,找出所有存在矛盾的點。在存在矛盾的點處做出標記,標記內容應包含矛盾類型和出現(xiàn)矛盾的有關信息描述,以便于作業(yè)員修改。
有限方向檢測法關鍵需要確定檢查方向。為了檢查方便簡單,可沿垂直的上、下,水平的左、右4個方向進行,如圖2所示。
圖2 南北東西四方向查找示意圖
圖2中的1、2、3、4號點是對G1高程點找到的臨近等高線的交點。當沿垂直方向查找時,可判斷被判斷線兩連續(xù)點的水平坐標分別在G1點的東西兩側,不滿足此關系的直接跳過。對滿足此條件的線段,按G1的水平坐標代入該線段的直線方程求得垂直坐標,該垂直坐標與G1點的縱坐標之差的絕對值即為兩點的距離。當縱坐標差為正值時,交點在高程點上方,為負值時,在高程點的下方。分別按正負兩種情況,求得1點和2點。同樣道理,求得水平方向兩交點3和4。
為了提升對處理破碎地區(qū)檢查的適應性,降低漏查率,可根據(jù)地形破碎情況增加檢查方向數(shù)量,一般情況下,采用8個方向時漏查率均可達到1%以下,本文中提出增加方向為東北、西南、西北、東南4個方向。
考慮到為了減少漏查率增加查找方向,因為增加的方向不是原來的垂直和水平方向,對于求相鄰線的判別無法按上述坐標跨越該高程點坐標的方式定位交點所在的線段,如果對每條等高線的所有線段都探測與該方向有無實交點,然后根據(jù)實交點求距離,并且判斷是哪個方向的交點等,那么計算工作量會非常巨大,當?shù)雀呔€上點數(shù)密集時檢查速度大大降低。為此,本文采取下面方法提高執(zhí)行速度:
(1)讀入數(shù)據(jù)時,同時確定線對象的極值,每條等高線的縱橫坐標極大值和極小值將會構成一個矩形范圍,記錄此極值時要與線數(shù)據(jù)記錄順序一致,便于對應。同時對旋轉備用的數(shù)據(jù)也確定相應的極值。當對一個高程點查找相鄰等高線時,首先判斷該點與線的極值關系,只有高程點落在兩坐標軸分別沿該極值矩形一極值到另一極值掃過的區(qū)域內時,按垂直(水平)檢查法時才會有實交點,當落在范圍外時是不存在實交點的,故可以跳過,如圖3所示。經(jīng)過此方法,可以大大加快檢查速度,特別是當?shù)匦纹扑椋雀呔€數(shù)量大普遍節(jié)點較少時對速度提升更顯著。
圖3 等高線極值與判定相鄰區(qū)域關系的示意圖
(2)讀入數(shù)據(jù)后,除了按原始情況記錄各點線數(shù)據(jù)作為垂直、水平4方向檢查外,對新增檢查方向再根據(jù)圖形數(shù)據(jù)確定圖件的中心,將圖形以此中心按逆時針(或順時針)沿檢查方向旋轉至垂直(水平)方向,本文中是旋轉45°。將新計算得到的點線數(shù)據(jù)作為一個備份,后續(xù)按此數(shù)據(jù)檢查時仍然按垂直、水平四方向檢查,提高檢查速度。當發(fā)現(xiàn)有矛盾時,通過逆旋轉計算出該高程點旋轉前的坐標并以此坐標位置標注矛盾信息,因為發(fā)生問題概率不會是大量存在,相對來說有矛盾的點不會太多,因此在后續(xù)標注問題說明時,只需對這些矛盾的點進行一次坐標旋轉計算,計算量不大。
在地形圖生產中,一個圖形文件的高程點和等高線數(shù)量往往是很大的,線條達到幾萬、幾十萬是經(jīng)常的。同時由于地形特點、作業(yè)要求、數(shù)據(jù)采集方法以及作業(yè)員手法等存在差異,使得圖中各條等高線長度、密度相差甚大,每條等高線上的結點數(shù)量往往從幾個到幾千個不等,對于編好的線連續(xù)性好的地形圖,有的等高線節(jié)點數(shù)可達1萬個以上?;谏鲜鲈颍€數(shù)據(jù)記錄時不宜采用固定數(shù)組的方式,應當采用動態(tài)數(shù)組,根據(jù)數(shù)據(jù)實際大小使用內存。對于線上點坐標的記錄方式,不能采用線序+點序的二維數(shù)組表示,如:利用x(i,j)表示第i條線的第j個點的x坐標。因為這樣使用,為了讀入某點數(shù)最多的線,定義線數(shù)據(jù)數(shù)組時j的值必須足夠大,同時由于地形圖中線數(shù)量很多,i的取值也會非常大。當線地物達到幾千(實際中還要大得多),線上最多點達到幾千時,目前計算機內存大都已無法保證甚至無法運行,而實際上,對圖中眾多的短小線,絕大多數(shù)數(shù)據(jù)部分是空的,使得內存浪費嚴重。為了節(jié)約內存,可采用下面手段:
(1)對文件中的線文件讀入時采用預讀入以記錄線的個數(shù)、每條線的點數(shù)、所有線總點數(shù),讀入時,線個數(shù)和所有線總點數(shù)各用1個變量記錄,每條線的節(jié)點數(shù)用一維動態(tài)數(shù)組記錄,隨著線數(shù)的增加動態(tài)增長。
(2)按所有線的總節(jié)點數(shù)n設計1個1*n維動態(tài)數(shù)組放置所有線的某坐標如xn坐標并重新讀入線數(shù)據(jù),按此數(shù)組記錄坐標數(shù)據(jù)。y和z同樣處理。
(3)按線的條數(shù)m設計1個m*2動態(tài)維數(shù)組放置第i條線的坐標起始地址和個數(shù)如L(i,0)=n1,L(i,1)=n2。訪問線時,第i條線各點對應的x坐標為xn1,xn1+1,……,xn1+n2-1,y和z坐標同理。
(4)對旋轉后使用的數(shù)據(jù)按上述方法做同樣處理。
一幅地形圖中,對高程產生影響的線狀地物是很多的,如房屋線,道路邊線、坡坎邊線等,在此特征線附近,等高線存在斷開、缺少的情況,如果不考慮這些線的存在,在檢查時會產生大量的誤報。如圖4所示的坎線不考慮,會影響到A、B兩點的判斷。為了保證檢查工具對其他特征線存在時的適應性,本文采取的方法是:對某點開始檢查時,對每個檢查方向設置一個布爾變量,初始值設為無矛盾,在搜索最近相鄰線時,將地物線、特征線也一并考慮在內,如果在某方向最近線是這類線時,此方向就認為無矛盾,如圖4中的A點南側、東南側,B點的北側、東北側。只有在該方向最近線是等高線時才判斷矛盾的可能性。此預設對圖幅邊緣的高程點同樣適用,這些邊緣處高程點外側沒有了等高線,都視作不存在矛盾也是合理的,如圖4中的A點西側、C點北側、D點南側。
圖4 地物線、特征線處的情況處理
實踐表明:本文所提出的方法簡潔明確,編程方便,通過多次地形圖點線矛盾檢查,包括河南、湖南的山區(qū)、丘陵地形;三峽地區(qū)高山區(qū)地形;內蒙古沙丘地形以及華北平原地區(qū),結果正確可靠、方法適用性強。通過速度優(yōu)化提速明顯,腳本檢查相對較慢,如用第三方編譯方法得到exe文件則更快,只是需要對數(shù)據(jù)格式讀取的經(jīng)驗。
采用的是有限方向法,不是嚴密的無遺漏檢查,如對某高程點檢查時,在某檢查方向沒有遇到等高線而是從最近等高線縫隙穿過。此情況在地形非常破碎的情況下是有可能存在的。對此仍然可以用增加檢查方向來減少漏檢率。另外,當采用了增加方向到正方向的旋轉時,增大了內存的占用,由此占用的內存是原數(shù)據(jù)量的幾何倍數(shù),每旋轉1次,增加原始數(shù)據(jù)1倍內存占用,對較大文件操作前應估計將使用的內存大小,防止失敗。當旋轉次數(shù)多時,可采取每檢查完一組新增方向,就釋放其該部分內存的方法,其他新增方向仍然以原始數(shù)據(jù)變換得到,這樣就可以最多使用2倍于原始數(shù)據(jù)的內存。