方强,翁韬,周乔伟,陈凯
(成都市勘察测绘研究院,四川成都 610081)
“数字城管”是综合利用“3S”技术、物联网技术、数据库技术于一体的城市管理综合平台,这种城市管理新模式能大大加强城市管理和公共服务职能,能对城市管理出现的各种问题做到及时发现和快速处理,极大提高城市管理服务水平。而部件普查工作就是为“数字城管”的建设提供基础的数据保障,部件普查数据的质量及可靠性直接关系到以后“数字城管”的运行。
AutoCAD作为一个通用计算机辅助绘图与设计平台,有着强大图形编辑功能及易用性特点,在测绘行业有着广泛的应用,鉴于很多部件普查都是以AutoCAD格式的1∶500数字地形图为底图进行的,因此笔者使用AutoCAD VBA以及少量AutoCAD Visual LISP程序开发技术相结合,按照本次部件普查实际要求,编制一套既有部件成图功能又有属性录入功能的软件,便于外业作业人员的数据录入,提高数据质量,提升工作效率。
各个城市对部件普查的数据要求是不一样的,包括不同的普查对象、部件编码体系、图层、颜色、属性要求等等,笔者基于AutoCAD 2004,以成都市双流县部件普查标准为例展示程序的开发。
编码设计一般要遵循相关的国家标准或行业标准,因此本系统的编码依据CJ/T214-2007《城市市政综合监管信息系统管理部件和事件分类、编码及数据要求》,并根据城市具体情况进行了调整。
系统开发前,要设计好本系统所使用的点、线、面符号。
(1)点符号设计
点符号就是AutoCAD的块,制作点符号的时候,要注意三点:
①符号里面所有的对象要放在0层,否则,会出现多余的图层删不掉的情况;
②符号的填充尽可能用带宽度的线来实现,这样可以提高AutoCAD的速度;
③如果想可以随时改变块颜色的话,块中对象的颜色要定义为ByBlock。
(2)线符号设计
简单线型符号定义不需要型文件,只要有一个后缀为lin的线文件就可以,复杂的线型文件需要定义型文件。线符号制作要注意以下两点:
①在.lin文件中,每个线型定义应限制在80字符以内;
②为了线型显示美观的需要,有时需要将循环单位改小。
(3)面符号设计
在本程序中规定面就是闭合的线。只是为了更直观地显示其面状特点,才配以填充图案。所以,笔者直接用AutoCAD自带的填充模式结合颜色区分不同的部件面。基于这个思想,不管是数据转换还是给面赋属性,都是针对最外围的闭合线而言的,而不是填充图案。根据笔者实践发现闭合的线和其填充图案的边界有些情况下会有微小的差别。
调用VBA宏的命令采用lsp代码实现,例如:
这样,用户在命令行输入bjpc101就可以调用该宏定义的功能,方便用户使用命令绘制地物。此处101代表部件编码。其他的命令代码类似,命令名称命名规范都是bjpc加上代码,在lsp代码中只需要更改编码就可以了。这样我们可以用VBA函数Draw中的GetString方法和LISP的(command)函数来调用不同的编码,实现一个Draw函数绘制所有的地物。
考虑到部件普查种类繁多以及作业员绘制的直观性,笔者选用AutoCAD的屏幕菜单实现本次开发的所有功能,系统界面如图1所示。
此界面需要定义一个后缀为“.mns”的文件,以供AutoCAD加载,示例代码如下:
在界面设计中,需要制作一套幻灯片来供菜单调用,这样可以直观方便地供作业人员选择调用。在此程序中,幻灯片名称用编码表示。幻灯片可以利用AutoCAD提供的工具制作,并建立幻灯片库。
为增强程序的可扩展性及代码共用性,便于部件的修改和扩充,本次设计使用一个画法文件存储地物的画法信息,再编写一个通用函数调用这个文件完成所有地物的绘制,文件格式如下:
编码就是地物编码。类型主要包含“点、有向点、线、面”。当类型为“点”或“有向点”的时候参数名就是块名,参数值就是块插入比例尺;当类型为“线”时,参数名为线型名,参数值就是线宽;当类型为“面”的时候,参数名为填充图案名称,参数值就是图案比例。层名和颜色就是该地物所放图层及AutoCAD索引颜色编码。属性表名定义该编码对应的属性信息列表。例如:
(1)通用函数实现思路:
①用GetString方法读取要绘制地物的编码。
②读取画法文件,并根据地物编码搜索该编码对应的画法定义。
③根据该编码对应的类型调用不同的画法函数,并把其所对应的参数名、参数值、层名、颜色、属性信息传递给对应的画法函数进行绘制。
④绘制完成后自动弹出来属性对话框要求填入该地物要求的属性信息,确定保存属性信息。
(2)通用调用程序实现代码如下:
(3)程序说明:
①函数getHuaFa实现从画法文件中查找到所绘地物编码对应的画法描述。
②函数getStr实现拆分画法描述中单个信息的功能,可以从画法描述字符串中找到用逗号分割的对应的画法描述详细信息。
③函数drawPoint实现在strLayer图层,用strColor颜色,块插入比例尺为strValue绘制块strName。
④函数drawPPoint功能类似函数drawPoint,但用户可以通过鼠标旋转指定块方向。
⑤函数drawLine实现在strLayer图层,用strColor颜色,线宽为strValue线形为strName画线。
⑥函数 drawPolygon实现在strLayer图层,用str-Color颜色,图案比例为strValue填充图案名称为str-Name画面。
⑦函数 drawPoint、drawPPoint、drawLine、drawPolygon,不仅包括绘制功能,还会在绘制结束后弹出来其对应的属性对话框,以便把用户输入的属性信息存到该对象的扩展属性中,如图2所示。
图2 属性录入界面
基于AutoCAD的VBA二次开发,具有上手快、建设快,可迅速地构建应用程序服务于测绘生产。基于AutoCAD的部件普查录入程序,具有良好的操作性,为外业作业人员所习惯,同时,其开放、统一、规范的数据结构,又方便转换成其他的通用数据格式,便于入库。实践证明,成都市双流县部件普查程序大大加快了数据生产速度,提高了数据准确性,为城市部件普查的快速开展奠定了坚实的基础。
[1]李凤华.AutoCAD 2002/2000 VBA开发指南[M].北京:清华大学出版社,2001.
[2]CJ/T214-2007.城市市政综合监管信息系统 管理部件和事件分类、编码及数据要求[S].
[3]张大长,潘庆林,姚伯金.AutoCAD环境下地形图符号库的建立[J].南京建筑工程学院学报,1996(4):48~53.
[4]张帆,郑立楷,卢择临等.AutoCAD VBA二次开发教程[M].北京:清华大学出版社,2006.
[5]李长勋.AutoCAD VBA程序开发技术[M].北京:国防工业出版社,2005.
[6]徐建平,王新程.精通AutoCAD 2004中文版[M].北京:清华大学出版社,2003.
[7]周平,滕得贵,曹欣.重庆市市政部件普查要点浅析[J].城市勘测,2009(1):21~23.