蒲朝旭,余代俊,朱逍贤
(成都理工大学现代工程测量技术及应用研究所,四川成都 610059)
随着科学技术的飞速发展,计算机技术、卫星定位系统以及地理信息系统的运用使得现代测绘技术在社会、经济建设中的应用领域不断扩大,现代数字测绘技术已成为测绘技术的主流。目前,我国社会管理和经济建设的信息化水平不断提高,使得社会各领域对数字化测绘产品的需求量也随之增加,使用的测绘软件也越来越多,特别是针对某具体工程、项目应用或测绘功能而开发的各类独立的和二次开发的测绘小软件更是种类繁多、各式各样。若想很好地管理和使用这些小软件,没有一个好的方法或策略,将严重影响程序的使用、存储和传输,从而降低工作效率。
本文针对上述提及的测绘小软件种类繁多,管理、存储、传输不便的问题,提出了一可行的解决方案,开发出一个测绘小软件集锦平台。利用该平台可以将众多小软件集成在一管理软件中,将每一个小软件当作该平台的一个功能菜单,该平台能够实现程序菜单的自动生成,各个应用程序的自动加载,能够将诸多的程序进行分类管理、分类存储,同时能够方便快捷的运行所需应用程序,对于需要嵌入其他应用程序的动态链接库文件(软件),该平台将自动把所需初始化信息等写入相关注册表,同时打开所需软件并实现DLL文件的自动加载,省去了手工加载DLL文件的步骤,减少了错误率。
本集锦平台程序主要用于将开发的众多测绘小软件进行一个归类,并且对各类中的应用程序和DLL文件进行动态菜单的生成,便于存储、传输、管理和使用。
主菜单是本程序的核心部分,用于动态生成主菜单的各项信息采用xml文件的形式进行保存,便于程序初始化时读取相关信息以生成主程序菜单。
菜单信息xml文件存储格式[1]介绍如下:
(1)设计一个文档元素<Menulist></Menulist>作为文件中最外面的标签,该标签中能够包含诸多的元素,以便于其他信息的存储,所以这些信息都必须存储到该文档元素的起始标签中。
(2)设计一个文档元素 <MainMenu></Main-Menu>作为每一个主菜单项的信息存储,同时设计一个属性name用于存储该菜单的名称。每一个<Main-Menu>标签均包含于<Menulist>标签中。
(3)设计一个文档元素<Menu/>用于存储每一个子菜单项的相关信息,并且添加name属性存储该子菜单项的名称,添加path属性用于存储该子菜单项所需运行程序的路径。该路径可以存放相对路径或者绝对路径。每一个<Menu/>标签均位于一个<Main-Menu></MainMenu>标签内。
(4)设计一个文档元素<ApplicationTitle/>用于存储主程序的名称,该标签也包含于<Menulist>标签中。
具体的菜单文档结构框图如图1所示。
图1 菜单文档存储结构框图
基于2.1节中提到的文档信息的存储结构,需要设计对诸多小程序软件进行装载添加、卸载删除的功能。
程序装载功能包括三部分:一是选择待添加的下拉菜单(小软件)所属的主菜单。如果已有列表中不包含所欲添加的主菜单名,则可以自己输入编辑新的主菜单名,此处也实现了主菜单的新增功能。二是选择下拉菜单名。下拉菜单名默认情况下程序会自动根据所选择的小软件文件名生成一个下拉菜单名称,若需要修改,则直接键入下拉菜单名即可。三是选择装载程序路径。该路径下可以选择待装载的可执行的应用程序,也可以选择动态链接库文件,或者选择系统中已经存在的快捷方式均可。
程序卸载功能包括选择欲卸载小软件所属的主菜单和选择下拉菜单(小软件)。如果想删除整个主菜单项,则在选择下拉菜单时选择DelMainMenu项即可。
应用程序的加载需要两个步骤,一是点击某个菜单项,二是能够根据所点击的菜单项运行相应的程序。
因各个菜单均是动态生成,每一个菜单和其运行的程序之间的对应关系,此处定义一个结构体以方便存储,该结构体设计如下:
通过该结构体则可将所需信息进行对应存储。同时,此处也可以设计为HashTable或者Dictionary进行存储,同样能够达到相同的效果。
此处设计的动态链接库文件的挂载主要是指利用.NET开发的基于各个版本的AutoCAD的DLL文件[2~4]。
DLL的命名规则遵循“CAD版本号_程序集名称”,如可以命名为“AutoCAD2006_testdll.dll”。程序首先读取注册表中AutoCAD的安装信息,如果安装了对应的CAD,则能够自动打开该版本的CAD,并且将该程序集进行加载。
加载.NET开发的DLL主要有两种方式:一是在注册表中添加信息,将DLL文件的路径等信息写入注册表,以实现在程序启动时进行自动加载;二是在acad.lsp文件中利用lsp语句将加载信息写入,待程序启动初始化时进行加载。此处采用第二种方式进行DLL文件的加载。
每一个程序均有其作者,为能够找到其作者,在应用程序命名时要求将作者信息加到程序名中,并以下划线进行分割,作者名统一以名称缩写形式加载应用程序名后。
角值度分秒的输入形式多样,为能够适应各种不同形式的度分秒输入,使用正则表达式进行输入字符串的检查,同时使用拆分技术对所输入的字符串进行有效拆分,最终获得有效的角值数据。
本平台采用C#2008结合Linq查询、正则表达式等新技术实现程序的开发。
软件菜单的生成主要是利用Linq to Xml方法[5]对菜单信息文件(Xml文件)进行操作,包括打开文件、读取内容、写入内容、删除内容,利用Windows Forms的MenuStrip和ToolStripMenuItem控件进行菜单的生成。
Xml文件的加载利用XDocument.Load()方法实现,读取使用XElement的Element()方法来获取每一个元素的值,利用XElement的Add()方法来向Xml文件中添加信息,应用Linq方法先查询出需要删除的节点,使用Remove()方法进行删除即可。在进行上述各个添加或者删除操作后,均需要对文件进行保存。
利用上述方法进行动态生成的效果图,如图2所示。
图2 动态菜单生成效果图
程序装卸主要是利用2.1节中提到的Linq to xml方法进行菜单列表文件的编辑和修改,从而生成新的菜单。每次修改完成后,主菜单的菜单项均会重新生成,以保证程序菜单的实时性。
程序装卸窗体界面如图3所示。通过该窗体,可以实现程序的装载和卸载。
图3 程序装卸界面
EXE应用程序的加载非常简单,首先检查路径是否合法,若合法则使用Process.Start()方法直接启动该应用程序即可。
DLL文件的挂载需要操作注册表和AutoCAD软件[6]。首先,使用 RegistryKey读取注册表中的键值,比如读取AutoCAD 2006的信息则语句为
然后使用GetValue("AcadLocation")得到CAD的安装目录,若不存在该CAD版本则在读取信息时则会抛出“异常”。
利用获取的CAD路径则可启动CAD,同时动态生成一个Acad.lsp文件,该文件保存需要加载的DLL文件的相关信息,如加载test.dll则该文件内容为(command"netload""test")则可在程序启动时自行加载该DLL文件。
测绘小软件中角值(度分秒)的使用非常频繁,如何快速高效的获取用户输入的度分秒信息并且能够在用户输入错误的度分秒信息时给出提示,是软件友好性设计方面的一个重点。
在该系列软件中,对于度分秒的处理均是采用正则表达式[7]进行数据的合法性检查,使用拆分方法对获取的度分秒信息进行拆分。
本例综合考虑用户的输入方法,同样的度分秒数据可以有如下一些输入方式(以 120°14'23.334″为例),如表1所示。
角值表示形式 表1
同时还要可能分全角和半角的标点符号以及中文符号和英文符号混合使用的情况。要考虑上述多种形式并且能够判断合法性,具体的正则表达式的匹配字符串如下:
此处对匹配字符串进行简单介绍如下:是转义字符,u表示的是unicode字符编码格式,其中的各个unicode字符均是表示的中文字符匹配,比如中文的度分秒等。
通过上述的字符匹配检测输入的字符是否符合要求后,还需要采用拆分方式对输入的字符串进行度分秒的拆分。
具体用于拆分字符串的代码如下:
通过上述两种方法和手段则可以得到正确的度分秒的值,以便于后续使用。
目前,集锦平台已集成了包括EXE应用程序软件和DLL动态链接库文件的五大类小软件20余个[8~11]。
通过对测绘小软件集锦平台的设计与实现,给测绘小软件的开发设计以及管理提出了一种新的方法,该平台具有较好的普适性,能够将不同语言开发的程序和DLL文件进行自动的加载,能够对测绘软件的整理和使用起到一定的便利作用。
[1]David Hunter,Jeff Rafter,Joe Fawcett(著).吴文国(译).XML入门经典(第4版)[M].北京;清华大学出版社,2009.
[2]曾洪飞,张帆,卢择临.AutoCAD VBA& VB.NET开发基础与实例教程[M].北京:中国电力出版社,2009.
[3]ObjectARX Reference for.NET.
[4]AutoCAD帮助文件.
[5]王的强,张晓娜,周静.LINQ入门及应用[M].北京:清华大学出版社,2009.
[6]James Foxall(著).张劼(译).Visual C#2008入门经典[M].北京:人民邮电出版社,2009.
[7]Jan Goyvaerts,Steven Levitban(著),郭耀(译).正则表达式经典实例[M].北京:人民邮电出版社,2010.
[8]李岳.坐标转换系统的设计与实现[J].北京:中国地质大学,2010.
[9]蒲朝旭,余代俊.基于VB2008的电子水准测量数据处理程序的设计与实现[J].测绘,2011(4),171~174.
[10]白铁勇,余代俊,付崇江.基于TGO软件的GPS网同步环及异步环提取[J].测绘科学,2010(3),102~113.
[11]赖鸿斌,马德英.数字水准仪数据传输转换和管理信息系统的建立[J].测绘科学,2009(5),186~187.