Engine中的跟踪层使用方法以及自定义图标

简介: 在跟踪层上可以实现GPS点动态跟踪,路径显示等等功能。总的来说,跟踪层是用来跟踪活动物体的。比如说下面的这个航班模拟图,飞机的运动其实是在跟踪层上实现的。

在跟踪层上可以实现GPS点动态跟踪,路径显示等等功能。总的来说,跟踪层是用来跟踪活动物体的。比如说下面的这个航班模拟图,飞机的运动其实是在跟踪层上实现的。

Engine中的跟踪层使用方法。

Engine提供了跟踪层的接口IGraphicTracker,如果要实现好像飞机那样的图标还需要用到IGraphicTrackerSymbol接口。根据Engine提供的例子GraphicTrackerMap,大概介绍下这个东西的实现方法。

 

首先要定义好相应的接口:

        

//图标。。
        public Dictionary<int, IGraphicTrackerSymbol> m_GTSymbols = null;
        //动态展示图层
        public IGraphicTracker m_graphicTracker = null;

Dictionary要添加using System.Collections.Generic;命名空间。这里写成这种形式其实是为了方便添加多个symbol。

 

其次,要初始化跟踪层和定义好图标。可以在formload中写。

           

 //初始化跟踪层
            m_graphicTracker = new GraphicTrackerClass();
            m_graphicTracker.Initialize(m_mapControl.Map as IBasicMap);
           // m_move_dist = m_mapControl.Extent.Width / 500;
            //创建符号。。
            m_GTSymbols = new Dictionary<int, IGraphicTrackerSymbol>(3);
            CreateGTSymbols();
 
      //画图标
        private void CreateGTSymbols()
        {
            if (m_graphicTracker == null)
                return;
            //1st point symbol
            IColor color = new RgbColorClass() { Red = 0, Green = 0, Blue = 255 };
            stdole.IFontDisp symbolFont = new stdole.StdFontClass() as stdole.IFontDisp;
            symbolFont.Name = "ESRI Default Marker";
            ICharacterMarkerSymbol characterMarkerSymbol = new CharacterMarkerSymbolClass();
            characterMarkerSymbol.Font = symbolFont;
            characterMarkerSymbol.Color = color;
            characterMarkerSymbol.CharacterIndex = 111;//areoplane
            characterMarkerSymbol.Size = 20.0;
            IGraphicTrackerSymbol gtSymbol1 = m_graphicTracker.CreateSymbol(characterMarkerSymbol as ISymbol, null);
            m_GTSymbols.Add(0, gtSymbol1);
            //comboSymbolID.Items.Add("Blue Pin");
        }

 

来到这里有个很关键的问题,就是跟踪层的初始化必须还得在MapReplaced事件中再来一次。这里我也不是很明白,不打开地图的时候就已经有了跟踪层,打开之后反而没了,所以必须再初始化一次。

 

然后的就是把图标写到跟踪层里,这样就显示了出来。

      

private void 测试按钮4ToolStripMenuItem_Click(object sender, EventArgs e)
       {
           //获得这个图标
           IGraphicTrackerSymbol gtSymbol = this.m_GTSymbols[0]; // get the first one
           if (gtSymbol == null)
               return;
           //添加点和图标到跟踪层
           //Add the point and symbol to the GraphicTracker
           //This returns an id that you can store in a Dictionary to use later to
           //(e.g. select from combo and highlight, change symbol, change label)
           int id = m_graphicTracker.Add(vpoint as IGeometry, gtSymbol);
           m_graphicTracker.SetLabel(id, "ID " + id.ToString());
           //m_GTGeometries.Add(id, point as IGeometry);
           timer2.Start();
       }

上面定义的timer2是用来控制动态变化的,只要改变位置,调用MoveTo方法即可。

      

 private void timer2_Tick(object sender, EventArgs e)
       {
           vpoint.X += m_move_dist;
           vpoint.Y += m_move_dist;
           double x = vpoint.X ;
           double y = vpoint.Y ;
           m_graphicTracker.MoveTo(0, x, y, 0);
       }
 

