[摘 要]:军事标图设计采用GIS组件MapObjects和军标库相结合的解决方案。军标库实现军标的管理和绘制,并将军标库封装成动态链接库,提供军标绘制接口。在点军标绘制函数中给定其绘制的位置点,即可将军标绘制至需要的位置。函数军标绘制函数接口中预留的参数为数组,用来存储用户输入的控制点。军标属性设置采用鼠标选择或通过属性对话框交互设置。系统通过数据管理、态势标绘及GIS辅助模块等实现.
关键词:MapObjects;军标库:军事标图系统;点军标:函数军标
0 引言
作战指挥自动化要求军事标图必须采用现代化标图工具,以提高成图速度,满足作战指挥要求。故采用GIS组件MapObjects和军标库相结合的军事标图系统,其中军标库用于存储和管理各种军标,MapObjiects实现GIS功能,系统通过VC编程实现军标库设计并提供获取军标库中军标接口。
1 系统设计
1.1军标库设计

军标库实现军标的管理和绘制,组织结构图如图1。其设计思路根据军事标图的实际使用情况和计算机实现需要,把不依地图比例尺表示的小面积地物或点状符号归为点军标:而把那些有地理范围意义和形态,且能作为作战需要的军标则归为函数军标。点军标符号由一些基本的图元(如点、直线、矩形、与圆)构成,图形比较固定,有明确的定位点和方向性,而且在设计时留有一定“自由度”,允许用户修改军标大小、方向、颜色等属性;函数军标与点军标不同的是,单纯靠基本图元不能完成它的绘制,需要几个控制点拟合成曲线形成。
军标库同时还将军标库封装成动态链接库,提供军标绘制接口,供其他应用程序调用。点军标的图形比较固定,所以在点军标绘制函数中给定军标需要绘制的位置点,即可将军标绘制至需要位置。而函数军标的绘制函数则需给定几个控制点才可完成军标的绘制。因此函数军标绘制函数接口中预留参数为一个数组,用来存储用户输入的控制点。
1.2系统结构
系统采用军标库实现对各种军标的存储和管理,并提供军标库的接口,军标标绘时通过隐示加载封装了军标的DLL文件,调用军标绘制函数,实现军标绘制。
军标属性设置采用2种方式:①通过鼠标选择军标,即借助鼠标对军标的操作来完成军标的几何属性设置;②通过属性对话框进行交互设置。
采用鼠标选择方式较符合通用绘图程序对图形的操作,考虑到军标与一般图形的属性区别,添加1个属性对话框实现军标的其它非几何属性如军标颜色、柔化等设置。最后还需为标图人员提供一些辅助决策的功能。整个系统的主体框架如图2。

图2中,数据管理模块主要管理底图数据和态势图,底图数据管理主要指底图数据的加载及显示。态势图管理包括态势图(即已标好军标的底图)的打开、保存。态势标绘模块完成对军标的一些基本操作。标绘军标至地图上、对军标进行选中、拖动、旋转、删除等编辑功能和军标组合选择及取消。GIS辅助模块实现一些基本的GIS功能。
2 系统实现
系统采用VisualC++与MapObjects结合模式实现。通过MapObjects实现对底图的添加、控制及实现一些基本的GIS功能。通过VC编程语句实现态势标绘模块,以及设计友好、灵活的用户界面来显示信息和数据库连接功能。
2.1数据管理模块
底图加载可通过设置map控件属性进行加载,也可采用编程方式实现动态加载。由于标图人员标图时需动态加载图层,因此,采用文件打开方式进行动态加载。执行程序中在文件菜单下打开地图,选择要添加的Shpfile文件即可完成地图加载。底图显示控制是由MapObjects的图层管理功能实现,即设置图层Visible属性控制图层的显示与否。
打开态势图:先导入底图、读出保存的军标信息。包括军标的个数及每个军标ID、军标类型、控制点经纬度坐标和属性信息、将每个军标的经纬度坐标转换成设备坐标,按军标类型,调用绘制函数标绘至底图上。保存态势图:保存军标的个数及每个军标的经纬度坐标和属性信息,保存底图。
2.2态势标绘模块
(1)军标标绘
点军标由基本的图形单元(如点、直线、矩形、圆等)组成,标绘方式较固定,无特殊变化,如副连长军标由一个圆和一些直线组成,如图3。点军标没有地理范围意义,因此当地图缩放时不需随地图联动,只需记录军标绘制点的经纬度坐标即可。
函数军标因具有地理范围意义,在地图上代表为1个面对象,因此军标的绘制必须确定生成军标的若干控制点,拟合成闭合曲线,形成军标的轮廓,最终绘制出函数军标。如生成进攻箭头图标,其控制点分为主控制点和从控制点2类,主控制点由标图人员手工输入,从控制点由绘图算法从主控制点中生成。主控制点为4个(p1,p2,p3,p4),如图4。

