TE二次开发:风向风力符号标绘

简介: skyline的桌面端二次开发,实现风向风力符号标绘

在做相关气象的系统开发时,会碰到相关风向标的符号标绘要求,在地图的指定位置标绘符号,形象的描述风向和风力。

可以采用做图标的方式,要把各种风力的图片都做全,还要根据风向,旋转图片的角度。

另一种是通过在地图上画线,把线拼接在一起,达到风向标的效果,下边说一下这种实现的方式。

一般来说,风吹的方向,就是风向标的尾部朝向,风力用基础线上的几道杠表示,不够一个等级,用半长的线,在观看范围比较大的情况下,线的长度还是要画的比较长。

具体的实现代码如下(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"); 

        }

以下是标绘的效果图:
image.png

相关文章
|
2月前
|
存储 传感器 编解码
中科星图——MOD11A1 V6数据集(Terra星搭载的中分辨率成像光谱仪获取的地表温度/发射率(LST/E)产品)
中科星图——MOD11A1 V6数据集(Terra星搭载的中分辨率成像光谱仪获取的地表温度/发射率(LST/E)产品)
55 5
|
2月前
|
编解码 人工智能
中科星图——MOD11A1 V6是由Aqua中分辨率成像光谱仪获取的地表温度/发射率(LST/E)数据集
中科星图——MOD11A1 V6是由Aqua中分辨率成像光谱仪获取的地表温度/发射率(LST/E)数据集
42 1
|
编解码 算法 ice
Google Earth Engine ——MCD19A2 V6数据产品是MODIS Terra和Aqua结合的大气校正多角度实施(MAIAC)陆地气溶胶光学深度(AOD)网格化2级产品,1公里分辨率
Google Earth Engine ——MCD19A2 V6数据产品是MODIS Terra和Aqua结合的大气校正多角度实施(MAIAC)陆地气溶胶光学深度(AOD)网格化2级产品,1公里分辨率
750 0
Google Earth Engine ——MCD19A2 V6数据产品是MODIS Terra和Aqua结合的大气校正多角度实施(MAIAC)陆地气溶胶光学深度(AOD)网格化2级产品,1公里分辨率
|
编解码 ice
Google Earth Engine——NOAA气候数据记录(CDR)的AVHRR叶面积指数(LAI)和吸收光合有效辐射的部分(FAPAR)数据集包含描述植物冠层和光合活动的衍生值
Google Earth Engine——NOAA气候数据记录(CDR)的AVHRR叶面积指数(LAI)和吸收光合有效辐射的部分(FAPAR)数据集包含描述植物冠层和光合活动的衍生值
516 0
Google Earth Engine——NOAA气候数据记录(CDR)的AVHRR叶面积指数(LAI)和吸收光合有效辐射的部分(FAPAR)数据集包含描述植物冠层和光合活动的衍生值
|
2月前
|
5G
A-B罗克韦尔 5069-OB16 紧凑型5000分立输出模块
A-B罗克韦尔 5069-OB16 紧凑型5000分立输出模块
|
2月前
|
监控 新能源
明纬SHP-30K 系列重磅上线:30KW 三相三线式工业级标准电源
明纬是全球标准电源的领导品牌,最近推出了备受期待的SHP-30K系列机箱式超高瓦数标准电源。
|
2月前
|
传感器 机器人
|
2月前
|
传感器
|
编解码 Java BI
高精度10m/30米NPP净初级生产力分布数据
高精度10m/30米NPP净初级生产力分布数据
高精度10m/30米NPP净初级生产力分布数据