徐華平
(1.安徽省第二測繪院,安徽 合肥 230031)
水系包括自然河流、溝渠和水體,其實體數(shù)據(jù)表達為點、線、面,取決于對應比例尺下的寬度、面積指標以及其他特征。單線水系和與其有串聯(lián)關(guān)系的面狀水系是河網(wǎng)研究的主要對象。自然河流是指地貌低點間水往低處流動的區(qū)域,表現(xiàn)為地表水從分水嶺到匯水區(qū)域的流動以及在匯水區(qū)域內(nèi)的運動。支流匯入干流,逐級匯入,呈樹狀結(jié)構(gòu)。溝渠是指人工修建的供灌溉、引水、排水的水道。溝渠并非總是沿著匯水區(qū)域運動,符合地貌上的水往低處流的特點,地上渠有提水設(shè)施。干渠向支渠提供水源,表現(xiàn)為干渠流向支渠,支渠流向毛渠,毛渠流到田間,局部表現(xiàn)為逆樹狀結(jié)構(gòu)。干渠是地面上人工開挖的供引水、排水的主干渠道;修筑正規(guī)、渠道較寬,通達幾十公里以上[2]?;A(chǔ)地理信息數(shù)據(jù)中干渠隨處可見,不符合數(shù)據(jù)字典的定義。水體包括池塘、湖泊、水庫、海洋等,是洼地積水的寬闊水面。本文首先構(gòu)建面狀水系(河流、運河、溝渠、水體)的中心線,形成水系結(jié)構(gòu)線;再與單線水系共同構(gòu)成完整的河流網(wǎng)絡(luò)[3]。
將水系抽象為河流網(wǎng)絡(luò),仍需進一步細化河網(wǎng)的構(gòu)成。河段是指兩個結(jié)點間的有向線,如圖1中8號點與9號點間的有向線。河段高差是指河段中首點高度減去尾點高度,高差為負的河段屬異常,如圖1中3號點到1號點為河段異常。1級河網(wǎng)是指源頭到交匯點的河段。剝離1級河網(wǎng)后,按照1級河網(wǎng)原理標定的河網(wǎng)為2級河網(wǎng),依次類推。源頭是指河段的首點且懸掛,如圖1中的8號點;終點是指河段的尾點且懸掛,如圖1中的1號點(錯誤的終點)。流經(jīng)點是指兩條河段的連接點,只有兩個端點在此重疊。流經(jīng)點異常(如圖1的3號點)說明該處違背了一首一尾的連接方式,經(jīng)過流經(jīng)點的河段具有相同的河網(wǎng)級別。交匯點是指3個及以上的河段端點在此重疊,若交匯點均由首點或尾點構(gòu)成,則屬于異常,如圖1的9號點和7號點。
圖1 河網(wǎng)的數(shù)據(jù)對象
不積小流,無以成江海。一條條支流,逐漸匯成干流,呈樹狀結(jié)構(gòu),如圖2所示。終點數(shù)遠小于源頭數(shù),因此保證河流終點正確比保證源頭正確的工作量小很多。圖2中藍色方塊表示終點,綠色圓點表示源頭,直觀上也能反映其數(shù)量關(guān)系。
圖2 河網(wǎng)的樹狀結(jié)構(gòu)
流向錯誤主要表現(xiàn)在3個方面:①河段高差為負數(shù),并使用特殊顏色表示;②流經(jīng)點是兩個河段的連接點,兩個首點或尾點連接則顯示結(jié)點異常;③3個或3個以上的河段交匯處,若均為首點或尾點,標記異常。異常并不總是在第一時間被揭示出來,可能會在剝離1級河網(wǎng)、2級河網(wǎng)后才會出現(xiàn)。
本文根據(jù)樹狀結(jié)構(gòu)、水往低處流、首尾相接等河網(wǎng)特點設(shè)計算法。首先驗證每個終點,并標記流經(jīng)點、交匯點中的異常,標記并提取1級河網(wǎng);再對剩余數(shù)據(jù)重復上述處理,標記2級河網(wǎng);以此類推,直至交匯點為空集為止。
算法的具體步驟為:①目標數(shù)據(jù)添加字段;②驗證河網(wǎng)終點的正確性,修改高差為負的河段流向;③人工處理流經(jīng)點和交匯點的異常情況;④標記1級河網(wǎng);⑤重復步驟②、③、④,分別標記為2、3、…、n級河網(wǎng),直到交匯點列表為空。
本文采用的開發(fā)語言為Python 2.7,主要模塊為ArcPy。針對ArcGIS的gdb和mdb格式數(shù)據(jù)由若干功能函數(shù)組成,本文將功能函數(shù)的調(diào)用設(shè)計為人機交互式和一鍵式兩種模式。函數(shù)的主要功能和形式參數(shù)為:
1)刪除字段和增加字段:del_fld_2_fc(workspace'fc'flds)、add_fld_2_fc(workspace'fc flds)。
2)河段端點坐標:hydl_2_ptf_ptl(workspace'fc)。
3)端點重疊個數(shù)(含首點、尾點和總端點數(shù)):hydl_2_ptf_ptl_pts(workspace'fc)。
4)結(jié)點類型(源頭、終點、流經(jīng)點、交匯點):node_type(workspace'fc)。
5)河段高差計算:ptf1_ptl1_dh(workspace'fc'image_file)。
6)1級河網(wǎng)提?。篹xport_fenji(workspace'fc)。
7)分汊河段處理:branching_river(workspace'fc)。
8)綜合調(diào)用函數(shù),主要用于一鍵式運行:run(workspace'fc'image_file'flds)。
交匯點為空值時,布爾值為false,終止執(zhí)行程序;否則持續(xù)依次運行上述函數(shù),初始河網(wǎng)值設(shè)為1,運行時河網(wǎng)值遞增1。除增加、刪除字段外,其他值根據(jù)需要重新計算,如首尾點列表隨河段的改向變化。
對于自然河流,程序運行效果非常好;而在溝渠密布區(qū)域有時會出現(xiàn)逆樹狀結(jié)構(gòu),通過大量驗證“終點”數(shù)據(jù)也無法提供對流向判斷的支撐,仍以人工分析為主。
人機交互模式是在河網(wǎng)每次分級前修改程序報出的問題,若某源頭錯判為終點,不及時修改,則無法生成局部1級河網(wǎng),涉及的2級河網(wǎng)也無法生成,程序會將矛盾和異常記錄在河網(wǎng)數(shù)據(jù)中,如高差為負值,在結(jié)點文件中會記錄結(jié)點異常;一鍵式模式是等程序全部運行后再進行問題修改,需考慮該錯誤的影響范圍,易漏改、錯改問題,往往需要運行多次,反復查看比對不同級別河網(wǎng)分級前的異常記錄。
1)Strahler法。沒有支流的河流為1級,級別相同的河流交匯后的河流分級將升高1級,不同級別的河流交匯后,保持交匯前的高級別[4]。
2)Shreve法。沒有支流的河流為1級,交匯后的河流分級是交匯前的級別之和。
程序首先生成1級河網(wǎng),剝離并定名為fc_01;再對剩余數(shù)據(jù)依次生成2、3、…、n級河網(wǎng),命名為fc_02、fc_03等。河網(wǎng)分級結(jié)果符合Strahler法。
本文提取安徽省南部某一水系區(qū)域,主要利用該區(qū)域的DLG、DEM、DOM數(shù)據(jù)。DLG中的HYDL數(shù)據(jù)是待驗證的對象[5]。對HYDL數(shù)據(jù)進行過濾,排除溢洪道、干溝、河道干河等不參與河網(wǎng)分級和流向判斷的要素,并對數(shù)據(jù)進行線重疊、微短線、自相交、相交打斷處理[6]。河流也有立交的情況,需查看輸水槽和地上渠的情況,避免這些數(shù)據(jù)的誤處理擾亂(立交不打斷)程序的進行。添加字段為后續(xù)分析、計算的結(jié)果提供信息載體。
驗證“終點”,逐條修改自然河流河段高差為負的區(qū)域,并分析其斷在此處的合理性;分析處理全部“流經(jīng)點_異常”;逐個核實“交匯點_異?!保①|(zhì)量測試結(jié)果符號化[6],如圖3所示。
圖3 研究區(qū)范圍內(nèi)部大量的“終點”
1)不合理的終點。可通過延長、連接、添加結(jié)構(gòu)線或改變方向來處理。
2)河流與溝渠混亂。河流與溝渠相交的不合理打斷將干擾河網(wǎng)分級和水系流向的判斷,排查交匯點個數(shù)≥4的區(qū)域。河流一定在匯水區(qū),不管是否進行了人工修建??缭胶恿骱筒煌雀呔€的、不沿地貌低點流動的就按溝渠對待。
3)河流分汊。交匯點之后新增河段數(shù)≥2,則分汊后河網(wǎng)級數(shù)與分汊前保持一致,執(zhí)行了河網(wǎng)分級原理;并標記分汊點供人工結(jié)合影像圖來分析。
4)封閉溝渠。類似池塘一樣靜止的水面,沒有水源,也不外流。按獨立水網(wǎng)對待,為1級河網(wǎng)。
一鍵式模式、人機交互模式實際上均歸結(jié)為人機交互模式,差別在于及時處理問題或事后集中處理問題。
給定數(shù)據(jù)路徑后,再計算結(jié)點類型,并給出矛盾結(jié)點和問題河段,人機交互主要體現(xiàn)在這個環(huán)節(jié)。首先按提示修改每個問題,再計算結(jié)點類型,生成并提取1級河網(wǎng)。如此往復,生成并提取2級河網(wǎng)、3級河網(wǎng)等。若不通過人機交互處理問題,矛盾結(jié)點和問題河段將累計到程序運行結(jié)束。分級后疊加高程模型的河網(wǎng)分級結(jié)果如圖4所示,正常情況下不使用DEM數(shù)據(jù)。
圖4 河網(wǎng)分級結(jié)果
迭代終止的條件是交匯點個數(shù)為0或源頭數(shù)為0。表1中5個字段有4個字段的數(shù)量在大幅減少,唯獨流經(jīng)點—異常在增加,剝離上級河網(wǎng)后,才顯露問題,這也是通過河網(wǎng)分級解決流向問題的價值所在。終點數(shù)不為0,是由于一條河流兩頭都是終點,程序無法為其分級,改正存在的錯誤后程序才能運行徹底。由于存在結(jié)點錯誤,初次運行的分級結(jié)果并不完全可靠,改正存在的錯誤才能得到滿意的結(jié)果。
表1 分級結(jié)點類型統(tǒng)計
河網(wǎng)分級是解決水系流向問題的手段。通過確保河段終點的正確性,推算結(jié)點關(guān)系和終點所在河段的高差,可大幅提高解決水系流向的工作效率。