王光昇
(天津市测绘院,天津 300381)
我们国家在2007年发布了新版的基础地理信息要素数据字典和国家基本比例尺地图图式,天津市测绘院在基础地形图测绘中为与国家标准保持一致,对原有的数据字典进行了修订,于2011年发布了新版的天津市基础地理信息要素数据字典,新字典对要素的分解表示更加细化,将原有的要素编码由7位改为10位,相比旧的数据标准,部分要素的图面表示方式有了很大的变化。新字典发布的同时,问题就出现了,尽管已经自主研发了基于新标准的数据采集编辑软件,但现有的数据仍然全部是适用的旧标准,出现了有新标准而没有新数据的现象,日常的测绘工作无法正常开展。为了解决这一矛盾,本文讨论了如何利用程序的方法实现新旧数据标准下地形图数据的自动转换。
用程序处理数据时,采用什么样的程序设计思路要依具体需求而定。处理特定要素时,可以将要素的信息写在程序里,虽然缺少灵活性,但它仅限于满足特定的功能;而当需要处理的要素种类很多时,就不应该把所有的要素信息都固定在程序代码中,那样的话,程序员就永远和数据绑定在一起了,用户每增加一个新要素,程序员就要调整一次程序。要避免这种情况出现,必须在写程序前进行流程设计,制定出程序规则,在规则允许的范围内指定哪些交给用户去做,哪些由程序本身完成。本文讨论的数据转换流程图,如图1所示。
图1 转换流程
定制规则的目的是让所有地物都能在转换规则中找到匹配的项,所以规则要定义得适当。本文以交通类要素为例,定制的转换规则如表1所示。
交通要素转换规则 表1
表1中对交通(JT)类的地形要素制定了12项转换规则,从规则列表中可以看出,大部分规则的不同之处就在于处理的属性项有所区别。这实际上暴露了目前数据存储中的一些问题:目前大部分用户在存储自定义信息时还是使用扩展数据(XData),这种信息存储方式有数量的限制,不能超过128Kb,而且存储的信息不能像一般的数据库那样可以依据字段名称进行查询。而这样的不足可以通过使用对象扩展词典来解决,如:“extDict.SetAt("searchKey",xRec);”,我们注意到,SetAt函数的第一个参数表示扩展记录的搜索关键字,它就类似于数据库表中的字段名称,用它可以很方便地查询用户信息。
在确定了转换的规则后,编写转换对照表的工作就可以完全交给用户去做了。对照表结构如表2所示。
转换对照表 表2
编写转换程序实际上就是对转换规则的程序化,每个规则对应一个应用程序模块。以表1中的规则2为例,介绍程序处理的流程:
第一步,用SQL语句在转换对照表中读取JT类且转换规则为2的所有记录,(SETQ A(DSQL_ASSOCQUERY DB“SELECT*FROM code WHERE CLASS=’%S’AND ID='%s’”“JT”“2”)),语句中以DSQL_为前缀的函数是用ObjectARX环境编写的供LISP来调用的函数,程序中集成了开源的SQLite程序,所以它可以很方便地操作SQLite数据库文件,我们的所有转换对照文件都是用SQLite数据库表来管理的;
第二步,循环处理数据集中的记录,按照表2中的字段读取每条记录的新旧编码、类型、转换规则ID等信息;
第三步,以编码作为过滤条件,通过LISP语句建立选择集循环处理,处理的内容包括:图层、编码、颜色等通用属性,其他属性的处理依实体类型而不同,如线性实体需要修改线型、线宽、线型比例等;文字实体需要修改字体、字高、长宽比、旋转角度等。
在新版天津市基础地理信息要素数据字典中,对地物的关联关系作出了明确的规定。建立关联关系的目的是为了将组成一个实体的各个部分或将若干实体表示为一个整体而建立起数据关系,如图2所示。
图2 关联关系
图2表示“已加固的斜坡式一般堤”,坡顶线和坡底线以及中间的描述符都是独立的CAD实体,要让它们之间建立联系,共同来表示一个地形要素。方法是通过给这一组对象都添加一个共同的标识码,标识码是随机生成的,每个标识码是不重复的。Windows系统的全局唯一标识(GUID)恰好可以满足这一需求。
在新旧数据转换过程中要将这些零散的对象准确地关联在一起,必需建立一系列关联规则,以此来约束程序按照指定的次序搜索相关要素,如表3所示。
关联关系规则 表3
以图2所示坡坎线为例,将关联规则中的4A和4B两项规则程序化,即需要作两步处理:
首先由坡顶线创建“缓冲区1”(见图3),然后通过缓冲区选择坡顶线附近的符号线和符号块,为了避免搜索到其他邻近的坡坎的符号,需要在程序中进行逻辑控制,逻辑条件是:坡坎的符号线与坡顶线之间的最近距离是0,每一对符号块与符号线在坡顶线的同侧,且与符号线的距离恒定。搜索完成后,建立坡顶线与符号线和符号块的关联。
其次是由坡底线创建“缓冲区2”,再通过缓冲区选择与它相交的符号线(见图3中传导线),坡底线的标识码由符号线(传导线)继承过来,这样坡顶线、符号线、符号块以及坡底线就通过相同的标识码联系在一起了。
图3 建立缓冲区搜索关联
有些地形要素在新旧图示中的表示方式有很大的区别,这些要素无法实现全自动转换,需要在程序处理后再进行人工编辑。而有些要素尽管可以用程序自动处理,但为了避免编辑错误,处理后也需要人工确认,为此须将每个程序编辑过的要素添加到自定义的实体定位列表,便于用户核查,如图4所示。
图4 后期处理与实体定位
在完成图形的转换处理后,还要对转换后的图形进行质量控制,我们依据新版的数据字典编写了检查程序(见图5),检查程序从要素属性、空间关系、拓扑关系等多方面对地形图进行检查,极大地提高了数据检查的效率,同时也最大限度地保证了新旧标准地形数据的转换质量。
图5 数据检查
笔者在研究地形图数据新旧标准转换的过程中,将SQLite数据库技术引入到转换规则设计及对照表信息管理中,用户可以根据自己的需要匹配要素规则、修改转换配置文件,这种设计方式增强了程序功能的延展性,使得数据转换的流程控制更加灵活。
目前该转换程序已经广泛应用于天津市测绘院2011年的1∶2 000地形图修测项目中。
[1]余承飞,方勇.AutoCAD 2000二次开发技术(ObjectARX)[M].北京:人民邮电出版社,1999
[2]佟里欣.AutoCAD 2000探秘–AutoLISP入门[M].北京:海洋出版社,2000
[3]张长勋.AutoCAD VisualLISP程序开发技术[M].北京:国防工业出版社,2005
[4]Jay A.Kreibich.Using SQLite[M].O’Reilly Media,2010
[5]GB/T 20257.1-2007,1 ∶500 1 ∶1 000 1 ∶2 000地形图图式[S].
[6]天津市基础地理信息要素数据字典第一部分:1∶500、1 ∶2000[S].