利用MapX实现电力通讯设备可视化

2013-12-12 10:44:48 电力信息化  点击量: 评论 (0)
摘要 :目前电力通信网络资源的管理基本上还停留在手工管理为主、计算机管理为辅的水平上,本文介绍了使用Delphi开发平台与MapX组件来开发电力通信资源管理系统,实现电力通信设备的可视化管理。本文介绍了系统
元对象,所以为省图顺序编号,使标号与面图元对象的keyvalue属性一一对应。从而在用户输入编号后,可以根据编号找到对应的省图并连续打印。例如打印编号1,2,3或者编号1-7对应地图对象,甚至是1,2,3,6-9这种混合方式对应的地图对象。在这里笔者选择了Delphi中Tstinglist对象的Delimiter和DelimitedText属性方法实现对编号字符串的分割。以用户输入打印编号2,4-6,7-10,21的打印请求为例。首先对打印输入框的字符串用“,”进行分割,使分割后的Tstringlist字符串数组中包含2,4-6,7-10,21等4个元素。不包含“—”的元素可以直接寻找编号对应的图元对象打印出来。而对包含“—”的数组元素用“—”进行二次分割。生成新的字符串数组由4,6,7,10组成。设置循环,打印编号从4-6 和从7-10的地图。最终我们使打印输入框的输入方式与windows打印程序类似。
 
 
 
 
 
 
 
 
 
 
 
复杂地图的打印:选择设备图层,调用Map1.PrintMap()打印函数的时候,如果打印的地图区域内图元对象(光纤站,光线线路)比较密集或者背景图比较复杂,则打印时报错,地图边线线条变粗,打印失败。而一旦选择简单的地图打印则可正常完成。初步猜测是打印连接异常产生了错误,于是试图捕获异常:
Try                             
printer.orientation:=polandscape;
Printer.BeginDoc;
Map1.PrintMap(Printer.Handle, 2500,500, Map1.Width * 35, Map1.Height * 35);
Printer.EndDoc;
except
Printer.Abort;
MessageDlg('不能打印地图', mtError, [mbOK], 0);
end;
系统不能捕获到异常,可以排除文件传输错误导致打印不出地图的可能。笔者通过多次测试发现:如果创建一个隐藏的地图对象map2,让它与map1的边界和显示图层完全一样。这样通过查看设置map1而实际打印隐藏地图map2时,能够正常完成操作。
Map2.bounds:=Map1.bounds;  for i:=1 to map1.layers.count;  //设置map2与map1一致
If (Map1.layers.item[i].visible=false)
then  Map2.layers.item[i].visible:=false;
Map2.PrintMap(Printer.Handle, 2500,500, Map1.Width * 35, Map1.Height * 35); //打印map2
⑵添加比例尺、图例和边框:为了使地图打印效果更加逼真需要向地图添加比例尺、图例和边框。使用Layer集合的AddUserDrawLayer方法,该方法返回了创建的Layer对象,并在此layer对象中创建比例尺和图例。当需要添加比例尺和图例时,系统自动触发DrawUserLayer事件。
首先,添加用户绘制图层到图层集合:
lyr = Map1.Layers.AddUserDrawLayer("My Layer", 1);
然后,设置 DrawUserLayer 事件中的代码以绘制
大云网官方微信售电那点事儿

责任编辑:和硕涵

免责声明:本文仅代表作者个人观点,与本站无关。其原创性以及文中陈述文字和内容未经本站证实,对本文以及其中全部或者部分内容、文字的真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
我要收藏
个赞