基于SuperMap Object.NET的二三维一体化态势标绘系统研究与应用

2014-04-29 01:12王洪昌刘禹鑫
安徽农业科学 2014年26期
关键词:森林防火

王洪昌 刘禹鑫

摘要 态势标绘指在地图背景上标绘各种具有空间特征的事、物的分布状态或行动部署。给出了态势标绘系统中实现各种标绘符号算法的关键技术,提出并实现了基于SuperMap Object.NET的二三维一体化态势标绘系统的集成应用,并将成果成功应用于黑龙江省森林防火电子沙盘指挥系统中,有效提高了系统态势标绘的表现效果。

关键词 态势标绘;SuperMap Object.NET;二三维一体化;森林防火

中图分类号 S126 文献标识码 A 文章编号 0517-6611(2014)26-09222-03

Research and Application of Two or Three Dimensional Integration Posture Plotting System Based on SuperMap Object.NET

WANG Hong-chang et al

(Heilongjiang Geomatics Center of State Bureau of Surveying and Mapping, Harbin, Heilongjiang 150081)

Abstract Posture plotting means to mark various spatial phenomena and objects on a map to describe some events or object distribution. This paper gives a key technology of algorithm to realize various plotting symbol in posture plotting system, propose and realize the application of two or three dimensional integration with posture plotting system based on SuperMap Object.NET, and the achievement is successful used for Heilongjiang Province forest-fire prevention electronic sand table command system, improves the performance effect of posture plotting in system.

Key words Posture plotting; SuperMap Object.NET; Two or three dimensional integration; Forest-fire prevention

態势标绘系统是地理信息系统中应具备的基本功能,是指在地图背景上标绘各种具有空间特征的事、物的分布状态或行动部署[1]。目前,在国内外优秀的GIS软件系统中,如ArcGIS、SuperMap等,都对态势标绘提供了基本的开发接口,但态势标绘符号种类繁多,如商文俊等归纳起来一共分为5类:基本图元、态势区域、态势箭头、级别、象形符号[1]。传统GIS软件提供的开发接口不能完全满足开发需要,在实现诸如态势区域、态势箭头、引线标注等复杂标绘符号时还存在一定的困难,该研究给出了相关实现复杂标绘符号的具体实现算法。

此外,二维GIS技术历经了一个比较长的发展过程,目前所能实现的功能都趋于稳定和完善;而三维GIS技术已成为当前GIS技术发展的潮流,引领着新一代GIS技术和应用的巨大变革。虽然当前三维GIS发展迅速,但也存在着许多的应用缺陷,尤其在数据上,三维GIS与二维GIS存在数据不兼容的状况,在应用上往往是二维一套数据而三维一套数据,造成了数据的严重冗余,加大了系统在开发、更新和维护上的难度[2-3]。SuperMap Object.NET提供的二三维一体化技术解决了GIS系统二维与三维中数据不兼容的问题。为此,笔者在SuperMap Object.NET基础实现了态势标绘系统的二三维数据一体化应用。

1 SuperMap Object.NET 介绍

SuperMap Object.NET是超图公司开发的GIS系列软件中的基础桌面开发平台,目前最新的版本是SuperMap iObjects.NET 7C。 利用SuperMap Object.NET用户能够简单快捷地在各种应用系统中嵌入地图应用功能,大大增强了应用系统的可操作度和空间分析能力[4]

SuperMap Object.NET提供的二三维一体化技术体系能保证二维与三维GIS技术的无缝融合,包括二维与三维在数据模型、数据存储方案、数据管理、符号、可视化和分析功能的一体化,提供海量二维数据直接在三维场景中的高性能可视化、二维分析功能在三维场景中的直接操作和越来越丰富的三维分析功能。其突破了单纯的三维只能查一查、看一看的瓶颈,推动三维GIS升华为面向业务管理和辅助决策的深度应用。该研究采用SuperMap Object.NET提供的二三维一体化技术解决了态势标绘系统中数据不统一的问题,实现态势标绘系统中各标绘符号在二维系统和三维系统在数据存储、符号、可视化的全面统一。

2 态势标绘系统符号具体实现

态势标绘目前在国内外研究的技术比较多,如罗光成提出的军标图形运动航迹平滑处理方法研究[5],钱红林等虚拟战场环境三维可视化关键技术研究[6-7],张欣等提出的战场态势推演GIS动态表达技术与应用[8]等。该研究主要给出态势标绘系统复杂符号绘制的关键技术及算法。

