`

两种方法实现动态轨迹

 
阅读更多
在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);
}
分享到:
评论

相关推荐

    mapxtreme练习笔记

    22. 两种方法实现动态轨迹 19 23. 运动轨迹的代码(桌面程序用) 22 24. MapXtreme中桌面信息工具(InfoTool)的简单实现 26 25. 在MapXtreme2004 地图中创建一个显示动态小车的图层 27 26. 地图图元的闪烁效果制作 29...

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

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

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

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

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

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

    实现移动机器人的轨迹跟踪控制

    文章主要是讨论了移动机器人跟踪,并用插值法的方法对移动机器人轨迹进行有效的跟踪,实验表明此方法是可行并且是有效的。

    基于概率轨迹匹配的机器人模仿学习方法.pdf

    该方法基于高斯过程分别表示采集离散示教信号所构成的示教轨迹和含有未知参数策略的模仿轨迹,构建模仿学习方法框架,以Kullback-Leibler散度为代价函数比较两种轨迹的概率分布,运用梯度下降法寻求使K-L散度最小的...

    论文研究-一种针对特定车辆潜在群体的行驶轨迹预测方法.pdf

    城市智能交通信息系统所产生的原始交通数据中存在有大量的可供城市道路安全管理使用的未知模式信息,为了有效利用这些数据,提出一种针对特定车辆潜在群体的行驶轨迹预测方法(SVPG-TP)。该方法主要利用所提出的...

    六自由度机械臂轨迹规划与仿真研究.pdf

    不易直观地验证运动学算法的正确性和轨迹规划的效果,在正确建立机械臂数学模型的基础上,重点分析了机械臂在关节空间中轨迹规划的两种实现方法。并采用三维运动仿真进行了验证。开发了一套六自由度机械臂三维仿真...

    基于轨迹欺骗的无人机GPS_INS复合导航系统干扰技术.pdf

    2.基于轨迹欺骗的无人机GPS_INS复合导航系统干扰技术:该技术采用直接轨迹欺骗和轨迹融合两种方法,实现了对无人机导航系统的侵入控制,达到利用GPS欺骗干扰实现对无人机飞行轨迹的控制目的。 3.归一化创新平方...

    论文研究-基于时间约束的Hausdorff距离的时空轨迹相似度量.pdf

    针对在计算轨迹间相似性时忽略了轨迹的时间属性这一问题,提出一种基于时间约束的Hausdorff距离的时空轨迹相似度量,利用滑动窗口挖掘两条较长轨迹中所有相似的子轨迹,进而判断较长轨迹间的相似性。实验结果表明,...

    机械臂轨迹跟踪控制方法研究.pdf

    机械臂的轨迹跟踪控制可以分为两种形式:固定位置和随时间连续变化的轨迹。本文研究的是轨迹跟踪问题,旨在设计一个高精度、快速跟踪的控制方法。 传统的 PD 控制算法是机械臂控制中常用的方法,但是它存在着精度不...

    车辆轨迹回放

    示范使用SuperMap iServer Java 6R通过时间函数触发为FeaturesLayer添加PictureMarkerStyle和设置指定的时间段上在属性的开始值和结束值之间发生的动画两种方式实现车辆行走的效果;采用的开发模式是Flex+iServer ...

    多连杆机械臂GA-RBF神经网络轨迹跟踪控制.pdf

    14.计算力矩法和RBF神经网络的结合:计算力矩法和RBF神经网络是两种重要的机器人控制方法,可以结合使用以实现机械臂的精准轨迹跟踪。 15. 遗传算法和RBF神经网络的结合:遗传算法和RBF神经网络是两种重要的机器人...

    机器人轨迹规划.ppt

    三次多项式规划是一种常用的轨迹规划方法, 其中关节在两个位置间的平滑过渡函数是三次多项式,约束条件为关节在初始、终了位置处的位置、速度。该方法可以生成平滑的轨迹,且可以满足机器人的加速度约束。 五次...

    六自由度机械臂运动学分析与轨迹优化.pdf

    其次,对机械臂的轨迹规划进行了研究,讨论了直线插补和圆弧插补两种方法,并通过优化算法减小了轨迹偏差。通过MATLAB仿真验证了算法的可行性。 本文的研究结果对机械臂控制系统的实际应用具有重要的指导意义,可以...

    基于社会注意力机制的行人轨迹预测方法研究.docx

    目前,现有的行人轨迹预测方法可分为两类:一类是基于模型的方法,另一类是基于数据驱动的深度学习方法。基于模型的方法,如 Kitani 等证明静态环境的语义信息有助于模型更加准确地预测未来时刻的行人轨迹。但是,这...

    多轨迹段平滑过渡的前瞻插补算法

    针对轨迹规划时采用首尾速度为零的加减速控制方法中存在的频繁启停,以及末端执行器在插补过程中加速度过渡不平滑等问题,提出了一种基于非对称S形加减速控制的多轨迹段平滑过渡的前瞻插补算法.该算法在相邻轨迹段间...

    机械臂轨迹规划之三次多项式插值规划matlab仿真程序

    机械臂轨迹规划之三次多项式插值规划matlab仿真程序 多项式插值(polynomial interopolation)在工业中的应用十分常见,常用的几种多项式插值法有:直接法、...多项式插值轨迹规划也是一种常用的关节空间轨迹规划方法。

    一种新的实时智能汽车轨迹规划方法

    基于序优化思想, 提出混合智能优化算法OODE, 分内、外两层分别优化加速度变化和轨迹曲线, 通过“粗糙” 评价轨迹曲线实现轨迹曲线的快速择优. 仿真结果表明, 所提出的方法能够处理包含多动态障碍物的复杂交通场景, ...

Global site tag (gtag.js) - Google Analytics