时间:2023-04-12 15:22:00
海河流域水资源综合规划采用水资源系统配置模拟模型对全流域进行了长系列的供需分析,生成了近2万行供需平衡数据。如果采用常规手工统计分析方法进行供需分析,难于适应规划的进度和精度要求。介绍如何利用Foxpro数据库系统提供的强大数据处理功能,实现供需平衡数据的统计分析和输出,并给出了实用的程序片段,不仅对提高水资源规划工作效率有所帮助,而且其思路和方法对其他专业规划也具有一定的参考价值。
1引言
海河水利委员会在水资源综合规划中委托中国水科院水资源所开发研制了海河流域水资源系统配置模型,配置模型以水资源三级区套地市作为基本计算分区,同时又根据规划精度的要求对分区作了进一步细化,共划分107个计算单元。利用配置模型对全流域进行了长系列的供需分析.生成了基准年、2010、2020和2030年4个规划水平年107个计算单元45年的供需平衡数据,不仅数据量大,而且方案反复调整,十分烦琐,若采用常规手工统计分析方法,对计算单元供需平衡数据按不同分区进行各种频率的供需分析,难于适应规划的进度和精度要求。运用Foxpro数据库系统提供的强大数据处理功能.基本实现了不同水资源分区供需分析长系列成果生成、均值统计、各种保证率成果确定、大型调水工程不同保证率供水量统计及最终成果表编制等工作的程序化,极大地提高了工作效率。
2建立基础数据库
水资源配置模型运行后导出的供需平衡数据为包含107个计算单元的1956-2000年的系列数据.文件数据格式既可选择Excel表格,也可选择以Tab为分隔的数据文件.表格基本格式见表1(仅列部分字段)。
Foxpro数据库系统具有直接导入以上两种数据格式文件并生成相应数据库的功能。以Tba分隔数据文件为例,如水资源配置模型导出文件名为balance.dat则导入并建立数据库的程序为:
use单元供需分析.dbf
delel all
pack
append from balance.Dat type delimited with tab
其中,“单元供需分析.dbf”为事先建立.其字段为与balance.dat相一致的数据库文件。
按水资源综合规划要求.供需分析成果以省级行政区套水资源二级区(以下简称省套二级区)为统计单元.保证率主要根据统计单元的降水频率确定。因此.需建立一个以省套二级区为统计单元的长系列降水量数据库“降水排序.dbf”.字段包括:年份、二级区码、省级码、降水量和降水排序(降水量降序排列号)5个字段,其中年份为1956-2000年。
为了简化统计分析的程序代码,构建了一个贮存省级行政区及二级区组合码的数据库“省套二级区编码.dbf'’,数据库记录包括了海河流域省级行政区与二级区的所有可能组合.海河流域有l6个省套二级区,因此共有l6个记录。字段包括:wt_code(二级区码)、pry_code(省级码)、wt_na(二级区名称)、plv_na(省级区名称)4个字段。
3数据库记录编码
供需平衡数据的统计分析,主要以计算单元编码作为统计区域分类的线索,选择合适的编码方式和规则尤为重要。以字母和数据构成的编码具有简洁、便于重新组合的优点。在海河流域水资源配置模型中,计算单元编码由1个字母和l5个数字组成,其中前3位代表水资源二级区,如C02为海河北系;前7位代表水资源三级区,如C010100为滦河山区;8~9位为省级行政区,如l3为河北省;而第l0位以后的编码为地市级行政区等信息。
对计算单元供需平衡数据按不同分区要求进行统计分析的操作,实际上是对数据库记录(行)进行分类、合并、排序、提取的过程。为了达到分类合并的目的,在“单元供需分析.dbf”数据库中增加了1个“组合码”字段,用于存储重新分类统计的组合编码。
4供需平衡数据的统计分析
为了生成省套二级区的供需分析长系列成果,并进行各种频率的供需分析,首先需对“单元供需分析.dbf”数据库中的每个记录进行分类,如哪些记录属于海河北系河北省1956年的数据?通过提取单元编码中代表二级区及省级行政区的编码,并与年份进行组合,即可形成不同年份省套二级区的组合码,将其存人数据库的组合码字段,为同类合并(相加)创造了条件。数据库系统对已索引或排序的数据库提供了方便的同类合并功能,以下程序片段,轻而易举地完成了省套二级区供需分析长系列数据的整理工作。
use单元供需分析.dbf
copy all to temp.dbf
use temp.dbf
repl all组合码with yearl+substr(code0,1,3)+substr(code0,8,2)1
index on组合码to ch_code
total on组合码to省套二级区系列.dbf
其中:temp.dbf为临时数据库,是“单元供需分析.dbf”数据库的复制文件.对其进行操作可避免改变原有数据库:yearl和code0分别为年份和单元编码字段。
在数据库系统的工作区1打开先前建立的“省套二级区编码.dbf”,并保持打开状态。在工作区2反复打开或关闭用于查找不同降水频率对应年份的“降水排序.dbf”、用于提取不同保证率供需平衡数据的“省套二级区系列.dbf”及存储统计分析结果的“省套二级区供需分析.dbf”,并进行数据的统计、复制、添加、分区名称及保证率的填写等操作。以工作区1第1个记录(第一个省套二级区)为起始,提取省套二级区信息,利用do while not eofO循环语句。在两个工作区之间来回变换,进行重复的统计分析操作,直到完成最后一个省套二级区的统计分析。程序片段(仅以50%保证率和平均值统计为例)如下:
sele1 &&选择工作区1
use省套二级区编码.dbf
do while not eof0 &&循环开始
prv_nal=prv_na &&提取要统计的省级区名
wt_na1=wt_na &&提取要统计的二级区名
prv_codel=pry_code &&提取要统计的省级区编码
wt_codel=wt_code &&提取要统计的二级区编码
sele2 &&选择工作区2
use降水排频.Dbf &&在排频文件中找到年份
locate for省级码=prv_codel and二级区码=wt_codel and降水排序=23
year50=年份
use省套二级区系列.Dbf &&在数据库中提取对应省套二级区和频率的记录
Locate for substr(code0,1,3)=wt_code1and substr(code0,8,2)=prv_codel and year0=year50
Copy next 1 to tmp50.dbf
average all城镇需水to城镇需水1 for substr(code0,1,3)=wt_codel and substr(code0,8,2)=pry_codel
…
use省套二级区供需分析表.dbf
append from tmp50.dbf
repl name0 with pry_nal
repl code0 with wt_nal
repl ch_code with“50%”
append blank
repl ch_code with“多年平均”
repl城镇需水with城镇需水1
…
sele 1
skip &&工作区1记录指针加1
enddo &&循环结束语句
close all
其中:“降水排序=23”定位条件,用于查找降水量由大到小排序的第23个记录,按经验频率计算,在45年系列中的频率正好为50%的年份。
以上程序已完成省套二级区供需分析,并形成了相应的数据库。最后通过以下两个语句将省套二级区供需分析数据库文件转换成Excel文件格式的表格:
use省套二级区供需分析表.dbf
copy all to省套二级区供需分析表.Xls type xls
生成的Excel表格.表头为数据库结构中的字段名,过于简单,利用Excel的链接功能,将其与具有满足要求表头的Excel文件相链接,便解决了正式表格的编制问题。
5按分区降水排频存在的问题及解决办法
受农田灌溉需水过程、径流年内分布及水库对地表水径流调节作用等因素的影响,按分区降水排频可能出现遇偏枯年份供水量并不减小或缺水并不明显的特殊情况,不符合一般的规律。在现实中,也有类似的例子,如海河流域1980年为枯水年,但由于上一年为丰水年,水库蓄水比较充足,在需水量大又有水可供的情况下,全流域地表水供水量达到了149亿m3,比平水年还要大。为避免出现类似的情况,在供需分析中,分别采取了对应频率附近3年平滑法(取近似频率所对应3年的平均值)及3年中取偏大或偏小值年份(如95%频率取3年中供水最小值或缺水最大值)法对成果进行了调整,必要时辅以人工分析,以使所选择的典型年更具代表性。
免责声明以上文章内容均来源于其他网络渠道,仅供欣赏,不代表本站观点,与本站立场无关,仅供学习和参考。如有涉及到您的权益,请来信告知(email:qsllxy@163.com),我们核实后会立刻删除。