EPS脚本技术在D LG制图入库一体化生产中的应用

2019-03-20 19:56王鹏
工程建设与设计 2019年18期
关键词:二次开发制图入库

王鹏

(兰州市勘察测绘研究院,兰州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)的生产和地理信息建库项目,验证了本文提供方法的有效性。

猜你喜欢
二次开发制图入库
重磅!广东省“三旧”改造标图入库标准正式发布!
中国食品品牌库入库企业信息公示②
无声手枪如何消音?
中国食品品牌库入库企业信息公示①
浅谈基于Revit平台的二次开发
浅谈Mastercam后处理器的二次开发
西门子Easy Screen对倒棱机床界面二次开发
小明巡山记
二向反射模型在土地覆被制图中的应用
身临其境探究竟 主动思考完任务——《仓储与配送实务》入库作业之“入库订单处理”教学案例