算法思路:①连接p1,p2取其中点,过中点、p3、p4三点,拟合一条Bezier曲线作为箭头图标的中轴线;②确定箭头箭尖p5,p6点,取中轴线长度的六分之一点pp过pp作中轴线的垂线,由p4出发作一条与中轴线夹角为30度的直线交点为p5,同理得p6点;③确定p7,p8点,取pp点与p4距离的四分之三点作中轴线的垂线, 由p4点出发作一条与中轴线夹角为15度的直线交点为p7同理得p8:④连接p7,p2拟合成一条Bezier曲线,连接p8、p1拟合成一条Bezier曲线。
在标图结束后还可通过调整p1,p2,p3,p4点对绘制好的箭头进行改变,直至符合要求。
(2)军标编辑
军标编辑包括对军标的选中、移动、定点编辑、旋转及军标线型、颜色设置等。军标定点编辑步骤:①在MouseDownMap事件中判断鼠标停留位置:②在MouseMoveMap中采取异或绘制模式绘制军标在拖动中的状态:⑧鼠标放开时计算出新定位点坐标及军标的高度和宽度:④刷新地图,重绘军标并判断军标是否处于选中状态,若是,则绘制军标包围框及热点。考虑到函数军标与点车标的实现方法不同,点军标的绘制只需给该军标的定位点即可,而函数军标需几个控制点才能实现。因此对函数军标的定点编辑既可用点军标实现,也可用选中函数军标的控制点,对其进行拖动实现。
军标属性的设置可由属性对话框与选中的军标进行交互。
当军标处于选中状态时,对话框中显示的属性为选中的军标属性。标图人员可用鼠标选中军标对其进行一系列操作以完成对军标的修改,同时对话框中军标属性也作相应修改。也可直接在对话框中修改军标属性,显示在底图上的军标也做同样的处理。
(3)GIS辅助模块
GIS辅助模块提供图上量算和空间查询2个功能。MapObjiects提供一组可方便进行图上量算工具。首先记录鼠标在屏幕上点击的点,将每一点都转化为地图上的点。再按顺序把这些点存储到CMoPoints对象中。依次计算CMoPoints中相邻2点间的距离,即利用CMoPoint对象的DistanceTo方法计算出2点的距离。空间查询是一组空间目标中的定位或查找相应的目标。分为定位和范围查找2种。定位是识别所询问目标所在的区域。范围查找是检索或统计在询问域的相应空间目标。即给定鼠标点位,检索出离它最近的空间对象,并显示其属性。首先利用鼠标在屏幕上点击获得用于检索的点,将其转换为地图上的点。再构造以该点为中心,长宽各2个空间坐标单位的矩形。利用构造好的矩形结合SearchaShape方法来查询目标。
3 结语
基于MapObjects的军事标图系统为作战指挥提供地理信息和作战标图的服务功能,集成了从底图的加载、军标标绘、军标编辑及态势图的输出等一系列过程。该系统应用于某部门的标图作业,获得较好的应用效果。
如需了解更多信息,请访问 (工控网)官网 http://www.gongkong.com/