`

两种方法实现动态轨迹

 
阅读更多
在GIS中,动态轨迹的实现是非常有用的,可用GPS定位,热点跟踪等。在本例中,先创建一个用于呈现动态轨迹的临时图层,并在图层上添加一个点表示位体的位置。代码如下:
复制内容到剪贴板
代码:
/**//// <summary>
/// 创建动态轨迹图层
/// 2008年8月7日
/// <param name="trackLayerTableName">图层表名</param>
/// <param name="trackLayerName">图层名</param>
/// <param name="firstPoint">点初始坐标</param>
/// </summary>
protected void CreateTrackLayer(string trackLayerTableName, string trackLayerName, DPoint firstPoint)
{
MapInfo.Mapping.Map myMap = MapInfo.Engine.Session.Current.MapFactory[MapControl1.MapAlias];

//创建临时图层
MapInfo.Data.TableInfoMemTable tblInfoTemp = new MapInfo.Data.TableInfoMemTable(trackLayerTableName);
MapInfo.Data.Table tblTemp = MapInfo.Engine.Session.Current.Catalog.GetTable(trackLayerTableName);
if (tblTemp != null)
{
MapInfo.Engine.Session.Current.Catalog.CloseTable(trackLayerTableName);
}

tblInfoTemp.Columns.Add(MapInfo.Data.ColumnFactory.CreateFeatureGeometryColumn(myMap.GetDisplayCoordSys()));
tblInfoTemp.Columns.Add(MapInfo.Data.ColumnFactory.CreateStyleColumn());
tblTemp = MapInfo.Engine.Session.Current.Catalog.CreateTable(tblInfoTemp);

FeatureLayer workLayer = new FeatureLayer(tblTemp, AnimationLayerName, AnimationLayerName);
myMap.Layers.Add(workLayer);

//向临时图层中添加初始点
FeatureGeometry pfg = new MapInfo.Geometry.Point(workLayer.CoordSys, firstPoint.x, firstPoint.y) as FeatureGeometry;
MapInfo.Styles.CompositeStyle cstyle = new MapInfo.Styles.CompositeStyle(new MapInfo.Styles.SimpleVectorPointStyle(52, System.Drawing.Color.Blue, 30));

MapInfo.Data.Feature pft = new MapInfo.Data.Feature(tblTemp.TableInfo.Columns);
pft.Geometry = pfg;
pft.Style = cstyle;
workLayer.Table.InsertFeature(pft);
}



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


/**//// <summary>
/// 把原来的点偏移到新的位置以实现动态轨迹
/// Glacier
/// 2008年8月7日
/// <param name="trackLayerTableName">图层表名</param>
/// <param name="newPoint">点的新坐标</param>
/// </summary>
protected void UpdateTrack(string trackLayerTableName, DPoint newPoint)
{
MapInfo.Data.Table altb = MapInfo.Engine.Session.Current.Catalog.GetTable(trackLayerTableName);
if (altb == null)
{
return;
}

//Change the positon of the existed feature.
SearchInfo si = MapInfo.Data.SearchInfoFactory.SearchWhere("");
Feature ftr = MapInfo.Engine.Session.Current.Catalog.SearchForFeature(altb, si);
if (ftr == null)
{
return;
}
DPoint offsetPoint = new DPoint(newPoint.x - ftr.Geometry.Centroid.x, newPoint.y - ftr.Geometry.Centroid.y);
ftr.Geometry.GetGeometryEditor().OffsetByXY(offsetPoint.x, offsetPoint.y, DistanceUnit.Degree, DistanceType.Spherical);
ftr.Geometry.EditingComplete();
ftr.Update();
}



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


/**//// <summary>
/// 把删除原有点并向图层中添加新点以实现动态轨迹
/// Glacier
/// 2008年8月7日
/// <param name="trackLayerTableName">图层表名</param>
/// <param name="newPoint">点的新坐标</param>
/// </summary>
protected void UpdateTrack(string trackLayerTableName, DPoint newPoint)
{
MapInfo.Data.Table altb = MapInfo.Engine.Session.Current.Catalog.GetTable(trackLayerTableName);
if (altb == null)
{
return;
}

//Delete the existed feature and create a new one.
SearchInfo si = MapInfo.Data.SearchInfoFactory.SearchWhere("");
Feature dftr = MapInfo.Engine.Session.Current.Catalog.SearchForFeature(altb, si);
if (dftr == null)
{
return;
}
altb.DeleteFeature(dftr);
MapInfo.Mapping.Map myMap = MapInfo.Engine.Session.Current.MapFactory[MapControl1.MapAlias];
FeatureGeometry pfg = new MapInfo.Geometry.Point(myMap.GetDisplayCoordSys(), new DPoint(newPoint.x, newPoint.y)) as FeatureGeometry;
MapInfo.Styles.CompositeStyle cstyle = new MapInfo.Styles.CompositeStyle(new MapInfo.Styles.SimpleVectorPointStyle(52, System.Drawing.Color.Blue, 30));

MapInfo.Data.Feature pft = new MapInfo.Data.Feature(altb.TableInfo.Columns);
pft.Geometry = pfg;
pft.Style = cstyle;
altb.InsertFeature(pft);
}
分享到:
评论

相关推荐

    python实现车辆路径轨迹移动的上位机程序

    4. **时间序列分析**:如果轨迹数据包含时间信息,我们可以使用`pandas`的时间序列功能来分析车辆的速度、停留时间等动态行为。 5. **实时更新**:如果程序需要实时显示车辆位置,可能需要使用`threading`或者`...

    Echart+百度地图实现个人轨迹

    总的来说,这个项目展示了如何结合ECharts和百度地图API,将个人轨迹数据以线条形式在地图上进行动态展示,提供了一种直观、生动的方式来理解大量地理定位数据。同时,这也为其他类型的空间数据可视化提供了参考。

    一种一体化动态倒车轨迹视像生成方法及系统.pdf

    "一种一体化动态倒车轨迹视像生成方法及系统" 本文将详细介绍一种一体化动态倒车轨迹视像生成方法及系统,该方法通过预存车辆倒车轨迹线图片、获取车辆位置变化信息、调取与位置变化信息对应的预存轨迹线图片,并将...

    飞行轨迹预测的两种变结构IMM算法.

    ### 飞行轨迹预测的两种变结构IMM算法 #### 概述 飞行轨迹预测在现代航空领域扮演着至关重要的角色,特别是在空中交通管制(ATC)中,能够准确预测飞机的飞行轨迹对于提高飞行安全性、提升空域利用效率等具有重要...

    Matlab实现空间直线,空间圆弧,五次多项式轨迹规划

    而圆弧轨迹则更复杂,通常用于平滑连接两个直线段,例如在机械臂的关节空间中,可以采用圆弧路径来减少关节速度和加速度的变化,从而降低动态负载。 “五次多项式轨迹规划”是一种常用的方法,通过拟合五次多项式...

    无人机多项式插值轨迹优化和B样条插值轨迹优化对比

    在本文中,我们将深入探讨两种常用的轨迹优化方法:多项式插值和B样条插值,并通过对比分析它们的特点和适用场景,帮助你理解如何在实际应用中选择合适的轨迹优化策略。 首先,我们来看多项式插值。多项式插值是一...

    行业分类-设备装置-一种双轴运动平台的定位与动态轨迹跟踪控制装置及方法.zip

    标题中的“行业分类-设备装置-一种双轴运动平台的定位与动态轨迹跟踪控制装置及方法.zip”揭示了这个文件内容主要涉及的是机械设备领域,特别是关于双轴运动平台的定位和动态轨迹跟踪控制技术。这类技术广泛应用于...

    吊车系统 MATLAB仿真(用两种方法分别实现)

    在压缩包中的"crane"文件可能包含了实现这两种控制方法的具体MATLAB代码、Simulink模型或者仿真结果。通过研究这些文件,我们可以进一步了解控制算法的设计细节和具体实现步骤。为了提高控制性能,还可以尝试对控制...

    j2me 实现抛物线的两种方法

    本文将深入探讨两种在J2ME中实现抛物线的方法。 首先,我们要了解抛物线的基本原理。抛物线是物体在重力作用下自由落体运动轨迹的一种理想化模型,其轨迹是由初速度、发射角度以及重力加速度决定的。在二维空间中,...

    matlab仿真实现基于模型预测控制(mpc)的双轮差速运动学轨迹跟踪

    离散化是将连续时间模型转换为离散时间模型的过程,这通常通过零阶保持器(ZOH)或向前Euler方法实现。 线性化是另一个关键步骤,特别是在MPC中,因为大多数优化算法在处理线性问题时效率更高。对于双轮差速小车,...

    JS小球抛物线轨迹运动的两种实现方法详解

    本文实例讲述了JS小球抛物线轨迹运动的两种实现方法。分享给大家供大家参考,具体如下: js实现小球抛物轨迹运动的大致思路: 1、用setInterval()方法,进行间隔性刷新,更新小球位置,以实现动态效果 2、绘制小球和...

    两轴高级轨迹规划PVT_两轴_PVT轨迹规划_PVT规划_PVTcontroller_TwoAxisMotion_

    在现代工业自动化领域,两轴高级轨迹规划PVT(Position-Velocity-Torque)是一种关键的技术,用于实现精确、高效和动态的多轴运动控制。PVT规划是通过对位置(Position)、速度(Velocity)和力矩(Torque)的精细化...

    差速移动机器人轨迹跟踪控制方法——图片.rar

    对差速移动机器人轨迹跟踪问题,提出一种使用PID环节对航向角和距离进行控制算法。首先对实际GPS传感器的经纬度进行转换,其次建立差速移动机器人运动学模型,最后利用控制算法对离散的数据点进行跟踪并与PurePursuit...

    基于连续动态时间规整算法的工业机器人轨迹准确度分析.pdf

    “动态时间规整”是指一种用于计算两个非线性时间序列相似度的算法。“轨迹映射”则是指在评估机器人轨迹准确度时,将机器人实际运动轨迹映射到理论轨迹上的过程。 在机器人技术领域,除了轨迹准确度的分析和优化,...

    轨迹球实现的鼠标旋转

    实现轨迹球算法时,还需要注意一些细节问题,比如平滑滚动、防止过度旋转(死区)和反转等问题。平滑滚动可以通过插值方法使旋转更加流畅;过度旋转可以通过限制旋转角度来避免;反转问题则可以通过判断旋转轴方向并...

    VC++ OpenGL 轨迹球实现

    轨迹球(Trackball)是实现3D对象旋转的一种常见方法,它允许用户通过鼠标操作来改变视角,从而观察3D模型的不同角度。 在VC++中实现OpenGL轨迹球,首先需要理解轨迹球的工作原理。轨迹球模拟了一个半径为1的虚拟...

Global site tag (gtag.js) - Google Analytics