2.1 基本图元符号

基本图元指简单的点、线、面等要素对象。这些要素对象的绘制在大多数GIS平台(如ArcGIS、SuperMap)中都有接口提供,所要指出的是在绘制完成后需要对要素对象进行符号化处理并且能对单个要素进行个性化符号定制,在GIS平台中普通图层一般是对整个图层的所有要素对象进行符号化定制,不能对单个要素对象进行符号化定制,可以采用专题图方式解决这个问题,例如ArcGIS、SuperMap等平台提供的单值专题图方式,或SuperMap平台提供的自定义专题图等。

2.2 态势区域

态势区域是指具有空间特征的事、物的分布状态在地域上的发展趋势。在态势标绘系统中态势区域往往是不规则的要素面对象,可以用简单的闭合线或面对象代表态势区域对象,这些对象的绘制与符号化方式与基本图元的绘制和符号化方式相同。该研究主要介绍汇聚区域的绘制方式,汇聚区域是指形如图1所示的符号要素,它用来表示具有空间特征的事、物的集中分布状态。该要素绘制的核心算法如下所示(采用C#语言):

double distance=PlotHelper.distance(startPnt,endPnt);

Point2D midPnt = PlotHelper.getMidPoint(startPnt,endPnt);

Point2D pnt1 = PlotHelper.getThirdPoint(startPnt,midPnt,Math.PI * 1.5,distance / 4.5,PlotHelper.RIGHT_SIDE);

Point2D pnt20 = PlotHelper.getThirdPoint(startPnt,endPnt,0,distance * 0.8,PlotHelper.LEFT_SIDE);

Point2D pnt21 = PlotHelper.getThirdPoint(startPnt,pnt20,Math.PI * 1.5,distance / 5,PlotHelper.LEFT_SIDE);

Point2D pnt30 = PlotHelper.getThirdPoint(startPnt,endPnt,0,distance * 0.45,PlotHelper.LEFT_SIDE);

Point2D pnt3 = PlotHelper.getThirdPoint(startPnt,pnt30,Math.PI * 1.5,distance / 10,PlotHelper.LEFT_SIDE);

Point2D pnt40 = PlotHelper.getThirdPoint(startPnt,endPnt,0,distance * 0.15,PlotHelper.LEFT_SIDE);

Point2D pnt41 = PlotHelper.getThirdPoint(startPnt,pnt40,Math.PI * 1.5,distance / 7,PlotHelper.LEFT_SIDE);

List controlPnts = new List();

controlPnts.Add(startPnt);controlPnts.Add(pnt1);

controlPnts.Add(endPnt);controlPnts.Add(pnt41);

controlPnts.Add(pnt3);controlPnts.Add(pnt21);

List place = PlotHelper.getAdvancedBezierPoints(controlPnts);

2.3 態势箭头

态势箭头用来表示目标对象的行进轨迹或移动路线。态势箭头从源地指向目的地,通常情况下不是直线,而是拥有不同弧度的曲线箭头。因此态势箭头的绘制要满足用户的实时形变要求。按照形状分类,态势箭头可分为简单箭头、燕尾箭头、双箭头和多箭头等(图2)。这几类箭头绘制的核心算法基本相同,下面给出具体的核心算法。

List points = new List();

points.AddRange(inpoints);

List arrowPoints = getArrowHeadPoints(points,headHeightFactor,headWidthFactor,neckHeightFactor,neckWidthFactor);

Point2D neckLeftPoint = arrowPoints[0];

Point2D neckRightPoint = arrowPoints[4];

List bodyPoints = getArrowBodyPoints(points,neckLeftPoint,neckRightPoint,tailWidthFactor);

List tailPoints = getArrowTailPoints(points,tailWidthFactor,hasSwallowTail,swallowTailFactor);

Point2D tailLeftPoint = tailPoints[0];

Point2D swallowTailPoint = tailPoints.Count == 3 ? tailPoints[1]: new

Point2D((tailPoints[0].X+tailPoints[1].X)/2,(tailPoints[0].Y+tailPoints[1].Y)/2);

Point2D tailRightPoint = tailPoints.Count == 3 ? tailPoints[2] : tailPoints[1];

int n=bodyPoints.Count;

List lPoints = bodyPoints.GetRange(0,n / 2);

List rPoints = bodyPoints.GetRange(n / 2,n - n / 2);

lPoints.Add(neckLeftPoint);rPoints.Add(neckRightPoint);

lPoints.Reverse();lPoints.Add(tailLeftPoint);rPoints.Reverse();

rPoints.Add(tailRightPoint);lPoints.Add(swallowTailPoint);

rPoints.Add(swallowTailPoint);lPoints.Reverse();

lPoints.AddRange(arrowPoints);lPoints.AddRange(rPoints);

2.4 引线标注

引线标注指形如图3所示的符号要素。它主要用来对目标对象进行文字的辅助说明,如对作战指挥的兵力部署、救援队伍的详细信息、标志性建筑物等信息进行说明等。引线标注绘制的具体算法如下所示。

Point2Ds sopts = new Point2Ds();

Point2D topLeftPoint = new Point2D(rect.Left,rect.Top);

Point2D bottomRightPoint = new Point2D(rect.Right,rect.Bottom);

Point2D topRightPoint = new Point2D(bottomRightPoint.X,topLeftPoint.Y);

Point2D bottomLeftPoint = new Point2D(topLeftPoint.X,bottomRightPoint.Y);

Point2D bottomCenterPoint = new Point2D();

Point2D bottomHCenterPoint = new Point2D();

Point2D corePoint = new Point2D();

bottomCenterPoint.X =(bottomLeftPoint.X + bottomRightPoint.X)/ 2;

bottomCenterPoint.Y =(bottomLeftPoint.Y + bottomRightPoint.Y)/ 2;

bottomHCenterPoint.X =(bottomCenterPoint.X + bottomRightPoint.X)/ 2;

bottomHCenterPoint.Y =(bottomCenterPoint.Y + bottomRightPoint.Y)/ 2;

corePoint.X = bottomRightPoint.X;

corePoint.Y = 2 * bottomRightPoint.Y - topRightPoint.Y;

sopts.Add(bottomLeftPoint);sopts.Add(topLeftPoint);

sopts.Add(topRightPoint);sopts.Add(bottomRightPoint);

sopts.Add(bottomHCenterPoint);sopts.Add(corePoint);

sopts.Add(bottomCenterPoint);

GeoRegion region = new GeoRegion();

region.AddPart(sopts);

引线标注在绘制完成后,还需要能够对其所在的位置进行拖拽,使其能精确地指向需要文字说明的空间对象,这需要实时根据图4所示的锚点和中心点的相对位置关系重塑引线标注符号的空间形状。图4中锚点和中心点的空间位置关系按照平面坐标可分为8个位置区域,在每个不同的位置区域中,需要重新绘制引线标注对象。

4 结语

该研究基于SuperMap Object.NET平台,通过其提供的二维一体化技术,给出了态势标绘中几类标绘符号绘制的思路和具体算法,并将其成功应用于黑龙江省森林防火电子沙盘指挥系统中,为火灾扑救提供了辅助决策支持。相信随着科学技术的不断推进和发展,态势标绘系统也将不断改进和升级,并且将应用于更多的行业中。

参考文献

[1] 商文俊.基于SuperMap Object的地图标绘系统的设计实现[J].电脑知识与技术,2008,10(28): 137-139.

[2] 陈鹏,林鸿,张鹏程,等.基于SuperMap 6R技术的二三维一体化研究[J].测绘,2011,4(2):51-53.

[3] 吴创奇.基于SuperMap的二三位一体化的WebGIS系统开发[J].科技创新导报,2011(21):23.

[4] 施峰,王宏图,代纪元,等.基于SuperMap的区县矿产资源规划数据库系统研究[J].测绘与空间地理信息,2013(2):94-95.

[5] 罗光成,杨日杰.军标图形运动航迹平滑处理方法研究[J].指挥控制与仿真,2011,33(4):87-89.

[6]

钱红林,陈国华,周雯雯.虚拟战场环境三维可视化关键技术研究[J].装备 学院学报,2013,24(4):82-83.

[7] 陶留锋,邢廷炎,吕建军.基于BlazeDS 推技术的即时协同标绘系统[J].计算机应用与软件,2013,30(9):104-105.

[8] 張欣,张立立,曹国峰,等.战场态势推演GIS动态表达技术与应用[J].地球信息科学,2006,8(4):81-82.

猜你喜欢
森林防火
林业资源保护和森林防火管理措施探讨
西海子管护站森林防火工作措施
关于营林技术在森林防火中的应用研究
浙江天台县森林防火现状及预防对策