EPS脚本技术在D LG制图入库一体化生产中的应用
2019-03-20王鹏
王鹏
(兰州市勘察测绘研究院,兰州730030)
1 引言
我国测绘正朝着信息化测绘方向发展,城市测绘将从以传统地形图生产为主转向以地理信息综合服务为主。EPS软件是由清华山维公司开发的、具有自主知识产权的面向测绘地理信息生产的软件系统。该软件从地理信息系统应用的角度构建数据模型,综合CAD技术与GIS技术,以数据库为核心,将图形和属性关联为一体[1],从根本上实现了DLG制图入库一体化生产,做到了GIS应用与制图的便捷统一。同时,EPS平台支持基于脚本语言的二次开发,用于用户定制开发平台不支持的功能以及处理重复性工作。EPS软件对提高DLG制图入库的生产效率,保证成果质量起到很好的促进作用。
对各测绘单位而言,DLG制图数据与入库数据的侧重点不同,制图数据强调地理要素的符号化表达,需要根据规范正确、合理、清晰易读地展示地理信息,不关注属性信息;而入库数据不仅要求具有一般地形图的几何要素内容,还要求要素具有丰富的属性信息以及要素间的拓扑关系正确。如何同时满足DLG制图、入库的要求并正确、快速、自动化地提取属性,是本文进行二次开发的主要出发点。
2 EPS脚本语言
2.1 EPS脚本语言概述
EPS软件提供了2种二次开发技术,分别是基于基础库二次开发和脚本类二次开发,前者主要使用C++作为开发语言,后者主要以VB Script和Java Script作为开发语言,但常用VB Script[2]。EPS VB Script语言是EPS为支持数据处理和功能扩展而面向用户提供的一门脚本语言,其在EPS脚本编辑器中运行,为解释性执行[3]。与AutoCAD的ActiveX技术类似,用户能够以VB Script或Java Script语言标准为基础,在EPS平台内部以编程的方式来访问EPS提供的对象和函数[4],可根据系统集成的命令语言规则、函数等方便地实现诸如坐标转换、数据入库、图形处理、数据检查等诸多应用。
2.2 EPS脚本语言特点
EPS没有多层次的对象模型体系,这一点与AutoCAD的ActiveX技术不同,它仅提供了SSProcess这个系统缺省定义的对象。SSProcess是与EPS平台交互的主要入口对象,使用系统提供的类方法时需要加上此类名[5]。利用SSProcess可调用EPS平台暴露给用户的所有功能函数,包括图形编辑、数据整理、选择集操作、数据检查、数据转换、坐标转换等。EPS提供的是面向过程的脚本技术,与AutoCAD的ActiveX开发技术相比,其更加简洁高效,适用于缺乏面向对象编程知识的广大测绘工作者,使得他们能将更多的精力集中于业务功能实现上。此外,EPS VB Script提供了外部函数调用功能,能够实现函数级别的代码重用,利于构建具有良好逻辑层次的应用模块。
3 D LG制图入库一体化生产
3.1 D LG制图入库一体化的关键问题
DLG制图入库一体化生产,要解决以下5个关键问题:(1)其他格式数据的无损导入;(2)满足制图数据符合图式规定的同时,也需满足入库数据符合项目要求;(3)图形注记与入库属性值的联动生产;(4)根据项目需求建立一套完备的检查方案;(5)无损导出为项目要求的图形数据和入库数据。借助EPS模板定制和VB Script开发技术,可较完美地解决上述问题。
3.2 V B Scri pt在EPS平台的应用
EPS软件平台直接编辑的数据为其自有格式(*.edb),EPS虽提供了与其他格式数据的交互转换功能,但仅是几何图形上的简单转换,不能实现要素编码、扩展属性等的无损输入和输出,需借助EPS软件提供的VB Script技术配合模板定制来实现数据的无损转换。虞秀花[6]等对EPS平台的模板定制技术做了较具体的说明,本文不再阐述。
EPS软件平台提供了包括空间逻辑检查、规范编码检查、扩展属性检查等检查模型,用户可根据工程实际需要定制通用的检查项。但针对工程的特殊要求,需通过VB Script脚本编程进行数据检查或数据修复。
DLG制图入库一体化生产中,可通过EPS平台的符号化技术和VB Script开发实现图形注记与属性值的关联,从而避免图面注记与要素属性不一致的情况发生,从而提高作业效率和数据质量。
此外,通过VB Script开发可实现自动化批量处理,简化操作,达到提高生产效率的目的。
4 EPS V B Scri pt开发实际应用
本文以DWG数据导入、GDB数据导出、房屋属性赋值及检查为例,阐述EPS VB Script开发的具体实现。
4.1 D W G数据导入
程序通过逐行读取text文档,该文档第一列为DWG图层名,第二列为EPS编码,分别针对点、线、面、注记进行DWG图层到EPS编码/注记分类的转换,从而实现DWG数据的无损导入。程序的主要代码如下:
Sub OnClick()
Dim arrFileLines()
Dim objFSO
Dim objFile
Dim i as integer
Dim l as integer
Dim a()as string
i=0
SSProcess.PushUndoMark
清空选择集
SSProcess.ClearSelection
清空选择条件
SSProcess.ClearSelectCondition
设置选择条件为只选择点对象
SSProcess.SetSelectCondition"SSObj_Type","=","POINT"
执行选择过滤
SSProcess.SelectFilter
去除点名
SSProcess.ChangeSelectionObjAttr"SSObj_name",""
读取text文档,文档第一列为DWG图层名,第二列为EPS编码
Set objFSO=CreateObject("Scripting.FileSystemObject")
Set objFile=objFSO.OpenTextFile("d:hrb c-bm.txt",1)
逐行读取text文档,分别针对点、线、面、注记进行图层到编码/注记分类的转换。
For l=LBound(arrFileLines)To UBound(arrFileLines)
SSProcess.ClearSelection
SSProcess.ClearSelectCondition
SSProcess.SetSelectCondition "SSObj_Type","==","POINT"
SSProcess.SetSelectCondition"SSObj_LayerName","==",trim(a(0))
SSProcess.SelectFilter
SSProcess.PushUndoMark
SSProcess.ChangeSelectionObjAttr"SSObj_Code",trim(a(1))
Next
......
End Sub
4.2 G D B数据导出
GDB数据是目前主流GIS平台支持的一种空间地理信息数据库,程序通过设定数据转换参数并结合EPS模板实现GDB数据的无损导出。程序执行前需首先利用EPS模板技术定制要素导出的编码、几何类型、要素类名称等信息。程序的主要代码如下:
Sub OnClick()
Dim fso,f1,f2,s
Set fso=CreateObject("Scripting.FileSystemObject")
Set f1=fso.GetFile(pathname)
fileName=Replace(edbFileName,".edb","")&".gdb"
SSProcess.ClearDataXParameter
设置数据输出格式。其中22对应的是ArcGIS Mdb格式。
SSProcess.SetDataXParameter"DataType","22"
设置输出使用编码对照表名称。
SSProcess.SetDataXParameter "FeatureCodeTBName","FeatureCodeTB_MDB"
设置输出使用符号描述表名称。
SSProcess.SetDataXParameter "SymbolScriptTBName","SymbolScriptTB_MDB"
设置输出使用注记分类表名称。
SSProcess.SetDataXParameter "NoteTemplateTBName","NoteTemplateTB_MDB"
SSProcess.SetDataXParameter"ExportPathName",""
设置数据输出范围方式。0(所有数据)、1(选择集数据)、2(当前图幅)、3(缓冲区)、4(指定编码闭合地物)、5(指定 ID 闭合地物)、6(所有图幅)
SSProcess.SetDataXParameter"DataBoundMode","0"
设置符号打散方式。0(自动打散)、1(根据编码表设定打散)、2(全部不打散)
SSProcess.SetDataXParameter"SymbolExplodeMode","1"设置数据输出层名使用状态。0(按编码表设定层名输出)、1(按地物设定层名输出)
SSProcess.SetDataXParameter"LayerUseStatus","0"
设置内嵌符号图层输出方式。0(按符号描述设定输出)、1(与主地物同层输出)
SSProcess.SetDataXParameter"ExplodeObjLayerStatus","0"设置线宽使用状态。0(按编码表设定线宽输出)、1(按地物设定线宽输出)
SSProcess.SetDataXParameter"LineWidthUseStatus","0"
设置输出数据时,是否强制输出系统字段,0(不输出)、1(输出)
SSProcess.SetDataXParameter"AddSystemFieldMode","0"
设置PDB数据转换中的注记输出模式,0(直接转换为ArcGIS 的 Annotation)、1(所有注记转换为线方式)、2(所有注记转换为点方式)、3(注记分别按点和线方式转换)
SSProcess.SetDataXParameter "EXCHANGE_PDB_Export NoteMode","0"
设置输出PDB数据时Shape输出方式(脚本未指定Shape字段时有效),0(2D)、1(3D)
SSProcess.SetDataXParameter "EXCHANGE_PDB_Export ShapeMode","1"
startIndex=0
......
End Sub
4.3 房屋属性赋值及检查
程序用于为房屋赋【层数】【结构】属性值且同时检查房屋内注记是否合理。程序的主要代码如下:
Sub OnClick()
SSProcess.PushUndoMark
SSProcess.ClearSelection
SSProcess.ClearSelectCondition
SSProcess.SetSelectCondition "SSObj_Code", "=", "3103013,3103014,3108003"
SSProcess.SelectFilter
geoCount=SSProcess.GetSelGeoCount()
Dim arID1(100),idCount1
Dim fwCS(10),idCountCS
For i=0 To geoCount-1
polygonID=SSProcess.GetSelGeoValue(i,"SSObj_ID")
ids = SSProcess.SearchInnerObjIDs (polygonID,3,"3990022",0)
If ids=""Then
geoID=SSProcess.GetSelGeoValue(i,"SSObj_ID")
SSProcess.GetSelGeoPoint i,0,x,y,z,ptype,name
SSProcess.AddCheckRecord"检查","房屋面","自定义脚本检查类->房屋面注记检查","ID为:"&geoID&"房屋面[层数]无值",x,y,z,objtype,geoID,""
......
SSProcess.ShowCheckOutput
End Sub
5 结语
本文基于EPS 2008平台的模板定制和VB Script开发技术解决了DLG制图、入库一体化生产的关键问题,数据处理简捷高效,自动化水平较高,对提高DLG生产效率并保证成果质量具有重要意义。本技术已成功应用于兰州市数字线化图(DLG)的生产和地理信息建库项目,验证了本文提供方法的有效性。