大地测量数据处理软件设计方法的研究
摘 要:大地测量数据处理已向自动化处理方向发展,要求数据处理人员具有软件设计综合能力,各种软件设计新技术的出现,使开发人员应接不暇。从软件开发方法、软件重用、数据库应用和算法设计基本原则等方面对大地测量软件设计方法进行了研究,并初步给出了相关问题的解决策略,介绍了这些方法在高精度重力网数据处理中的应用实例.
关键字:软件开发 数据库 软件重用 算法设计 大地测量数据处理
1 引言
随着现代测绘技术的发展,需要大地测量数据处理软件具有强大的功能和方便的操作,计算机硬件的发展已经能够满足系统快速开发的要求,各种开发工具的不断涌现,使测量软件开发人员应接不暇。但每种工具都有其开发的强项,如MAPINFO 适合开发桌面地理信息系统[1],POWER BUILDER(PB)适合开发数据库管理[2],VISUAL C++适合开发WINDOWS应用,FORTRAN适合开发科学计算,各种数据库为数据管理提供了强有力的工具。开发大地测量数据处理软件的人员一般是测量专业人员,对数据结构、计算方法及计算机等专业知识的培训较少,设计的数据处理算法往往凭数学公式来设计,算法稳定性差,计算误差比较大。另一方面,前人采用各种开发工具,完成了许多成熟的专业软件。怎样使测绘专业人员在最短的时间内充分整合好这些开发工具的优势,利用宝贵的现有软件,开发出功能强大、系统稳定性强的软件,在工作实践中,我们进行了一些探索。本文从软件开发方法、软件新技术和算法设计原则等方面讨论了大地测量数据处理软件设计的方法,介绍了这些方法在高精度重力网数据处理中的应用实例。
2 软件开发方法
2.1 结构化开发方法
结构化开发方法是一种传统的方法,是为广大系统开发人员所熟悉的基本方法。它采用自上而下、逐步求精的思想,将系统功能按层次进行分解。
在系统分析阶段,强调系统能够“做什么”;在系统设计阶段,强调系统“如何做”,界面清晰,易于理解,采用图示工具附加语义说明的方法阐述系统结构和功能,便于系统开发人员和用户的相互交流,对系统的一致性理解。采用的主要方法有:数据流图法(DFD)、结构化分析/结构化设计方法(SA/SD)、IDEF法、Jachson法等[3]。该方法的核心在于将系统中的功能与数据分割开来。为开发大地测量数据处理软件,在开发之前必须详细了解大地测量数据处理的全过程和细节,并且认真分析,了解测量各专业的发展方向。
2.2 面向对象的开发方法
面向对象的开发方法是着重解决系统需求变化和维护困难等问题发展起来的一种新的软件开发方法,基本要点是:
在系统分析阶段,用问题空间中实体及其相互关系建立系统逻辑模型,以一种更加自然的方式描述系统需求和体系结构。由于空间问题中的对象是相对稳定的,即使有变化,通常只影响系统局部或系统需求变化的局部化,从而使系统具有一个相对稳定的结构。
系统设计与实现是对分析阶段达到的逻辑模型的细化和实例化[3]。以重力点为例,定义测点有经度、纬度、高程等属性,有坐标转换等操作;以测点为父类,重力点继承他的属性,增加专有属性重力值,增加重力异常、高程异常、垂线偏差计算等操作,最终以代码的形式出现在设计与实现模型中,使得分析与设计具有无缝连接,如坐标转换有问题,仅在测点类中修改,而不在重力点对象中修改,系统易于测试和维护。
系统开发过程是系统需求、分析、设计、实现、测试等一系列模型的细化过程,可以有效解决系统复杂性问题。同时,构成系统基本单元——对应,有利于被设计成具有标准界面的软件构件,即把对象和操作封装在一起,对重力点对象来说,就把重力点和它的计算——重力异常、高程异常、垂线偏差等计算的程序封装在一起,以后要计算重力异常、高程异常、垂线偏差等,只要调用这个对象就行,使之具有一定程度的可重用性,为软件开发的规模化奠定基础。
3 软件开发新技术
一种开发工具理论上能开发功能较多的应用程序,同时不同的开发工具理论上能开发功能相同的应用程序。如VC和汇编语言理论上都能开发完成一种应用程序,但开发难度和工作量会大大不同。在进行软件开发时,通常采用不同的开发工具,充分利用各工具的开发优势,既快又好地开发出一个功能强大的应用程序。
3.1 数据库技术
在一般的应用程序设计中,由应用程序自己管理数据,数据不共享,数据不具有独立性,当数据的逻辑结构和物理结构发生变化时,必须对应用程序做相应的修改,这样,造成软件的适应范围差。在实际应用中需要信息资源的共享,关键是要有好的数据接口技术与接口标准[4-6]。
采用数据库系统来管理数据,数据具有很强的结构性,存取数据的方式非常灵活,可以存取数据的一个数据项、一组数据项、一条记录等。数据共享性好,冗余度低,能够避免数据之间的不相容性和不一致性。数据库系统具有数据总体逻辑结构与局部逻辑结构的对应转换功能,当系统的逻辑结构改变时可以保证数据局部结构不变,应用程序就不用修改;另外,数据的存储结构与逻辑结构具有映射功能,当数据的存储结构发生改变时,不影响数据逻辑结构。由于数据与程序间存在独立性,简化了程序的编制、维护和修改。此外,数据库系统具有数据完整性、安全性等控制,能充分保证数据的安全、恢复以及多用户同时使用等。
建立数据库系统信息模型方法主要有ER法和IDEF1X方法,用范式1NF——5NF对信息模型进行转换为特定的数据结构模型,依据数据局部逻辑结构进行程序设计[7]。在计算机辅助设计CAD和桌面地理信息系统MAPINFO中就采用了数据库技术,才使该系统具有强大的实用功能。
3.2 软件重用技术
3.2.1 DLL模式
动态链接库DLL(dynamic link library),像静态链接库一样,是函数的集合。当一个应用程序使用动态链接库的函数时,该函数不包含在可执行程序中,只有当应用程序用到库中的函数时才将其调入内存中。这种链接方式称为动态链接。
采用这种方式具有如下优点:节省时间和空间、无需要再链接、共享代码和数据、维护独立、功能扩展,提高了程序开发的效率。
DLL的位置:DLL应放在执行文件目录、当前目录、Windows目录、Windowssystem目录和在path中指定的路径目录下,查找顺序由前到后。注意:不要在以上目录保存多个版本的DLL,否则可能引起混乱。
目前大多数应用程序和开发工具能提供DLL编译能力,提供__fastcall、__pascal、__stdcall、__cdecl等参数调用约定,能实现多种语言的混合编程。在测绘各专业中,有许多用FORTRAN77编写的经典程序,对他们进行适当的修改,就能被其它语言调用,这样就有效的保护和利用已有的成果。
3.2.2 Active X 、OCX模式
动态数据交换DDE(dynamic data exchange )是使用基于消息机制来实现两个不同Windows应用程序之间数据交换的工具。通过使用API可调用DDE动态库DDEML,这样使DDE服务过程简单化,通过DDE技术,有利于应用程序间发送和接收数据和命令。通过这种方法,使应用程序之间进行数据共享、远程执行命令或检查错误等。在DDE中,一个应用作为客户端,另一个应用作为服务器,他们通过事务进行通信。一个客户端应用向支持DDE的另一方(服务器)发出请求,请求可以是数据也可以是命令(如:打开、关闭、保存等)。一个服务方应用是相对于客户端的另一方,它响应客户端的请求,依据客户端请求,向它提供数据和服务(可以是命令)。
OCX、ActiveX 是建立在对象连接和嵌入OLE(object linking and embedding)基础上的,得到广泛支持的面向对象的软件集成技术,用户像用砖块盖房子一样来组合软件和应用程序。
在许多开发工具中都提供了ActiveX能力和调用ActiveX、OCX的能力,如visual c++、visual basic、dephi等。许多专业公司提供了众多的ActiveX、OCX控件,如MAPINFO 、ERSI 的MapObjects和MICRSOFT 的COMMON.OCX等众多的控件可以被调用。
3.3 基于网络的分布式系统设计方法
分布式系统突出的特点在于构成系统的各部分在地域上的分散性、自治性及各部分之间相互联系与制约所表现出来的功能与性能的综合性。系统具有数据的分布性和功能分布性等特点。比较适合的计算模型有两种,一种是客户—服务器模式(client/sever,C/S);另一种是客户—代理—服务器模式(client/broker/server,C/B/S)[8]。
C/S模式通过远程过程调用机制(RPC)和网络应用编程接口(API)实现。优点是处理能力强、方便的资源共享、可以预测响应时间。缺点是系统维护困难。
C/B/S模式是指在客户与服务器间加入代理(broker),是客户与服务器之间具有动态的可变的关系,支持同步与异步通信。可扩展性、可维护性、可重用性强。
充分利用好软件发展中各种成熟的新技术,不仅能有效利用和保护早期的成果,关键是能有效提高开发速度,使应用程序具有良好的可维护性,对系统的部分修改,不影响系统的正常使用。
4 大地测量数据处理软件算法设计原则
4.1 大地测量数据处理的工作模式
用计算机来处理大地测量的各种信息,就是对获得的观测信息网络的分析、处理、对多种成果的综合应用等问题进行程序设计,最后得到需要的计算结果(如概算值、平差值和其它产品等)。其具体的工作方式如下:
4.2 大地测量数据处理误差来源
任何一个用计算机来处理的测量问题都必须经过上述五步,缺一不可。数值计算方法和程序设计是由掌握计算机知识较多的人员进行,这两步往往合为一步。因此误差来源主要由观测误差、模型误差和计算误差组成[9-11]。
观测误差是由于实际问题的各种观测方法、观测仪器和环境等造成的,其限差都有相应的规范。模型误差是对实际问题的数学抽象而产生的误差。实际测量问题和相应的数学处理方案是几代测绘专家多年的研究成果,其误差有专门的研究,现有的误差肯定已经减小到最小。它们在大地测量数据处理软件开发中可以不必考虑。
计算误差是对数学处理方案的理解和对方案进行程序设计而引起的误差,它包括截断误差和舍入误差。当数学模型得不到精确解时,要用数值计算方法求出它得近似解,由此产生的误差叫截断误差或方法误差。由于任何计算机的字长都是用有限的,原始数据的输入和浮点运算过程中都可能产生误差,只能用有限的数来代替无穷小的数,这样产生的误差叫舍入误差。成千上亿次计算,对精度可能有较大的影响。所以在数值计算中对截断误差和舍入误差应给予足够的重视,我们可以通过对算法的设计和改进来进行控制。
4.3 大地测量数据处理算法设计原则
算法是对一些数据按某种规定的顺序进行运算的序列。一个算法,如果计算结果受误差的影响小,就称这个算法具有较好的数值稳定性。如果受误差的影响较大,则称这个算法的数值稳定性差。在大地测量数据处理软件设计中,要设计具有数值稳定性好的算法,必须遵守如下基本原则:
a、充分利用原始观测数据,减少程序舍入误差。
b、避免数值相近的两个数相减。
c、注意调整变量计算顺序,保护重要数据,防止数值较大的数“吃掉”较小的数。
例如:6378140 + 0.000001 + 0.000002 +0.000004 + 0.000003,如直接计算,计算机操作系统通过对阶,就可能丢掉后面的小数,而应通过改变计算次序,变为6378140 + (0.000001 + 0.000002 +0.000004 + 0.000003)。
d、注意简化计算步骤,减少运算次数,利用好的算法,避免误差积累。
在大地测量数据处理中, 这类计算是较多的,如直接计算,要进行n(n+1)/2次加乘法和n次加法。如改变计算次序,则 ,则只进行n次加法和n次乘法。如在程序循环中,则能显著提高计算速度并减少误差积累。
e、算法设计中,注意避免绝对值较小的数作除数。
f、在比较两数是否相等时,不要用浮点数,而采用整型数或比较两数的差值小于一个更小量级微小数的方法。
5 开发实例
在“高精度重力网数据处理” 系统的软件设计中,充分采用了结构化、面向对象开发方法和数据库技术、DLL、Active X和网络分布技术等新技术。采用Sybase数据库系统来管理高精度重力网数据处理软件中所需要的数据,使数据相对独立和安全;用FORTRAN来开发系统预处理和平差程序,编译成DLL供PB调用,解决PB计算能力相对较差的问题;用PB来开发应用程序主框架,采用了面向对象的开发方法,利用C/S模式对后台数据进行管理,并从数据库提取计算处理所需要的数据,再用处理后的结果更新数据库;在用PB来开发应用程序中插入Active X地理信息系统图形控件MapX,进行地理图形功能开发,使整个系统具有简单的GIS功能。通过应用2000国家重力基本网数据处理的实践,充分说明了系统具有功能齐全,稳定性强,计算精度高等特点。
声明①:文章部分内容来源互联网,如有侵权请联系删除,邮箱 cehui8@qq.com
声明②:中测网登载此文出于传递更多信息之目的,并不意味着赞同其观点或证实其描述,文章内容仅供参考。
加群提示:我们创建了全国32个省份的地方测绘群,旨在打造本地测绘同行交流圈,有需要请联系管理员测小量(微信 cexiaoliang)进群,一人最多只能进入一个省份群,中介人员勿扰