楊 松 夏定華 孫慧敏 劉 沛 黃 軍
(長江水利委員會水文局漢江水文水資源勘測局,湖北 襄陽 441022)
基于ArcPy技術(shù)的特大型水庫庫容量算研究
——以丹江口水庫為例
楊 松 夏定華 孫慧敏 劉 沛 黃 軍
(長江水利委員會水文局漢江水文水資源勘測局,湖北 襄陽 441022)
針對特大型水庫特點進行精確、快速的庫容量算對編制水庫調(diào)度方案具有至關(guān)重要的作用。介紹了常用的DEM法庫容量算原理和方法,并對GIS平臺下的ArcPy技術(shù)展開了研究。研究得出,采用ArcPy技術(shù)可快速實現(xiàn)特大型丹江口水庫的庫容分層分塊復(fù)核量算,提高了特大型水庫庫容量算效率。
庫容量算;DEM;ArcPy;特大型水庫;丹江口水庫
目前,水庫庫容量算方法主要包括等高線面積法、斷面法、測點構(gòu)網(wǎng)法、數(shù)字高程模型(DEM)法等。等高線面積法是假定兩等高線之間體積變化呈線性,無法精確反映兩高程之間的地形起伏,特別對地勢較為平坦地區(qū),計算結(jié)果誤差較大;斷面法主要是在庫區(qū)設(shè)定相互平行的斷面,要求斷面間的地形變化較為均勻,呈線性,而對于面積較大、支汊較多的水庫,計算精度難以保證;測點構(gòu)網(wǎng)法和數(shù)字高程模型(DEM)法,是目前較為普遍的方法,但是對于特大型不規(guī)則水庫的庫容量算,采用現(xiàn)有的方法則計算效率較低。因此,針對丹江口特大型水庫支汊多、面積大的特點,研究基于ArcPy技術(shù)實現(xiàn)不規(guī)則特大型水庫庫容量算,計算效率得到了提高,庫容量算成果得到了復(fù)核評價,滿足水庫調(diào)度運行需要。
DEM法計算水域庫容的基本思路是用不規(guī)則的三角形面(TIN)或者柵格單元面(柵格DEM)盡可能地與實際、真實的水下地形曲面緊密吻合,建立水下地形曲面模型,水下地形曲面模型和水域某一高程平面相交則形成水域庫容的實體模型[1]。根據(jù)數(shù)據(jù)結(jié)構(gòu)類型DEM法主要分為測點構(gòu)網(wǎng)法和柵格DEM法。
1.1 測點構(gòu)網(wǎng)法
根據(jù)實測的水道地形圖建立TIN,累積計算TIN在每個小區(qū)域上的容積,即為水庫的總?cè)莘e。
如圖1中,設(shè)空間三角形的3個頂點為A、B、C,頂點三維坐標(biāo)為(xa,ya,za)、(xb,yb,zb)、(xc,yc,zc),且za≥zb≥zc,可以通過排序得到這樣的假設(shè)。
圖1 三角形區(qū)域上的容積計算示意
假設(shè)計算高程面為z,三角形A′B′C內(nèi)角A′、C的正弦值分別為sinA′、sinC,A′B′、B′C、CA′邊長分別為c、a、b,則容積(v)、接觸表面積(r)的計算公式推算如下:
如果z≤zc,則a=0,v=0;
如果zc≤z≤zb,則
(1)
(2)
如果zb≤z≤za,則
(3)
(4)
如果z≥za,則
(5)
(6)
圖2 丹江口水庫庫區(qū)示意
如果數(shù)字高程模型為TIN(不規(guī)則三角網(wǎng))模型,則直接采用上式計算各三角形區(qū)域上延的體積,然后累加即為容積。
1.2 柵格DEM法
水庫容積定義為某一水位下或兩水位之間的蓄水容積。DEM法采用數(shù)字高程模型將庫區(qū)水體微分為若干個底面為正方形的柱狀體,通過正方體體積積分得到水庫庫容,其數(shù)學(xué)模型為:
(7)
式中,V為庫容,Ps為單個柵格的面積,H為計算水位值,hi為處于計算水位H以下的柵格單元的高程值,n為處于計算水位H以下的柵格單元個數(shù)。
2.1 庫區(qū)概況
丹江口水庫為丹(丹江)、漢(漢江)兩江并聯(lián)式特大型水庫,樞紐大壩位于湖北省丹江口市城區(qū),在丹江入?yún)R漢江的口門下游0.8 km處。丹江口水庫漢江庫區(qū)(簡稱漢庫)自上而下行政隸屬分別為陜西省白河縣、湖北省鄖西縣、鄖縣、丹江口市;丹江庫區(qū)(簡稱丹庫)自上而下行政隸屬分別為河南省淅川縣、湖北省丹江口市。
丹江口水利樞紐于1958年9月開工興建,1968年蓄水運用,初期工程于1973年竣工。大壩壩頂高程為162 m,當(dāng)正常蓄水位157 m時,漢江庫區(qū)回水長177.4 km、丹江庫區(qū)回水長85.4 km,形成了漢庫、丹庫兩個容積與面積基本相當(dāng)?shù)牟⒙?lián)式水庫(見圖2)。丹江口大壩加高工程完成后,水庫大壩壩頂高程為176.6 m,正常蓄水位調(diào)整為170 m。
丹江口水庫庫區(qū)四周多為山地,沿程寬、窄相間。正常蓄水位170 m時,漢庫內(nèi)最寬處約5 km、最窄處約400 m;丹庫內(nèi)最寬處(俗稱“小太平洋”)約17 km、最窄處約250 m。在水庫變動回水區(qū),河床以卵石、礫石、中粗沙為主;在水庫常年回水區(qū)以中細沙、淤泥絮泥為主。庫區(qū)氣候年內(nèi)溫差較大,盛夏最高氣溫超過40℃,冬天最低氣溫達-10℃。主汛期一般在7~9月份,水量較豐沛。
2008年丹江口水庫庫容量算時考慮整個丹江口庫區(qū)地形數(shù)據(jù)量龐大,當(dāng)時計算采用的程序軟件計算數(shù)據(jù)量有限,因此,庫容量算方法采用了分塊計算,將整個丹江口水庫共劃分為25塊分別進行計算。2015年對庫容量算結(jié)果進行復(fù)核計算仍然按照2008年量算分塊的相同范圍進行,并對如何提高計算效率做了進一步研究[2]。
2.2 ArcPy簡介[3]
空間數(shù)據(jù)的處理常常復(fù)雜而費時,而且其過程具有很強的重復(fù)性,基于窗口的應(yīng)用程序極大程度上限制了處理數(shù)據(jù)能力,有必要進行自動化處理。任何可以支持COM的腳本語言都可執(zhí)行ArcGIS的地理處理工具,如Python、Jscript和VBScript等。這些腳本語言都是公開的,而且易學(xué)易用,腳本可以將大批量的處理通過流程化的方式,動態(tài)地傳入、傳出參數(shù),達到批量、自動處理數(shù)據(jù)的目的。
Python是一種面向?qū)ο蟮摹⒖缙脚_的開源腳本編程語言,其功能非常強大而且較為簡單,易于學(xué)習(xí)[4-5]。ESRI公司自ArcGIS 9.0版中開始引入此語言,并已成為其首選的腳本語言,能夠用于數(shù)據(jù)分析、數(shù)據(jù)轉(zhuǎn)換、數(shù)據(jù)管理和地圖自動化等,可以很好地根據(jù)用戶需求定制專門的工具,提高工作效率。
ESRI公司將ArcGIS中的地理處理工具以及一些擴展模塊封裝成了ArcPy站點包,其中還有多種可用于處理和詢問GIS數(shù)據(jù)的函數(shù)和類。用戶可以借助Python和ArcPy調(diào)用工具,開發(fā)出各種實用程序處理地理數(shù)據(jù)。
利用ArcPy開展地理處理批處理腳本程序時,只需要通過引入地理處理模塊,創(chuàng)建地理處理對象,就可以開展程序開發(fā)。主要步驟分為兩步:
(1) 第1步,導(dǎo)入地理處理模塊:
import arcpy
(2)第2步,調(diào)用地理處理模塊的屬性和方法,以緩沖區(qū)分析函數(shù)為例:
arcpy.env.workspace = "C:/data"
arcpy.Buffer_analysis("roads", "C:/output/majorrdsBuffered", "100 Feet", "FULL", "ROUND", "LIST", "Distance")
2.3 ArcPy實現(xiàn)批量庫容量算批處理
(1) 根據(jù)ArcGIS處理單個計算區(qū)域庫容量算原理和方法,可以根據(jù)TIN法計算庫容,基于同樣的原理和方法,結(jié)合ArcPy實現(xiàn)多個計算區(qū)域庫容量算的批處理,見圖3。
圖3 Arcpy批量庫容量算處理流程
(2) 數(shù)據(jù)文件組織方式,以丹江口水庫為例,可將25個分塊的TIN文件放于同一文件夾路徑,根據(jù)處理流程,給定計算水位值的最小高程值和最大高程值,循環(huán)遍歷所有文件,并設(shè)置計算水位值間隔,以此計算所有TIN文件的庫容曲線。以丹江口水庫庫容分塊量算為例,數(shù)據(jù)組織見圖4。
圖4 ArcPy計算庫容的數(shù)據(jù)組織方式(TIN數(shù)據(jù))
(3) 創(chuàng)建大水體庫容分塊量算的腳本文件(見圖5)。
#輸入ArcPy站點包
import arcpy
from arcpy import env
arcpy.CheckOutExtension("3D")
files =arcpy.ListFiles()
for fc in files:
for i in range(n,m):
#循環(huán)計算各水位值,間隔為1m
dl=fc+str(i)+".txt"
arcpy.SurfaceVolume_3d(fc,dl,"BELOW",mgs,1,0)
圖5 新建GIS腳本工具界面
圖6 大水體庫容分塊量算GIS插件界面
(4) 創(chuàng)建大水體庫容分塊量算GIS工具流程(見圖6)。首先,在Arccatalog中選擇New->Toolbox,并設(shè)置文件名;其次,進入新建的Toolbox,空白處右鍵Add->Script…,并按照向?qū)瓿?屬性可以留空,以后使用工具屬性進行設(shè)置);最后,導(dǎo)入計算功能的.py文件,并設(shè)置輸入?yún)?shù),輸入?yún)?shù)類型與工具的參數(shù)類型一定要一致。
(1) 基于ArcPy技術(shù)對2008年量算的丹江口水庫庫容進行復(fù)核量算,其計算結(jié)果與采用GEO軟件量算的庫容比較,兩者較差不大于0.5%:在170 m正常蓄水位時全庫區(qū)容積復(fù)核較差為0.27%;在178 m提交成果最高水位時全庫區(qū)容積復(fù)核較差為0.26%。因此,采用該方法所得出的數(shù)據(jù)可靠。
(2) 本文根據(jù)特大型丹江口水庫的庫區(qū)地形特性,選取同一塊區(qū)域,采用GeoHydrology軟件、 Surfer 13.0軟件、ArcPy技術(shù)3種不同方法構(gòu)建DEM進行庫容量算,并分別統(tǒng)計了各量算方法的計算時間。分析得出,基于ArcPy技術(shù)可以快速實現(xiàn)特大型水庫的批量分塊計算,具有較高的計算效率。
[1] 齊峰.鴨河口水庫庫容DEM量算的適應(yīng)性與精度分析[J].人民長江,2014,45(15):36-38.
[2] 章厚玉、林云發(fā)、楊德安,等.丹江口水庫漢江干流庫區(qū)淤積分析[J].長江科學(xué)院院報,2010,27(9):1-5.
[3] 孫咸磊,許捍衛(wèi),李文博.ArcPy在長江河道水下空間數(shù)據(jù)批量處理中的應(yīng)用[J].測繪與空間地理信息,2015,38(2):97-99.
[4] 方圣輝,張玉賢,佃袁勇,等.基于Python的ArcGIS地理數(shù)據(jù)批處理[J].測繪與空間地理信息,2015,38(1):1-2.
[5] 李強、白建榮,李振孫,等.基于Python的數(shù)據(jù)批處理技術(shù)探討及實現(xiàn)[J].地理空間信息,2015,13(2):54-56.
(編輯:朱曉紅)
2017-03-31
楊松,男,長江水利委員會水文局江漢水文水資源勘測局,工程師.
1006-0081(2017)06-0054-04
TV697.2
A
河道演變