这篇文章将为大家详细讲解有关TE二次开发中如何实现风向风力符号标绘,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。
在做相关气象的系统开发时,会碰到相关风向标的符号标绘要求,在地图的指定位置标绘符号,形象的描述风向和风力。
可以采用做图标的方式,要把各种风力的图片都做全,还要根据风向,旋转图片的角度。
另一种是通过在地图上画线,把线拼接在一起,达到风向标的效果,下边说一下这种实现的方式。
一般来说,风吹的方向,就是风向标的尾部朝向,风力用基础线上的几道杠表示,不够一个等级,用半长的线,在观看范围比较大的情况下,线的长度还是要画的比较长。
具体的实现代码如下(C#)版:
//_pos1为风向标的位置,_level为风力
void DrawIcon(IPosition70 _pos1, double _level)
{
IPosition70 _aiPos;
ITerrainPolyline70 _cPolyline;
double[] _arr;
ILineString _cRing;
//根据等级计算出几道风力杠
double _cValue = Math.Ceiling(_level);
for (double ile = 0; ile < _cValue; ile++)
{
//先按照风向移动距离
_aiPos = _pos1.Move(8000 * ile, _pos1.Yaw, 0);
if ((_level - 1 - ile) >= 0)
{
//够一级风力的情况下
//以风向的角度旋转120度,画出来风力的方向
var _aiPos1 = _aiPos.Move(20000, _pos1.Yaw + 120, 0);
_arr = new double[] { _aiPos.X, _aiPos.Y, 1000, _aiPos1.X, _aiPos1.Y, 1000 };
//两点拼出来一条直线
_cRing = _sgworld.Creator.GeometryCreator.CreateLineStringGeometry(_arr);
_cPolyline = _sgworld.Creator.CreatePolyline(_cRing, 0xff0000ff, AltitudeTypeCode.ATC_TERRAIN_RELATIVE, string.Empty, "100k500");
}
else
{
//不够一级风力的情况下
//以风向的角度旋转120度,画出来半个风力的方向
var _aiPos1 = _aiPos.Move(20000 * 0.5, _pos1.Yaw + 120, 0);
_arr = new double[] { _aiPos.X, _aiPos.Y, 1000, _aiPos1.X, _aiPos1.Y, 1000 };
_cRing = _sgworld.Creator.GeometryCreator.CreateLineStringGeometry(_arr);
_cPolyline = _sgworld.Creator.CreatePolyline(_cRing, 0xff0000ff, AltitudeTypeCode.ATC_TERRAIN_RELATIVE, string.Empty, "100k500");
}
}
//移动距离画出来风向标的横柄线
_aiPos = _pos1.Move(40000, _pos1.Yaw, 0);
_arr = new double[] { _pos1.X, _pos1.Y, 1000, _aiPos.X, _aiPos.Y, 1000 };
_cRing = _sgworld.Creator.GeometryCreator.CreateLineStringGeometry(_arr);
_cPolyline = _sgworld.Creator.CreatePolyline(_cRing, 0xff0000ff, AltitudeTypeCode.ATC_TERRAIN_RELATIVE, string.Empty, "100k500");
}
以下是标绘的效果图:
关于“TE二次开发中如何实现风向风力符号标绘”这篇文章就分享到这里了,希望以上内容可以对大家有一定的帮助,使各位可以学到更多知识,如果觉得文章不错,请把它分享出去让更多的人看到。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。