本发明涉及地理信息系统技术领域,尤其涉及一种基于xml数据格式的河网水系存储表达方法。
背景技术:
在地理信息系统(geographicalinformationsystem,gis)中河流、地块等地理要素普遍使用矢量与栅格这两种数据表达方式。矢量数据利用点、线、面、体等空间几何形式来表达现实世界,这种方式可以整体地表示河流水系的地理位置、空间形态,数据冗余小,但是计算过程比较复杂,坡面和河道需要分为面、线两个图层来存储,需要专业软件支持;栅格数据利用离散栅格单元来表达地物或空间现象的某个属性特征,直观形象,计算简便,被大多数水文模型所应用,但是栅格单元之间的水文拓扑关系无法直接查询,也不能在一个图层中存储单元的多重属性,如河道的宽度,坡度等等。总之,上述两种传统的数据结构对河网水系的存储表达均已不能满足应用的需求。
技术实现要素:
本发明针对传统矢量、栅格数据结构在存储表达河网水系方面的问题,提供一种基于xml数据格式的河网水系存储表达方法,将河网水系离散为正方形空间单元,将河道单元作为一个节点存储,对节点进行编号并描述河道单元与坡面单元、河道单元与河道单元之间的拓扑关系,并利用xml格式存储这些信息。
本发明采用的技术方案是:
一种基于xml数据格式的河网水系存储表达方法,其包括以下步骤:
s1,给定一个封闭的流域空间单元,输入该流域的dem(digitalelevationmodel,数字高程模型)栅格数据,在该dem数据上,标定流域出山口位置,即出山口河道单元r0所在位置;
s2,将出山口河道单元r0作为起始单元节点,给出山口河道单元r0赋予河道单元的宽度属性和坡度属性;
s3,以出山口河道单元r0作为河流终点,基于dem计算出水流流向图;大部分gis软件具有该功能,计算过程不赘述;
s4,根据流域特征设置累积汇流阈值,从水流流向图中区分出河道单元与坡面单元,分别记为河道单元集合rchannel与坡面单元集合rslope;
s5,以出山口河道单元r0为初始节点,根据水流流向图逆向遍历流域中所有的栅格单元,
当读取到的栅格为河道单元时,则将该河道单元作为一个新的节点r1并赋予其河道特征属性;
当读取到的栅格为坡面单元时,则将该坡面单元作为属性列入到出山口河道单元r0的属性集合中,同时以该坡面单元作为起点继续逆向遍历流入该坡面单元的其他坡面单元,直到流域边界上的最后一个坡面单元;
s6,针对新的节点r1,重复s5所述遍历过程,直到所有河道单元都被遍历完;
s7,按照逆流向将遍历到的所有河道单元存储到静态链表lrchannel中,可以根据河道单元id直接获取该河道单元的其他属性;
s8,将静态链表lrchannel的转换为xml格式。在磁盘中存储为xml格式的文件,直观的利用节点对象表示河道单元,读取文件时可以便捷地进行转换。
进一步地,步骤s1中标定出口位置的具体方法为设置汇流累积阈值的最大值,即整个流域的栅格单元数,计算得到流域出山口位置,所述流域是一个完整的流域,同时有且仅有一个出山口位置。
进一步地,步骤s4中所有河道单元按照逆流向顺序赋予唯一标识码id。
进一步地,步骤s4中基于广度优先或者深度优先方式遍历流入坡面单元的其他坡面单元;
当基于广度优先方式时,按遍历到的先后顺序存储得到水流长度、坡面汇流时间信息。
进一步地,步骤s5中赋予河道单元的属性包括河床坡度、河道宽度、河道单元id及下一个河道单元的id;出山口位置的初始河道单元没有下一个河道单元id;坡面单元id作为属性赋予其汇入的河道单元。
进一步地,步骤s7中将每个河道单元看作为一个对象,该河道单元对象具有宽度、深度、曼宁糙率系数和位置属性。
进一步地,步骤s7中使用数组作为构建静态链表lrchannel,该静态链表lrchannel按照遍历到的河道单元顺利存储每个河道单元对象,以便为了快速访问到每一个河道单元。
进一步地,步骤s8的具体步骤为:根据静态链表内存储的河道单元对象结构生成相应的xml节点,所有河道单元位于<channelnodes>节点内,每个河道单元是一个<channelnode>节点,该节点具有子节点<width>、<deep>、<manning>、<pos>,所有子节点均是河道单元的属性,每个子节点细分为更小的子节点。
本发明采用以上技术方案存储流域内各个单元,可以实现快速准确地查询检索到汇入任意一个河道单元的所有上游河道单元和坡面单元,也可以快速的查询到该河道单元的基本属性以及该河道单元下游的其他河道单元。本发明与现有的技术相比,本发明的创新性改进为:使用xml数据格式描述河网水系各个离散单元的属性及其相互之间的拓扑关系,将每个河道单元都作为一个节点对象,将流入该河道单元的坡面单元作为其属性,相比传统栅格数据或矢量数据可以更好的表现各个河道单元属性及其上下游拓扑关系,在水文模型计算中也可以动态地调整每个河道单元上的水流大小,清晰的表达每个河道单元上的水流模拟情况。
附图说明
以下结合附图和具体实施方式对本发明做进一步详细说明;
图1为本发明一种基于xml数据格式的河网水系存储表达方法的流程示意图;
图2为本发明一种基于xml数据格式的河网水系存储表达方法的流域单元分解结构示意图;
图3为本发明一种基于xml数据格式的河网水系存储表达方法的流域单元遍历算法示意图;
图4为本发明一种基于xml数据格式的河网水系存储表达方法的静态链表数据结构示意图;
图5为本发明一种基于xml数据格式的河网水系存储表达方法的静态链表与xml节点转换过程示意图。
具体实施方式
如图1-5所示,本发明公开了一种基于xml数据格式的河网水系存储表达方法,为构建河道单元链表,需要流域界线内的数字高程模型及由此计算得到的河道单元集合、坡面单元集合;计算中间结果包括汇流累积阈值、水流流向数据、水流长度数据;可存储到河道单元作为其属性的,包括河道宽度、深度和坡度等;本发明的方法其包括以下步骤:
s1,如图2所示,给定一个封闭的流域空间单元,输入该流域的dem(digitalelevationmodel,数字高程模型)栅格数据,在该dem数据上,标定流域出山口位置,即出山口河道单元r0所在位置;进一步地,步骤s1中标定出口位置的具体方法为设置汇流累积阈值的最大值,即整个流域的栅格单元数,计算得到河道单元集合、坡面单元集合及流域出山口位置,该位置为河道单元中最下游端点,所述流域是一个完整的流域,同时有且仅有一个出山口位置。
s2,将出山口河道单元r0作为起始单元节点,给出山口河道单元r0赋予河道单元的宽度属性和坡度属性;
s3,以出山口河道单元r0作为河流终点,基于dem计算出水流流向图;大部分gis软件具有该功能,计算过程不赘述;
s4,根据流域特征设置累积汇流阈值,从水流流向图中区分出河道单元与坡面单元,分别记为河道单元集合rchannel与坡面单元集合rslope;
进一步地,步骤s4中所有河道单元按照逆流向顺序赋予唯一标识码id。
进一步地,步骤s4中基于广度优先或者深度优先方式遍历流入坡面单元的其他坡面单元;
s5,如图3所示,以出山口河道单元r0为初始节点,根据水流流向图逆向遍历流域中所有的栅格单元,
当读取到的栅格为河道单元时,则将该河道单元作为一个新的节点r1并赋予其河道特征属性;
当读取到的栅格为坡面单元时,则将该坡面单元作为属性列入到出山口河道单元r0的属性集合中,同时以该坡面单元作为起点继续逆向遍历流入该坡面单元的其他坡面单元,直到流域边界上的最后一个坡面单元;
进一步地,步骤s5中赋予河道单元的属性包括河床坡度、河道宽度、河道单元id及下一个河道单元的id;出山口位置的初始河道单元没有下一个河道单元id;坡面单元id作为属性赋予其汇入的河道单元。
具体地,根据设置的累积汇流阈值可以以该位置作为河道单元遍历的起始节点;该节点id设为0,表示下游相邻河道单元的属性nextid设置为-1,表示不存在;当遍历读取到其他河道单元后,根据读取顺序,依次赋予河道单元的id值为1,2,3,……。
根据水流流向数据,可以读取任意河道单元周边的8个单元,其中的河道单元加入到一个堆栈中作为下次遍历的起始河道单元,坡面单元加入到当前河道单元的坡面单元集合中,同时将该坡面单元放入另一个堆栈中用于读取其他流入该单元的坡面单元,如此重复直到遍历完这所有8个单元。
s6,针对新的节点r1,重复s5所述遍历过程,直到所有河道单元都被遍历完;
具体地,从存有河道单元的栈中取出另一个河道单元进行遍历,直到所有的河道元素遍历完成,算法结束。
s7,如图4所示,按照逆流向将遍历到的所有河道单元存储到静态链表lrchannel中,可以根据河道单元id直接获取该河道单元的其他属性;
进一步地,步骤s7中将每个河道单元看作为一个对象,该河道单元对象具有宽度、深度、曼宁糙率系数和位置属性。
进一步地,步骤s7中使用数组作为构建静态链表lrchannel,该静态链表lrchannel按照遍历到的河道单元顺利存储每个河道单元对象,以便为了快速访问到每一个河道单元。
s8,将静态链表lrchannel的转换为xml格式。在存储xml文件过程中,按照静态链表中元素存储顺序,逐个读取河道单元id,作为节点写到xml文件中,河道单元的每个属性,在xml文件中同时作为对应节点的属性写入。
在磁盘中存储为xml格式的文件,直观的利用节点对象表示河道单元,读取文件时可以便捷地进行转换。
当基于广度优先方式时,按遍历到的先后顺序存储得到水流长度、坡面汇流时间信息。
进一步地,步骤s8的具体步骤为:根据静态链表内存储的河道单元对象结构生成相应的xml节点,如图5所示,所有河道单元位于<channelnodes>节点内,每个河道单元是一个<channelnode>节点,该节点具有子节点<width>、<deep>、<manning>、<pos>,所有子节点均是河道单元的属性,每个子节点细分为更小的子节点。
本发明采用以上技术方案存储流域内各个单元,可以实现快速准确地查询检索到汇入任意一个河道单元的所有上游河道单元和坡面单元,也可以快速的查询到该河道单元的基本属性以及该河道单元下游的其他河道单元。本发明与现有的技术相比,本发明的创新性改进为:使用xml数据格式描述河网水系各个离散单元的属性及其相互之间的拓扑关系,将每个河道单元都作为一个节点对象,将流入该河道单元的坡面单元作为其属性,相比传统栅格数据或矢量数据可以更好的表现各个河道单元属性及其上下游拓扑关系,在水文模型计算中也可以动态地调整每个河道单元上的水流大小,清晰的表达每个河道单元上的水流模拟情况。