MapXtreme 2005学习(6):两种方法实现动态轨迹

摘要:
图层表名称<初始点坐标<DPoint firstPoint){MapInfo.Mapping.MapmyMap=MapInfo.Engine.Session.Current.MapFactory[MapControl1.MapAlias];

在GIS中,动态轨迹的实现是非常有用的,可用GPS定位,热点跟踪等。在本例中,先创建一个用于呈现动态轨迹的临时图层,并在图层上添加一个点表示位体的位置。代码如下:

MapXtreme 2005学习(6):两种方法实现动态轨迹第1张MapXtreme 2005学习(6):两种方法实现动态轨迹第2张    /**//// <summary>
MapXtreme 2005学习(6):两种方法实现动态轨迹第3张    
/// 创建动态轨迹图层
MapXtreme 2005学习(6):两种方法实现动态轨迹第3张    
/// Glacier
MapXtreme 2005学习(6):两种方法实现动态轨迹第3张    
/// 2008年8月7日
MapXtreme 2005学习(6):两种方法实现动态轨迹第3张    
/// <param name="trackLayerTableName">图层表名</param>
MapXtreme 2005学习(6):两种方法实现动态轨迹第3张    
/// <param name="trackLayerName">图层名</param>
MapXtreme 2005学习(6):两种方法实现动态轨迹第3张    
/// <param name="firstPoint">点初始坐标</param>
MapXtreme 2005学习(6):两种方法实现动态轨迹第9张    
/// </summary>

MapXtreme 2005学习(6):两种方法实现动态轨迹第10张    protected void CreateTrackLayer(string trackLayerTableName, string trackLayerName, DPoint firstPoint)
MapXtreme 2005学习(6):两种方法实现动态轨迹第1张MapXtreme 2005学习(6):两种方法实现动态轨迹第2张    
MapXtreme 2005学习(6):两种方法实现动态轨迹第13张{
MapXtreme 2005学习(6):两种方法实现动态轨迹第3张        MapInfo.Mapping.Map myMap 
= MapInfo.Engine.Session.Current.MapFactory[MapControl1.MapAlias];
MapXtreme 2005学习(6):两种方法实现动态轨迹第3张
MapXtreme 2005学习(6):两种方法实现动态轨迹第3张        
//创建临时图层
MapXtreme 2005学习(6):两种方法实现动态轨迹第3张
        MapInfo.Data.TableInfoMemTable tblInfoTemp = new MapInfo.Data.TableInfoMemTable(trackLayerTableName);
MapXtreme 2005学习(6):两种方法实现动态轨迹第3张        MapInfo.Data.Table tblTemp 
= MapInfo.Engine.Session.Current.Catalog.GetTable(trackLayerTableName);
MapXtreme 2005学习(6):两种方法实现动态轨迹第3张        
if (tblTemp != null)
MapXtreme 2005学习(6):两种方法实现动态轨迹第20张MapXtreme 2005学习(6):两种方法实现动态轨迹第21张        
MapXtreme 2005学习(6):两种方法实现动态轨迹第13张{
MapXtreme 2005学习(6):两种方法实现动态轨迹第3张            MapInfo.Engine.Session.Current.Catalog.CloseTable(trackLayerTableName);
MapXtreme 2005学习(6):两种方法实现动态轨迹第24张        }

MapXtreme 2005学习(6):两种方法实现动态轨迹第3张
MapXtreme 2005学习(6):两种方法实现动态轨迹第3张        tblInfoTemp.Columns.Add(MapInfo.Data.ColumnFactory.CreateFeatureGeometryColumn(myMap.GetDisplayCoordSys()));
MapXtreme 2005学习(6):两种方法实现动态轨迹第3张        tblInfoTemp.Columns.Add(MapInfo.Data.ColumnFactory.CreateStyleColumn());
MapXtreme 2005学习(6):两种方法实现动态轨迹第3张        tblTemp 
= MapInfo.Engine.Session.Current.Catalog.CreateTable(tblInfoTemp);
MapXtreme 2005学习(6):两种方法实现动态轨迹第3张
MapXtreme 2005学习(6):两种方法实现动态轨迹第3张        FeatureLayer workLayer 
= new FeatureLayer(tblTemp, AnimationLayerName, AnimationLayerName);
MapXtreme 2005学习(6):两种方法实现动态轨迹第3张        myMap.Layers.Add(workLayer);
MapXtreme 2005学习(6):两种方法实现动态轨迹第3张
MapXtreme 2005学习(6):两种方法实现动态轨迹第3张        
//向临时图层中添加初始点
MapXtreme 2005学习(6):两种方法实现动态轨迹第3张
        FeatureGeometry pfg = new MapInfo.Geometry.Point(workLayer.CoordSys, firstPoint.x, firstPoint.y) as FeatureGeometry;
MapXtreme 2005学习(6):两种方法实现动态轨迹第3张        MapInfo.Styles.CompositeStyle cstyle 
= new MapInfo.Styles.CompositeStyle(new MapInfo.Styles.SimpleVectorPointStyle(52, System.Drawing.Color.Blue, 30));
MapXtreme 2005学习(6):两种方法实现动态轨迹第3张
MapXtreme 2005学习(6):两种方法实现动态轨迹第3张        MapInfo.Data.Feature pft 
= new MapInfo.Data.Feature(tblTemp.TableInfo.Columns);
MapXtreme 2005学习(6):两种方法实现动态轨迹第3张        pft.Geometry 
= pfg;
MapXtreme 2005学习(6):两种方法实现动态轨迹第3张        pft.Style 
= cstyle;
MapXtreme 2005学习(6):两种方法实现动态轨迹第3张        workLayer.Table.InsertFeature(pft);
MapXtreme 2005学习(6):两种方法实现动态轨迹第9张    }

实现动态轨迹的第一种方法是,对原来点的坐标的位置进行偏移,从实现位置的更新。代码如下:

MapXtreme 2005学习(6):两种方法实现动态轨迹第1张MapXtreme 2005学习(6):两种方法实现动态轨迹第2张  /**//// <summary>
MapXtreme 2005学习(6):两种方法实现动态轨迹第3张    
/// 把原来的点偏移到新的位置以实现动态轨迹
MapXtreme 2005学习(6):两种方法实现动态轨迹第3张    
/// Glacier
MapXtreme 2005学习(6):两种方法实现动态轨迹第3张    
/// 2008年8月7日
MapXtreme 2005学习(6):两种方法实现动态轨迹第3张    
/// <param name="trackLayerTableName">图层表名</param>
MapXtreme 2005学习(6):两种方法实现动态轨迹第3张    
/// <param name="newPoint">点的新坐标</param>
MapXtreme 2005学习(6):两种方法实现动态轨迹第9张    
/// </summary>

MapXtreme 2005学习(6):两种方法实现动态轨迹第10张    protected void UpdateTrack(string trackLayerTableName, DPoint newPoint)
MapXtreme 2005学习(6):两种方法实现动态轨迹第1张MapXtreme 2005学习(6):两种方法实现动态轨迹第2张    
MapXtreme 2005学习(6):两种方法实现动态轨迹第13张{
MapXtreme 2005学习(6):两种方法实现动态轨迹第3张        MapInfo.Data.Table altb 
= MapInfo.Engine.Session.Current.Catalog.GetTable(trackLayerTableName);
MapXtreme 2005学习(6):两种方法实现动态轨迹第3张        
if (altb == null)
MapXtreme 2005学习(6):两种方法实现动态轨迹第20张MapXtreme 2005学习(6):两种方法实现动态轨迹第21张        
MapXtreme 2005学习(6):两种方法实现动态轨迹第13张{
MapXtreme 2005学习(6):两种方法实现动态轨迹第3张            
return;
MapXtreme 2005学习(6):两种方法实现动态轨迹第24张        }

MapXtreme 2005学习(6):两种方法实现动态轨迹第3张
MapXtreme 2005学习(6):两种方法实现动态轨迹第3张        
//Change the positon of the existed feature.
MapXtreme 2005学习(6):两种方法实现动态轨迹第3张
        SearchInfo si = MapInfo.Data.SearchInfoFactory.SearchWhere("");
MapXtreme 2005学习(6):两种方法实现动态轨迹第3张        Feature ftr 
= MapInfo.Engine.Session.Current.Catalog.SearchForFeature(altb, si);
MapXtreme 2005学习(6):两种方法实现动态轨迹第3张        
if (ftr == null)
MapXtreme 2005学习(6):两种方法实现动态轨迹第20张MapXtreme 2005学习(6):两种方法实现动态轨迹第21张        
MapXtreme 2005学习(6):两种方法实现动态轨迹第13张{
MapXtreme 2005学习(6):两种方法实现动态轨迹第3张            
return;
MapXtreme 2005学习(6):两种方法实现动态轨迹第24张        }

MapXtreme 2005学习(6):两种方法实现动态轨迹第3张        DPoint offsetPoint 
= new DPoint(newPoint.x - ftr.Geometry.Centroid.x, newPoint.y - ftr.Geometry.Centroid.y);
MapXtreme 2005学习(6):两种方法实现动态轨迹第3张        ftr.Geometry.GetGeometryEditor().OffsetByXY(offsetPoint.x, offsetPoint.y, DistanceUnit.Degree, DistanceType.Spherical);
MapXtreme 2005学习(6):两种方法实现动态轨迹第3张        ftr.Geometry.EditingComplete();
MapXtreme 2005学习(6):两种方法实现动态轨迹第3张        ftr.Update();
MapXtreme 2005学习(6):两种方法实现动态轨迹第9张    }

实现动态轨迹的第二种方法是,先删除原有的点,再在新的位置添加一个新点。因为第一种方法求偏移过程中可能会产生误差,并且这种误差是会积累的。而这种方法相对来说会比较精确一点。代码如下:

MapXtreme 2005学习(6):两种方法实现动态轨迹第1张MapXtreme 2005学习(6):两种方法实现动态轨迹第2张   /**//// <summary>
MapXtreme 2005学习(6):两种方法实现动态轨迹第3张    
/// 把删除原有点并向图层中添加新点以实现动态轨迹
MapXtreme 2005学习(6):两种方法实现动态轨迹第3张    
/// Glacier
MapXtreme 2005学习(6):两种方法实现动态轨迹第3张    
/// 2008年8月7日
MapXtreme 2005学习(6):两种方法实现动态轨迹第3张    
/// <param name="trackLayerTableName">图层表名</param>
MapXtreme 2005学习(6):两种方法实现动态轨迹第3张    
/// <param name="newPoint">点的新坐标</param>
MapXtreme 2005学习(6):两种方法实现动态轨迹第9张    
/// </summary>

MapXtreme 2005学习(6):两种方法实现动态轨迹第10张    protected void UpdateTrack(string trackLayerTableName, DPoint newPoint)
MapXtreme 2005学习(6):两种方法实现动态轨迹第1张MapXtreme 2005学习(6):两种方法实现动态轨迹第2张    
MapXtreme 2005学习(6):两种方法实现动态轨迹第13张{
MapXtreme 2005学习(6):两种方法实现动态轨迹第3张        MapInfo.Data.Table altb 
= MapInfo.Engine.Session.Current.Catalog.GetTable(trackLayerTableName);
MapXtreme 2005学习(6):两种方法实现动态轨迹第3张        
if (altb == null)
MapXtreme 2005学习(6):两种方法实现动态轨迹第20张MapXtreme 2005学习(6):两种方法实现动态轨迹第21张        
MapXtreme 2005学习(6):两种方法实现动态轨迹第13张{
MapXtreme 2005学习(6):两种方法实现动态轨迹第3张            
return;
MapXtreme 2005学习(6):两种方法实现动态轨迹第24张        }

MapXtreme 2005学习(6):两种方法实现动态轨迹第3张
MapXtreme 2005学习(6):两种方法实现动态轨迹第3张        
//Delete the existed feature and create a new one.
MapXtreme 2005学习(6):两种方法实现动态轨迹第3张
        SearchInfo si = MapInfo.Data.SearchInfoFactory.SearchWhere("");
MapXtreme 2005学习(6):两种方法实现动态轨迹第3张        Feature dftr 
= MapInfo.Engine.Session.Current.Catalog.SearchForFeature(altb, si);
MapXtreme 2005学习(6):两种方法实现动态轨迹第3张        
if (dftr == null)
MapXtreme 2005学习(6):两种方法实现动态轨迹第20张MapXtreme 2005学习(6):两种方法实现动态轨迹第21张        
MapXtreme 2005学习(6):两种方法实现动态轨迹第13张{
MapXtreme 2005学习(6):两种方法实现动态轨迹第3张            
return;
MapXtreme 2005学习(6):两种方法实现动态轨迹第24张        }

MapXtreme 2005学习(6):两种方法实现动态轨迹第3张        altb.DeleteFeature(dftr);
MapXtreme 2005学习(6):两种方法实现动态轨迹第3张        MapInfo.Mapping.Map myMap 
= MapInfo.Engine.Session.Current.MapFactory[MapControl1.MapAlias];
MapXtreme 2005学习(6):两种方法实现动态轨迹第3张        FeatureGeometry pfg 
= new MapInfo.Geometry.Point(myMap.GetDisplayCoordSys(), new DPoint(newPoint.x, newPoint.y)) as FeatureGeometry;
MapXtreme 2005学习(6):两种方法实现动态轨迹第3张        MapInfo.Styles.CompositeStyle cstyle 
= new MapInfo.Styles.CompositeStyle(new MapInfo.Styles.SimpleVectorPointStyle(52, System.Drawing.Color.Blue, 30));
MapXtreme 2005学习(6):两种方法实现动态轨迹第3张
MapXtreme 2005学习(6):两种方法实现动态轨迹第3张        MapInfo.Data.Feature pft 
= new MapInfo.Data.Feature(altb.TableInfo.Columns);
MapXtreme 2005学习(6):两种方法实现动态轨迹第3张        pft.Geometry 
= pfg;
MapXtreme 2005学习(6):两种方法实现动态轨迹第3张        pft.Style 
= cstyle;
MapXtreme 2005学习(6):两种方法实现动态轨迹第3张        altb.InsertFeature(pft);
MapXtreme 2005学习(6):两种方法实现动态轨迹第9张    }

免责声明:文章转载自《MapXtreme 2005学习(6):两种方法实现动态轨迹》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇Mongodb 笔记03 查询、索引浅谈pipreqs组件(自动生成需要导入的模块信息) 和 virtualenv(虚拟环境)下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

了解动态链接(五)—— 动态符号表

ilocker:关注 Android 安全(新入行,0基础) QQ: 2597294287 动态符号表 (.dynsym) 用来保存与动态链接相关的导入导出符号,不包括模块内部的符号。而 .symtab 则保存所有符号,包括 .dynsym 中的符号。 动态符号表中所包含的符号的符号名保存在动态符号字符串表 .dynstr 中。 使用 readelf 查看...

【物联网智能网关13】Html5:Canvas+WebSocket实现远程实时通信(上)

在上一篇博文《网关为核心,互联网为基础构建物联网平台》中简要介绍了基于.NET Micro Framework如何构建Web Server应用,本篇文章将基于Html5的Canvas和WebSocket技术详细介绍远程实时通信的实现。 无论是windows还是linux平台都已提供现成的Web Server技术,在服务端支持诸如ASP.net、ASP、PH...

CComboBox 下拉列表高度调整

CComboBox 控件的下拉列表的高度默认很小,很难看。网上查来查去终于发现如何设置。 很巧妙,要在设计视图上单击下拉列表的小箭头。这时会发现出来的边框和点其它的位置是不同的。 这个高度就是下拉列表的不出现滚动条的高度。把这个框拖下去一些就解决问题了. 希望对和我遇到同样问题的同学有所帮助。...

halcon之屌炸天的变形匹配(1)

在日常工程应用中,我们通常通过halcon的 shape-based matching(形状匹配)进行各种定位, 如以前文章介绍的这样,理解各个参数并灵活应用通常就能得到很好的匹配效果和匹配速度, 当待匹配物体有轻微变形时,并不影响得到的匹配结果,然后当待匹配物体有较大变形时,如 塑料产品在成形时变形、纺织产品的花纹因为褶皱变形等,要想得到精确的定位结果就...

C#-将控件动态添加到选项卡页tablepage

tabPage1.Controls.Add(new Button()); 实例: Button cp = new Button(); cp.text="test";cp.Click += Ckick1;p1.Controls.Add cp;cp.left=10;cp.top=10;cp.Visible=true;...

常用软件开发工具

1、建模工具: Rational Rose、Requisite、Borland Together、Sybase PowerDesigner、Microsoft Visio、Anylogic、PlayCase、CA BPWin、CA ERWin、Oracle Designer、MagicDraw UML、StartUML、ArgoUML、Visual UML...