EPS 2012下DLG数据编码升级的编程实现

2015-07-04 13:00孙振勇张燕马耀昌冯国正长江水利委员会长江上游水文水资源勘测局重庆40000重庆市南岸区国土资源管理分局重庆400000
城市勘测 2015年6期
关键词:数据结构

孙振勇,张燕,马耀昌,冯国正(.长江水利委员会长江上游水文水资源勘测局,重庆 40000; .重庆市南岸区国土资源管理分局,重庆 400000)

EPS 2012下DLG数据编码升级的编程实现

孙振勇1∗,张燕2,马耀昌1,冯国正1
(1.长江水利委员会长江上游水文水资源勘测局,重庆 400020; 2.重庆市南岸区国土资源管理分局,重庆 400000)

摘 要:新的国家地形图图式的运用导致了EPS的模板变化,原有的DLG数据势必要进行编码升级转换才能加以运用。在分析了EPS数据结构机制的基础上,利用VBScript脚本编程实现了数据的编码对照,并进行无损匹配干预,最终实现了DLG数据的升级利用。

关键词:数据结构;VB脚本;无损匹配;编码对照

1 前 言

EPS 2012平台在建立一个数据工程时,需要以一个准备好的“技术规则”作为依据,以使数据全面规范化。这个技术规则我们称为“模板”。所谓“技术规则”,它定义了数据的分类编码、分层、颜色、线型、图例库、比例尺、坐标系统、属性数据结构、图幅分幅方案、数据输入输出转换对照等有关的内容,是数据所执行的标准和控制作业规范化的约定。通过模板的定制形成一种标准,在此模板基础上完成的数据都符合了同样的数据标准[1]。

国家基本比例尺地图图式已由GB/ T 7926-1995 向GB/ T20257-2007全面过渡执行,清华山维公司也推出了基于GB/ T20257-2007新平台EPS2012和新模板,数据格式由“.mdb”转为“.edb”。新旧模板两者之间的通用性虽然很强,但也是需要进行一个升级转换的过程才能实现DLG数据的使用。本文基于上述角度出发,探讨了运用VBScript脚本编程进行DLG数据无损匹配的编码升级问题。

2 EPS数据结构机制

EPS模板的主要内容包括定义元数据的一系列表,每个表各自负责系统工作的一个方面,又互相联系协同工作。主要体现在以下四大方面:系统环境设置、地理数据存储、实体编码特征及符号描述、用户扩展属性。EPS模板下的地理数据结构定义如下表1:

User系列用于对指定工程的分层、显示开关、显示顺序及相关点、线、面内联属性表进行定制。一个工程的DLG数据的存储都是作为一条记录存放在工程数据库的数据结构表中,它们包括:GeoPointTB、GeoLineTB、GeoAreaTB、MarkNoteTB。其对应矢量数据信息表为BuildLayerTB、BuildPointTB、BuildLineTB、Build-AreaTB、BuildMarkNoteTB[2,4]。

EPS地理数据结构定义表 表1

通过EPS数据结构机制,我们可以知道新旧编码升级表现在对同一个地物的实体编码特征及符号描述差异化,编码升级的无损匹配就是要去除该差异化,达到一致性。也就是要对上述地理数据结构定义表中同一地物新旧编码的一致性匹配。

3 步骤实现

一个工程的DLG数据编码无损升级应包括点、线、面、注记及其嵌套地物和相应的属性等若干内容的升级。其作业流程图如图1所示:

3.1EDB工程旧编码提取

编码匹配升级,首先必须获取工程数据的原有编码。VBScript编程的思路是根据EPS数据结构机制关系,依次调用待升级工程下User系列各类点、线、面和注记表, 即GeoPointTB、GeoLineTB、GeoAreaTB、MarkNoteTB,从表中提取点数据、线数据、面数据和注记的编码,并按一定的格式排序在TXT文本中。其关键程序语句如下[5,7]:

图1 DLG数据无损匹配的编码升级流程图

'定义文本名称及存放路径

fileName = SSProcess.SelectFileName (0,"",0," Txt Files(∗.txt) |∗.txt|All Files (∗.∗) |∗.∗| |")

