应用ObjectARX开发给水管网GIS系统
王荣和 同济大学环境科学与工程学院污染控制与资源化研究国家重点实验室,上海 200092
潘建华,姚仁忠 上海交通大学土木工程系,上海 200092
摘要:在对AutoCAD2000、ObjectARX、给水管网计算机管理系统和GIS分析的基础上,提出给水管网计算机管理系统开发的一般过程和用ObjectARX和扩展字典功能进行管网系统GIS开发的方法,并通过编写WDOC软件系统得到验证。
关键词:给水管网;计算机管理;GIS;ObjectARX
中图分类号:TU991.33
文献标识码:A
文章编号:1009-2455(2000)03-0048-03
Application of ObjectARX in Developing GIS for Water Supply Pipe Network
WANG Rong-he ?PAN Jian-hua? YAO Ren-zhong
Abstract:A general procedure for the development of computer management sustem for water supply pipe network and a method of developing GIS (Geology Information System) for the pipe network using ObjectARX and expanded-dictionary technology are described based on the analyses of AutoCAD2000 ObjectARX computer management system for water supply pipe network and GIS which have been verified through the compilation of WDOC software system.
Key words:water supply pipe network;computer management;GIS;ObjectARX
概述
AutoCAD是我国给水排水工程领域应用最普遍的CAD平台之一。目前国内编写的给水排水工程CAD设计软件,都是以此为平台进行二次开发的。在以前的AutoCAD版本中,大多是以AutoLisp作为开发语言,后来扩展到ADS系统[1][2]。现在的AutoCAD2000,提供了更多、更方便的二次开发工具,如VisualLISP、ActivexX、VBA、ADS、ASI等,尤为重要的是,还给出了以面向对象的Visual C++为开发语言的ObjectARX,为以AutoCAD为开发平台进行CAD软件二次开发的广大设计人员提供了一种更为方便、灵活的工具[3]。
ObjectARX可以共享AutoCAD的地址和空间,深入到系统底层,对AutoCAD进行直接的函数调用,速度快、图形管理方便,软件代码的保密性强。ObjectARX应用程序是一个动态连接库,不但可以共享AutoCAD的资源,还可以共享Windows、VC++等资源。尽管程序编写不如AutoLisp方便[4],但其高度的灵活性、强大的功能和对大型系统管理速度的提高,足可以弥补其所有的弱点。
通过应用ARX进行给水管网多工况优化设计计算软件WDOC系统的编制[5][6],与AutoLisp/Visual LISP进行比较,并与对象添加扩展数据和扩展字典技术进行了比较,得出用ObjectARX作为编程语言,应用扩展字典技术,可以方便地编写给水管网GIS系统的结论。
1 给水管网GIS系统功能分析[2]
给水管网GIS系统,不同于一般的需要存贮大量的非图形和图形信息的GIS系统,而是有其特殊性,主要表现在如下几个方面:即地形、地貌信息只是作为背景知识,不需要存贮大量的非图形信息;节点、管段、阀门、水泵等之间都有固定的相互联系;管网GIS除具有GIS的功能外,还需具备管网水力计算、设计、管理、调度等方面的功能。因此,建立给水管网GIS系统,不能单纯地从一般GIS的功能进行系统分析和设计,而是需针对给水管网的目的和特点进行。
自20世纪90年代初开始,深圳自来水公司就开始进行GIS系统的开发,开辟国内自来水行业GIS的先河。上海、北京、南京、广州等城市的自来水公司也先后开始进行GIS系统的开发,当前国内大中型城市的自来水公司都正着手进行这一领域的研究与开发工作。但到目前为止,尚没有一个单位开发的给水管网GIS系统能够承担起真正的GIS功能,其根本原因在于各单位只是为了开发GIS而开发GIS,没有考虑给水管网系统的特殊性和开发给水管网GIS的真正目的:集给水管网水力计算模型、优化设计与调度管理模型、SCADA (Supervisory Control And Data Acquisition)、PLC (Programming Logical Control)、管网GIS为一体的给水管网计算机管理系统。现大多数单位开发的给水管网GIS系统与管网水力计算模型、SCADA等系统相互独立,信息不能共享。因此存在信息的更新、模型管理、实测数据等不统一和工作重复的问题。另外,由于各部门行政管理的不一致,更增加了系统的复杂性和软件运行上的难度,造成许多给水管网GIS系统,一旦开发工作完成,则该GIS生命即自行结束的状况。
从图1可以看出,合理的管网计算机管理系统,应是以数据库为核心,现状分析、管网模型、GIS、SCADA、水量预测预报、优化设计、CAD、优化调度等模块都是计算机管理系统的内容之一。其主要的内在联系是:GIS系统提供管网图形信息;管网现状分析对GIS基础数据进行校正,使GIS能够符合实际工作的要求;管网模型是对管网系统进行水力分析,基础数据来源于GIS;水表和用户可以在GIS中查询;水量预测预报系统,是以数据库中的历史数据为基础进行分析;SCADA系统用于把管网、水厂、泵站等的实测数据传送到数据库,便于其它系统利用这些数据进行分析;优化设计则是在现状分析和GIS系统的基础上,进行规划、设计与分析;CAD则直接可以利用GIS的基础数据和优化设计结果,进行施工图设计;报表输出,是按照自来水公司的要求,定期产生报表系统;图形管理是对GIS图素的添加、删除,对工程施工图、管网模型图、现状分析图等进行管理。优化调度是利用数据库的基础资料、当日当时的现状资料、GIS的图形资料、SCADA的实测资料、水量预测的供水资料等进行全范围调度管理,并发送调度指令。
2 扩展字典在给水管网GIS系统中的应用
AutoCAD2000的一个最大突破,就是把图形管理数据库化。通过对象字典,可以在给水管网图形中加入所需要的各种信息,如节点编号、节点流量、自由水头、用水量变化系数等。
给水管网的相关部件,如节点、管段等,它们之间都是有相互联系,而不是相互独立的。对于管段来说,它由上、下游节点编号、管长、管径、管道摩阻等固定信息和流量、流速、水头损失、水力坡度等可变信息组成,并且还同与之相连的控制阀相联系。每当对管段进行操作时,需同时考虑与之相连的相关部件,并对相关部件进行相应的操作。一般的处理方法是,把相应的非图形信息存贮于其它类型的数据库中,每当处理时,可以通过图形的ID号来查找相应的数据库,并按照对图形信息操作的过程,再相应操作数据库。这种处理方法,在处理速度和灵活度上,存在一定的缺点。而用扩展字典技术,就可以在进行图形处理的同时,进行相关的数据处理,方便而又迅速。
扩展数据(xdata)由应用程序创建,并且可以添加到所有图形对象中。数据使用DXf组码的1000到1007之间的范围。扩展数据的优点是有效地利用了空间,并且对添加少量数据到一个对象中是十分方便的。但xdata被限制在16K和DXF组码,为使用带来许多不便[7][8]。
扩展字典解决了扩展数据的一系列缺点,提供了一个具有添加数据能力更强、更灵活的机制。每个对象都可以有一个扩展字典,可以容纳任意一套AcDbObject对象。利用这一机制,若干应用程序可以附加数据到同一个对象上。下面是一个利用扩展字典技术,对管段信息进行扩展的VC++程序[3]:
selectObject()函数提示用户选择实体,在选择到实体后,打开并返回指向这一实体的指针。
AcDbObject* selectObject(AcDb::OpenMode openMode)?
? {ads_name en;? ads_point pt;
char handleStr[132]; AcDbobjectId eId;
Acad::ErrorStatus retStat;
acedEntSel(" 请选择实体:",en,pt); ∥提示用户选择实体
retStat=acdbGetObjectId(eld?en); ∥把ads name变为实体ID号
AcDbObject* pObj;?
if((retStat=AcdbOpenObject(pObj,eId,openMode))!= AcAd::eOk)?
{∥打开实体
AcutPrintf(“打开实体错误!!!”);
return NULL;
?}
return pObj;? ∥返回实体指针
?}
createXrecord()函数,用于对选择实体添加数据字典。其中Name为扩展字典名,head为通过Ads_buildlist()建立的数据表。
void creatXrecord(char* Name,struct resbuf* head)
{AcDbXrecord*pXrec=new AcDbXrecord;? AcDbObject* pO
bj;?
AcDbObjectId dictObjId,?xrecObjId;? AcDbDictionary* pDict;?
pObj=selectObject(AcDb::kForWrite); ∥调用selectObject()函数
if(pObj=NULL) return;? ∥如果选择实体不存在,则退出
pObj->createExtensionDictionAry() ∥建立选择实体空的扩展字典
dictObjId=pObj->extensionDictionAry();∥得到所选择实体的扩展字典的ID号
pObj->close();? ∥关闭选择实体
AcdbOpenObject(pDict,dictObjId,AcDb::kForWrite)? ∥打开扩展字典并准备加入新的数据
pDict->setAt(Name,pXrec,xrecObjId);
pDict->close();? ∥关闭扩展字典
pXrec->setFromRbChAin(*head); ∥添加数据表到扩展字典数据库
pXrec->close();? ∥关闭数据表
?}
通过 createXrecord()函数,可以添加任何数据、角度、文字、坐标等到实体中去。对于给水管网GIS系统,如对管段加入诸如管段号、起始节点号、终止节点号、管长、管径、管段摩阻等,可以用如下简单的程序加以方便实现。
void PipeXrec()
{? float PipeDiAmeter,?PipeLength,?PipeHW;
char FromPoint[15],ToPoint[15],PipeNo[15];
∥此处可以通过程序系统或人工输入法,获得管段的有关信息
∥……
struct resbuf* head;?
head=AcutBuildList(?
AcDb::kDxfText,FromPoint,AcDb::kDxfText,ToPoint,?
AcDb::kDxfReAl,PipeDiAmeter,? AcDb::kDxfReAl,
?PipeLength,?
AcDb::kDxfReAl,PipeHW,?
0);
createXrecord(PipeNo,head);
?}
用同样的处理技术,可以把扩展字典信息提取出来,从而可以方便地对图形信息进行实时操作。
可以看出,只要编写如上所述的小程序,就可以在给水管网GIS中进行方便的管网信息加入、查询、提取与操作。
3 结束语
给水管网GIS系统的建立,不同于其它专业的GIS,各图形元素不但有其自身的物理意义,而且图形元素之间还存在相应的内存联系。因此,给水管网GIS系统建立的关键在于管网系统的水力分析,为管网调度和管理提供决策的依据,而不仅仅是简单的管网图形分析。
通过对ObjectARX的应用与分析和对WDOC软件系统的开发,得到以AutoCAD2000为工作平台,用ObjectARX和扩展字典进行二次开发实现给水管网GIS的功能,不但功能强大,而且方便灵活,尤其是使GIS与管网模型、优化设计计算、延时水力模拟、现状分析和监测点选择等多个功能集成设计,达到实现给水管网计算机管理的初步目的和要求。
参考文献
[1]?王荣和,刘志强.给水排水工程CAD.同济大学教材科 [中国建筑工业出版社作为全国通用教材出版中],1997.
[2] 中国给水五十年回顾-第七届年会论文集[C].中国建筑工业出版社,1999.
[3]?余承飞,方勇.AutoCAD2000二次开发技术(ObjectARX)[M].人民邮电出版社,1999.
[4]?王荣和,顾国维.水处理工程CAD的智能设计,环境背景值和环境容量研究[M].科学出版社,1993.
[5]?王荣和,顾国维.优选管径法在给水管网优化设计中的应用[J].中国给水排水,1998,(1):14~17.
[6]?王荣和,顾国维.给水管网多工况优化设计的实用性[J]中国给水排水,1999,15(4):39~40.
[7]?王荣和,顾国维.扩展实体数据在给排水工程CAD中的应用[J].化工给排水设计,1998,(4):51~54.
[8]?顾国维.?水污染治理技术研究[M].上海:上海同济大学出版社,1997.
作者简介:
王荣和,博士、副教授,上海,同济大学环境科学与工程学院。
论文搜索
月热点论文
论文投稿
很多时候您的文章总是无缘变成铅字。研究做到关键时,试验有了起色时,是不是想和同行探讨一下,工作中有了心得,您是不是很想与人分享,那么不要只是默默工作了,写下来吧!投稿时,请以附件形式发至 [email protected] ,请注明论文投稿。一旦采用,我们会为您增加100枚金币。