版权归原作者所有,如有侵权,请联系我们

[科普中国]-自动批处理

科学百科
原创
科学百科为用户提供权威科普内容,打造知识科普阵地
收藏

简介

批处理(Batch),也称为批处理脚本。批处理就是对某对象进行批量的处理,通常被认为是一种简化的脚本语言,它应用于DOS和Windows系统中。自动批处理即不需程序员操纵而主动直接操作的批处理过程,主要应用于批量处理大量数据、文件。

研究背景当数据量巨大且所需操作繁琐时,采用逐个文件人工处理,从技术层面看不成问题,但由于数据量庞大,数据组织目录层次深,采用人工处理,不仅工作量大,而且容易漏转换或文件被再次误转换,存在质量隐患,因此必须采用自动批处理。1

关键技术项目的关键问题是要解决数据处理的唯一性问题,即既不漏处理,也不重复处理。由于数据源庞大,难以采用人工的方法进行分析,归纳、归类处理,而且最怕的是漏转换,多次转换。因此,需要采用一种有效的方法对所关心的问题,给定规则或条件,进行数据探测。数据探测就是对数据对象进行遍列,实质是对数据源的目录与文件进行遍列。对于有限深度的数据源或深度已知的数据源,可以采用for(),do{}while()等常规编程手段,给定探测深度,对数据源进行挖掘。但本项目由于数据的庞大和复杂性,显然常规手段难以达到目的。根据数据源的特点,考虑采用递归技术,使转换程序具备自动批量功能。

在程序设计中,递归在算法的描述中被经常采用,很多问题可以用递归算法求解。例如,有些问题的定义形式本身就是递归的,如阶乘函数;有些数据结构,如二叉树、广义表等,由于结构本身固有的递归特性,所以对它们的操作可以递归进行;还有一类,虽然问题本身没有明显的递归结构,但用递归技术求解比其他方法更容易,如最经典的汉诺塔问题和八皇后问题等。另外,由于递归算法省略了程序设计中的许多细节操作,简化了程序设计过程,使得在求解许多复杂问题时,采用递归算法比不用递归算法要简单得多,并且程序结构清晰、易读,正确性容易验证,这给用户编制程序和调试程序带来很大方便。

所谓递归,就是指用自身的结构来描述自身,以实现层次数据结构的查询和访问。递归算法常用于递归调用方面,即子过程或函数自己调用自己。

递归调用必须是有限的,有限才有意义。所以必须设置相关的控制条件,使其成为有限。这可以通过条件语句(If语句)来实现,即只有在设定的条件成立时递归才继续,否则终止递归。可见,构成递归必须满足以下条件:

(1)有明确的结束递归的边界条件(又称终止条件)以及结束时的边界值;

(2)过程的描述中包含其本身,即能用递归形式表示,且递归向终止条件发展。递归算法求解问题的基本思想是:对于较为复杂的问题,把原问题分解成若干个相对简单且类同的子问题,这样原问题就可递推得到求解。

当一个问题存在上述构成递归的条件时,该问题便可以利用递归算法进行处理。具体是:

当所求解问题难于直接求解时,首先,把问题分解成若干个难度较小、较容易求解的子问题,子问题与原问题具有类同的结构。如果子问题能够直接求解,则解之;如果子问题仍不能直接求解,将每个子问题再分解成若干个更简单的子问题,直到分解出的子问题能够很容易地求解或解为已知,这是实现递归的模板。然后,设计递归出口(即结束递归的边界条件),在满足出口条件时,递归函数不能再调用自己,必须返回一个确定的值。将这两个方面的问题分析好之后,就可以在子程序体中定义递归调用了。

在通常情况下,递归调用都是要受到条件控制的,而且在被调用的过程中,会对调用条件进行有规律的修改,直到满足边界条件,返回边界值,结束递归;然后按照原来的路径逐层返回,求出原问题的解。由此可知,递归算法设计的关键在于递归描述和递归终止条件。

递归算法的执行过程是不断地自调用,直到到达递归出口才结束。然后,递归算法开始按最后调用的过程最先返回的次序逐层返回,返回到最外层的调用语句时递归算法执行过程结束。可见,递归的实现过程包含了“调用”和“返回”两个阶段。1

主要技术问题要实现项目数据的自动批处理,除基于递归技术编程开发外,尚需解决以下主要技术问题。