'调用GeoPointTB中点数据,点对象编码提取并写入Txt Files

CHKconditions=" WHERE GeoPointTB.Mark Mod 2 <>0 "

sqltexts="SELECT DISTINCT GeoPointTB.Code FROM Geo-PointTB "

'调用GeoLineTB中线数据,线对象编码提取并写入Txt Files

CHKconditions=" WHERE GeoLineTB.Mark Mod 2 <>0 "

sqltexts=" SELECT DISTINCT GeoLineTB.Code FROM Geo-LineTB"

'调用GeoAreaTB中面数据,面对象编码提取并写入Txt Files

CHKconditions=" WHERE GeoAreaTB.Mark Mod 2 <>0 "

sqltexts="SELECT DISTINCT GeoAreaTB.Code FROM Geo-AreaTB "

'调用MarkNoteTB中数据,注记对象编码提取并写入Txt Files

CHKconditions=" WHERE MarkNoteTB.Mark Mod 2 <>0 "

sqltexts="SELECT DISTINCT MarkNoteTB.FontClass FROM MarkNoteTB "

打开刚刚所输出的“编码提取表.txt”,我们可以看到DLG数据中所用到的点、线、面编码以及注记分类号都被提取有序的排列在文本文件中,如表2所示:

编码提取表 表2

3.2新旧编码对照

编码对照,就是在上述“编码提取表.txt”文件中,在原编码(或原注记分类号)所在的行位置后面填写新模板对应的编码(或新注记分类号),中间用逗号隔开。一一对照填写完整后,另存为“编码对照表.txt”文件。该过程相对简单,其内容示例如表3所示:

编码对照表[8]表3

3.3地物要素的无损匹配

EPS到其他测图软件的转换(如转换到南方CASS),数据在一致性、线型属性、嵌套要素等属性的改变等都需要人工干预才能做到无损转换。EPS编码升级由于其数据结构机制并未改变,对同一个地物的实体编码特征及符号描述机制并未做很大的改动,所以地物要素匹配要相对简单得多[3]。其匹配主要表现在三个方面,一是原有的地物编码现在已经定义成了若干个地物编码(例如原有水文站现在细化分成水文站和水位站),可以根据实际地物干预对照;二是原有的地物编码在新的模板中已经没有对照,需要寻找一个新的地物编码进行匹配(例如工矿设施范围线需要用乱掘地范围线表示);三是原有的地物编码有一对一的编码对照,但是其符号描述发生了局部改变的,需要修改其描述机制进行一致性匹配。前两种是在编码对照表或者是新的edb工程中直接进行人工匹配对照,其过程并不复杂,但是完全需要人工干预才可达到地物的实体编码特征及符号描述一致性,示例如表4所示。

人工干预的地物编码匹配示例表 表4

第三类最为常见的就是点位中心的不匹配引起地物编码升级后发生了位置偏移。需要进行该地物对应的Geo∗TB(∗表示点、线、面)表或者是MarkNoteTB 表,在平台环境下FE命令对“符号描述”进行修改。最为典型的例子就是简易轨道线符号,如表5所示:

地物一致性匹配示例表[8]表5

3.4VBScript脚本进行编码升级

上述工作完善后,最终的编码升级则可以通过EPS 2012 VBScript脚本编程一键实现。运行该功能,在弹出的“选择编码对照表”对话框中选择前面准备好的”编码对照表.txt”,点击“打开”按钮,在随后弹出的“选择要转换的EDB工程”对话框中找到要编码升级的EDB工程,选中后点击“打开”按钮。等待程序批处理编码升级,最后得到新编码的DLG数据工程。其编程思路和关键语句如下[6,7]:

(1)选择用于转换的编码对照表

DuiZhaoTxtFile=SSProcess.SelectFileName(1,"选择编码对照表",0,"TXT Files(∗.txt) |∗.txt|All Files (∗.∗) |∗.∗| |")

(2)导入EPS EDB

EDBfileName=SSProcess.SelectFileName(1,"选择要转换的EDB工程",1," EDB Files(∗.EDB) |∗.EDB | All Files (∗.∗) |∗.∗| |")

(3)点、线、面处理

SSProcess.PushUndoMark