就这样,一个能够动的飞机就做出来啦。。运动的轨迹需要根据具体的需要来控制坐标。。我的最终目的是要通过时间点的坐标点来控制。。。下面是样例。。Engine中的跟踪层使用方法。



自定义图标

用的是IPictureMarkerSymbol接口,例子程序里有了一个很好的函数,我稍微改了下参数,做成了可以改变路径的了。返回值是ISymbol。

       

private ISymbol CreateStandardLogoSymbol(string m_logoPath)
       {
           IPictureMarkerSymbol pictureMarkerSymbol = new PictureMarkerSymbolClass();
           pictureMarkerSymbol.CreateMarkerSymbolFromFile(esriIPictureType.esriIPictureBitmap, m_logoPath);
           pictureMarkerSymbol.Size = 100;
           //IColor whiteTransparencyColor = ESRI.ArcGIS.ADF.Connection.Local.Converter.ToRGBColor(Color.FromArgb(255, 255, 255)) as IColor;
           //pictureMarkerSymbol.BitmapTransparencyColor = whiteTransparencyColor;
           return pictureMarkerSymbol as ISymbol;
       }

 

重新读了一下IGraphicTracker的接口说明,发现IGraphicTracker既能够接受图标,又能够创造图标。。添加用的是add,创造的话用的是CreateSymbol...很幸运的是,CreateSymbol的参数就是ISymble接口的。

于是乎,很简单的几句话就搞定了:

 

         

ISymbol mysymbol; //定义一个接口
         //调用上面的函数实例化。。
         mysymbol = CreateStandardLogoSymbol(@"E:\PROJECT\MyFirstArcEngine\MyFirstArcEngine\Image\refresh.bmp");
           //用IGraphicTracker创建IGraphicTrackerSymbol
            IGraphicTrackerSymbol gtSymbol1 = m_graphicTracker.CreateSymbol(mysymbol, null);
            m_GTSymbols.Add(0, gtSymbol1);

 

一切就顺理成章了。。不过经过实验,似乎只能支持bmp的图标,png和icon的似乎都不支持。。


目录
相关文章
|
2月前
|
前端开发 小程序
扩展uview复选组件库支持自定义图片+自定义内容
扩展uview复选组件库支持自定义图片+自定义内容
85 6
|
4月前
|
开发框架 自然语言处理 前端开发
在Winform程序中动态绘制系统名称,代替图片硬编码名称
在Winform程序中动态绘制系统名称,代替图片硬编码名称
|
7月前
|
自然语言处理 Go
LabVIEW以编程方式对Cluster移动隐藏重命名标题和大小
LabVIEW以编程方式对Cluster移动隐藏重命名标题和大小
46 3
|
7月前
Qt表格中的自定义编辑组件---------------自定义代理QStyledItemDelegate
Qt表格中的自定义编辑组件---------------自定义代理QStyledItemDelegate
84 5
|
7月前
|
JavaScript 前端开发 Java
若依框架---选中某值 其他值自动回调填充
若依框架---选中某值 其他值自动回调填充
203 0
Revit二次开发—更改激活视图(activeview)失败原因
Revit二次开发—更改激活视图(activeview)失败原因
Revit二次开发—更改激活视图(activeview)失败原因
|
前端开发 测试技术 数据库
【测试平台开发】十七、接口编辑页面实现下拉级联选择,绑定接口所属模块
【测试平台开发】十七、接口编辑页面实现下拉级联选择,绑定接口所属模块
【测试平台开发】十七、接口编辑页面实现下拉级联选择,绑定接口所属模块
VS Code项目中共享自定义的代码片段方案
VS Code项目中共享自定义的代码片段方案
|
XML Android开发 数据格式
【PageLayout】非常简单的一键切换加载-空数据-错误页,支持自定义
版权声明:本文为博主原创文章,转载请标明出处。 https://blog.csdn.net/lyhhj/article/details/82594706 项目中我们经常会用到的加载数据,加载完数据后显示内容,如果没有数据显示一个空白页,这是如果网络错误了显示一个网络错误页,自定义一个PageLayout。
1167 0