无重叠交叉的配电网单线图自动生成算法_陈勇
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
无重叠交叉的配电网单线图自动生成算法
陈
勇,邓其军,周
洪
(武汉大学自动化系,湖北武汉430072)
摘要:以设备的拓扑连接关系为基础,将配电馈线的地理接线图自动转换成单线图时,存在的最大问题就是线和图标的重叠交叉的消除。基于面向图形对象的单线图绘制工具,提出了一种通过寻找最佳绘制方向来尽可能避免重叠交叉的新方法。当需要向某个方向绘制一个图标时,先检测按此方向绘制是否会与已经存在的对象发生重叠交叉。如果有重叠交叉,则依次尝试向其他2个垂直方向绘制。如果3个方向都无法绘制,则通过局部图幅扩展算法对图幅进行扩展,得到至少1个图标的位置后按照原方向进行绘制。结合实例详细描述了所提出方法的算法步骤。
关键词:配电网;地理信息系统;单线图;自动生成;拓扑;GDI +技术;重叠交叉中图分类号:TM 744文献标识码:A 文章编号:1006-6047(2010)11-0090-04
电力自动化设备
Electric Power Automation Equipment
Vol.30No.11Nov.2010
第30卷第11期2010年11月
0引言
在基于地理信息的配电网管理系统中,馈线的地理图和单线图是配电网运行管理的2类核心资料。目前,在大多数的类似系统[1-3]中,设备的地理图是在地理信息系统GIS (Geographic Information System )上绘制完成的(包括设备之间的连接关系);而电气单线图则是在CAD 图上通过手工绘制来完成的。配电馈线的地理图到单线图的自动转换,能够极大减少配电网管理的数据维护工作量,避免数据多头配置,确保数据的一致性[4]。
以设备在地理图上的拓扑连接关系为基础,实现单线图的自动绘制问题,部分文献已经研究过[5-15],其中最重要的问题,是如何解决线和图标的重叠与交叉问题。
文献[7]和文献[8]中将一个辐射状的配电网络拓扑结构用图论中的树表示,提出生成辐射状配电馈线电气接线图的方法。文献[9-10]提出的方法是将各电气设备分级,然后把偶数级水平放置,奇数级垂直放置。文献[11-12]介绍了采用罚函数法进行输电网电线图的自动生成算法。文献[13]提出了基于树的配电网模型。
本文提出一种通过寻找最佳绘制方向来尽可能避免重叠交叉的新方法。该方法在一种基于GDI +技术的绘制工具[15]中得到了实现。
1自动绘图的思路
馈线地理图向单线图的自动转换可按6个步骤进行。
a.以馈线出线开关为起点,遍历所有连接到的
设备(到联络开关、配变或线路末梢为止)形成一棵
树;且以层次最深的叶子结点到馈线开关的线所经过的所有点组成的线,作为0级主干。
b.水平向右绘制第0级主干,并记下该主干上所有接有分支的结点,放入BranchNodeList 列表中。
c.对BranchNodeList 中的第1个对象,找出从其接出的每个后续结点,并从BranchNodeList 中删除第1个对象。
d.以c 步中找到的每个后续结点为每个分支的第2点(第1点为c 步中删除的结点),开始绘制相应分支。在绘制分支时,如果被绘制的结点接出有分支,则加入BranchNodeList 末尾。
e.重复执行c 步和d 步,直到BranchNodeList 中无对象。
f.自动缩放至全屏幕且居中展示。
上述步骤中,重点在d 步中,即如何为每个将要绘制的结点到合适的位置。本文的处理方法是当需要向某个方向绘制一个图标时,先检测向此方向绘制是否会与已经存在的对象发生重叠交叉。如果会发生重叠交叉,则依次尝试向其他2个方向绘制。如果3个方向都无法绘制,则对图幅进行局部扩展,得到至少1个图标的位置再进行绘制。
2最佳绘制方向的寻找算法
2.1用于表达已绘制对象所占位置的虚拟矩形
单线图绘制的最基本要求是不能有重叠交叉。同时,线条之间、图标之间以及两者之间,不能太接近,否则看起来就像重叠交叉一样。因此,在判断是否会发生重叠交叉时,不能直接以已经绘制的线或图标来判断,而是应该在已经绘制好的线和图标所占的区域的基础上,作适当的扩展。同时为减少对象数量,将每一折线段上所有的线和图标所占的位
收稿日期:2010-03-06;修回日期:2010-05-
31
结束
count1<count2?
开始
步骤1根据主干的绘制方向,获得与主干的绘制方向垂直的2个方向direction1、direction2步骤2获得从接出点接出的在direction1和direction2的2个方向上的分支个数count1、count2
以direction1作为分支方向会重叠交叉?
以direction2作为分支方向会重叠交叉?
步骤3以direction1作为分支方向
步骤5局部扩展步骤4以direction2作为分支方向
Y
N
Y
Y
N
N
图2分支的初始绘制方向判断流程图
Fig.2Flowchart of original drawing direction judgment for branch
置,用1个虚拟的矩形来处理,如图1所示。其中,D n 表示电气设备,R n 表示虚拟矩形。
虚拟矩形的数据结构如下所示(本文所有示例代码均使用C #语言)。
Struct StructRect {
DrawObject beginObject ;DrawObject endObject ;string direction ;float rectWidth ;RectangleF area ;
}
其中,DrawObject 是绘图对象,表示画布上的一个图标[11];beginObject 表示此虚拟矩形的起点对象(D 1、D 4、D 6、D 12);endObject 表示此矩形对象的终点对象(D 8、D 9、D 13、D 15);direction 表示矩形的绘制方向(由于单线图要求横平竖直,因此direction 是HL 、HR 、VU 、VD 之一,分别表示水平向左、水平向右、竖直向上、竖直向下);rectWidth 表示矩形垂直于
direction 方向的宽度,取系统所使用的最大图标的长边宽度;area 表示该矩形所占的区域,每当一个分
支绘制完毕,绘制方向发生了转折或矩形中的对象发生移动时,就重新计算矩形的area ,如图1中虚线方框所示。下面说明其计算方法。
通过endObject 的中心点,画1条沿direction 方向的直线;沿beginObject 的包围矩形的垂直于direction 方向的2个边画2条直线;沿endObject 所包围矩形的垂直于direction 方向的2个边画2条直线;这5条直线得到4个交点。以其中距离最远的2个点作为虚拟矩形的短边中点,短边宽度为rectWidth ,从而得了到虚拟矩形的大小及位置。
在每次采用局部扩展算法消除重叠交叉后,都需要重新计算已绘制对象构成的虚拟矩形的位置。
2.2分支的初始绘制方向的判断
分支的绘制方向要与其上级主干垂直,且不能与该主干已经有的分支重叠。其绘制方向的算法流程如图2所示。
对图2作如下说明。
a.在绘制每一个对象时都将该对象的绘制方向保存在该对象的属性direcion 中。步骤1中,根据属性direction 中保存的方向,得到与该方向相垂直的2个方向direction1和direction2,direction1表示向上或向左,direction2表示向右或向下。
b.在绘制主干上的每一个分支时,将该分支的绘制方向记录到主干上的接出对象属性vertical1和vertical2中。根据接出对象的绘制方向direction 不同,分支方向将被增加到不同的属性中,具体情况如表1所示。
其中,HL 、HR 、VU 、VD 分别表示水平向左、水平向右、竖直向上和竖直向下。而且,接出对象的绘制方向与分支方向必然垂直。1表示该属性值加1,0则表示该属性值不变。
因此,步骤2中,从主干上接出对象的属性vertical1、vertical2及direction ,可以分析出在direction1和direc -tion2的2个方向上的分支个数count1和count2。
c.步骤5中,如果发生重叠或交叉的情况,则按照2.4节所述方法进行局部扩展。
2.3分支上后续对象的绘制方向的判断
为尽量避免重叠与交叉,在绘制分支上的每个后续对象之前,先判断该对象的绘制方向。其算法流程图如图3所示。
D 1
D 3
D 2D 4
D 5
D 6
D 7
D 8
D 10D 11D 12D 13
D 14
D 15
R 1
R 2
R 3R 4
D 9
图1虚拟矩形示意图
Fig.1Schematic map of virtual rectangle
表1分支方向记录表
Tab.1List of branch direction
方向
分支方向vertical1vertical2HL /HR 向上10HL /HR 向下01VU /VD 向左10VU /VD
向右
1
陈勇,等:无重叠交叉的配电网单线图自动生成算法
第11期