SSProcess.ClearSelection

SSProcess.ClearSelectCondition

SSProcess.SetSelectCondition " SSObj _ Type"," = = "," POINT,LINE,AREA"

SSProcess.SetSelectCondition " SSObj_DataMark"," <>"," OK"

SSProcess.SelectFilter

geocount=SSProcess.GetSelGeoCount()

(4)判断GeoType

判断新编码所约定的数据类型(GeoType),与原实体对象的一致性,特别是点、线(面)的一致性。

GeoType =GetGeoTypeByCode( arrobjNewInfo(0))

Select Case GeoType

Case "0"

GeoType="POINT"

Case "1"

GeoType="LINE"

Case "2"

GeoType="AREA"

(5)保存到数据库,编码升级完毕

SSProcess.SetMapStatus 0,2 '开锁数据库

SSProcess.SaveBufferObjToDatabase'存库对象列表保存到数据库

SSProcess.ExecuteSDLFunction " $ SDL.SSProject.View.Extend",0 '数据范围全视

SSProcess.ExecuteSDLFunction " $ SDL.SSProject.Display.RedrawExtend",0 '图形重新生成

Msgbox "OK,编码升级完毕!"

4 结 论

DLG数据编码升级无损匹配的实现是在充分分析了EPS数据结构机制基础上,通过VBScript编程完成了编码提取和编码升级两个程序,并进行了人工干预达到DLG数据的无损匹配升级。本方法完全不需要在第三方平台上进行升级匹配,并通过VB程序使得编码提取和升级变得简单化和批量化,工作效率大大得到提高。

参考文献

[1] 王晓华,杨婷.浅谈清华山维EPS2008在十二五基础测绘更新中与GEOWAY DPS的比较[J].现代测绘,2013 (1):58~59.

[2] 郭昕,武娟.基于C#语言的EPSW与CASS数据格式转换[J].北京测绘,2009(3):78~84.

[3] 覃豪杰,黄彩军,方振华.清华山维EPS到南方CASS地形数据无损转换研究[J].地理空间信息,2013(11):88~92.

[4] 王彦红,于海燕.浅谈北京清华山维软件模板控制技术的应用研究[J].黑龙江科技信息,2013(2):29.

[5] 郑建锋.基于VB和WalkScript脚本二次开发实现对地籍数据入库和数据检查[J].现代测绘,2012(3):63~64.

[6] 周长江,顾和和.基于VB环境下水准网平差程序设计研究[J].现代测绘,2012(1):12~14.

[7] 杨忠宝,康顺哲.VB语言程序设计教程[M].北京:人民邮电出版社,2010.

[8] GB/ T 20257.国家基本比例尺地图图式[S].

The Programming Implementation of Upgrading Code Which of the DLG Datas Under EPS 2012

Sun Zhenyong1,Zhang Yan2,Ma Yaochang1,Feng Guozheng1
(1.Bureau of Hydrology and Water Resources Survey of the Upper Yangtze River,Chongqing 400014,China; 2.Chongqing Administration of Land,Resources and Housing Nan’an District Branch,Chongqing 400000,China)

Abstract:The use of the new National Topographic Map Symblols has resulted in the change of the Templates of EPS,only upgrading and transforming code that the original DLG datas can to be used.On the basis of analyzing the mechanism of EPS data structure,using VBScript program to achieve encoding controls of data,doing lossless matching, and finally achieve the upgraded application of DLG data.

Key words:data structure;VBScript;lossless matching;encoding control

文章编号:1672-8262(2015)06-121-04中图分类号:P209

文献标识码:B

收稿日期:∗2015—09—25

作者简介:孙振勇(1985—),男,注册测绘师,工程师,主要从事水文测验、河道勘测等技术工作。

猜你喜欢
数据结构
数据结构线上线下混合教学模式探讨
重典型应用,明结构关系
“数据结构”课程的学习策略探讨
为什么会有“数据结构”?
数据结构可视化类库的设计与实现
基于Python的数据结构课程
高职高专数据结构教学改革探讨
CDIO模式在民办院校数据结构课程实践教学中的应用
数据结构与算法课程设计教学模式的探讨
高效学习数据结构