转换对象坐标取位不一致对于测绘数据而言,在不含带号的情况下,X为6个整数位,Y为7个整数位。由于种种原因,数据源中的坐标数据取位相当凌乱,既有在统一坐标系的前提下的不同取位数据,也有独立坐标系坐标的数据,个别的是经过坐标旋转过的数据。如果按自身文件的坐标值直接插入拼接处理,显然不合适。

解决方法:

(1)首先利用已有的基础地理信息数据,诸如1:1万地图数据和水利、地名数据等,建立简易且有效的地理信息框架检核数据库。

(2)采用递归技术遍列数据源,对于坐标取值不足位(X为6个整数位,Y为7个整数位)的数据,先补足其整数位,判断补位后的坐标取值范围是否合理,若不合理,重新补位直至合理。然后利用“地理信息框架检核数据库”的数据对诸如公路、地名、水系等框架数据进行比较检核。若检核获通过,将数据文件的相关信息记入“数据处理日志数据库”,信息包括:原文件的名称、路径、数据坐标的取位情况,坐标补位数值,从原文件中获取的坐标系统信息,测图时间、测图单位等,同时获取并记录该数据文件的所覆盖范围的坐标串。

(3)对于经上述步骤处理与检核,不符合要求的文件,暂时将其作为独立坐标系,单独人工处理:由熟悉本地地理情况的人员分析判断个案处理,或查询其他的文档记载后分析处理。经验证,除少量数据需要人工处理外,绝大部分文件通过上述的前两个步骤正确处理到位。1

历史数据与最新数据问题采用递归技术遍列数据源,建立数据源的数据文件信息数据库,通过拓扑分析:

(1)区域内只有唯一一套数据时,该数据被认为是当前最新的测图数据;

(2)当区域内有两套或以上数据交集时,按测图年份取最近测的地形图作为当前的测图数据,其他数据作为历史数据,建立到历史数据库中。1

坐标转换原理是:首先获取描述实体位置信息的定位点坐标,然后根据严密的坐标转换公式计算出转换后的坐标值;最后通过修改实体定位点的坐标为转换后的坐标值。每一类实体均要单独处理,常见地形图中包含的实体主要有:点(Point)、文本(Text)、直线(Line)、多线(MLine)、多段线(Polyline)、样条曲线(Spline)、弧(Arc)、圆(Circle)、椭圆或椭圆弧(Ellipse)、块(Block)、图案填充(Hatch)等。之所以每一类实体要单独处理,是因为每类实体有不同的位置定义,例如文本是由位置点(position)定位的;弧是由弧心点(center)、半径(radius)、起始角(startAngle)、终止角(endAngle)定位的等。1

布局及视口的处理对于某些规划图,图面信息记录在布局中,因此需要对布局进行转换。对于这种情况,程序处理过程是:首先获取模型空间图元坐标信息进行转换,然后获取所有布局空间图元坐标信息进行转换,由于布局空间图元是与视口(Viewport)关联的,因此只需对视口进行坐标转换即可,对于视口来说,有两个中心坐标,一个是视口的中心点(视口在布局中的中心点坐标),另一个是当前视口中视图的中心点(视口中视图在模型空间的中心点),当模型空间图元坐标转换后,布局空间视口中的视图中心点坐标也应该相应做转换,所以转换此坐标即可转换该视口。1

基于ObjectARX坐标转换程序开发由于ObjectARX使用了C++方法,并以动态链接库的形式被调用,因此执行速度快,安全性好。与其他几种开发工具相比,其独有的对AutoCAD内部数据结构的直接使用和扩展,使它的功能得到了极大的增强,而且ObjectARX库包含了各种工具,用户可以利用这些工具来使用AutoCAD的开放结构,并且可以直接访问AutoCAD数据库、图形系统和用户自定义命令。1

自动批处理文件自动批处理文件(AUTOCJTEXE.BAT)与系统配置文件(COIFG.)是存在于系统SSY盘根目录下的两个文件。在O启动过程DOS中,系统要在根目录寻找CONIFG.SYS并执行它,DOS启动后,紧接着也要在根目录下寻找AUTOEXEC.BAI,并执行。

为了防止他人进入系统查看或更改自动批处理文件和系统配置文件,可将这两个文件改名。通常,微机上的这两个文件是在根目录下才起作用,通过工具PC5(PC.Tools5.0)可将其改名。2