在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);
}
复制内容到剪贴板
代码:
/**//// <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添加标记和删除标记
2009-03-30 16:23 1819新增2个pointselectiontool, clientc ... -
添加数据库中的经纬度信息
2009-03-30 16:22 1780C# Code: 复制内容到剪贴板 代码: MapInfo ... -
MapXtreme 2005自定义图层控制代码(WEB)
2009-03-30 16:21 1582虽然MapXtreme 2005 6.7.1提供了图层控制的控 ... -
MapxTreme测试:绘制图标和文字标注
2009-03-30 16:19 3700代码: using System; using System ... -
mapxtreme 2004 改变feature颜色
2009-03-30 16:18 15851.C# code: 复制内容到剪贴板 代码: MapI ... -
MapxTreme2005地图打印
2009-03-30 16:18 1226MapxTreme2005地图打印 一、语言: c# net2 ... -
在C#应用中如何读取存在ORACLE(或SQL Server)中的MapInfo表
2009-03-30 16:17 1243using MapInfo.Data; ... -
MapXtreme 2005查找图元方法,web的
2009-03-30 16:16 1795先添加一个TextBox和 DropDownList控件 复 ... -
MapXtreme点取地图获得信息
2009-03-30 16:15 1896拖一个pointselectiontool到页面, 修改属性 ... -
MapXtreme查看整个地图的代码
2009-03-30 16:14 937Map map = mapControl1.Map; IMap ... -
MapXtreme 2005 鹰眼源代码
2009-03-30 16:13 1800研究了一段时间的MapXtreme2005 v6.6, 实现了 ... -
实现手动画线
2009-03-30 16:12 1247为了实现在地图上手动画线的功能,煞费了一翻苦心,不过最后实现的 ... -
Web页面中实现鼠标中键缩放
2009-03-30 16:11 1542在MapXtreme 2005中,在Windows应用程序中自 ... -
总结查找图元的三种方法
2009-03-30 16:10 1259在MapXtreme 2005中,查找图元提供了非常多的方法, ... -
添加标注图层
2009-03-30 16:08 1182在MapXtreme 2005中添加标注图层是非常容易的,只要 ... -
向图层中添加线段
2009-03-30 16:07 945向图层中添加线段和向图层中添加点是一样的,其本质都是向图层中添 ... -
向图层中添加点
2009-03-30 16:06 1037在添加点之前先要在地图上创建一个临时图层,创建临时图层请参考《 ... -
mapxtreme2005 改变选中的图元样式
2009-03-30 16:05 1089MapInfo.Styles.CompositeStyle c ... -
Mapxtreme2005 两点之间画直线
2009-03-30 16:04 1155private void DrawLine(MapInfo.D ... -
mapxtreme2005 创建各种样式
2009-03-30 16:04 1138public MapInfo.Styles.Composite ...
相关推荐
4. **时间序列分析**:如果轨迹数据包含时间信息,我们可以使用`pandas`的时间序列功能来分析车辆的速度、停留时间等动态行为。 5. **实时更新**:如果程序需要实时显示车辆位置,可能需要使用`threading`或者`...
总的来说,这个项目展示了如何结合ECharts和百度地图API,将个人轨迹数据以线条形式在地图上进行动态展示,提供了一种直观、生动的方式来理解大量地理定位数据。同时,这也为其他类型的空间数据可视化提供了参考。
"一种一体化动态倒车轨迹视像生成方法及系统" 本文将详细介绍一种一体化动态倒车轨迹视像生成方法及系统,该方法通过预存车辆倒车轨迹线图片、获取车辆位置变化信息、调取与位置变化信息对应的预存轨迹线图片,并将...
### 飞行轨迹预测的两种变结构IMM算法 #### 概述 飞行轨迹预测在现代航空领域扮演着至关重要的角色,特别是在空中交通管制(ATC)中,能够准确预测飞机的飞行轨迹对于提高飞行安全性、提升空域利用效率等具有重要...
而圆弧轨迹则更复杂,通常用于平滑连接两个直线段,例如在机械臂的关节空间中,可以采用圆弧路径来减少关节速度和加速度的变化,从而降低动态负载。 “五次多项式轨迹规划”是一种常用的方法,通过拟合五次多项式...
在本文中,我们将深入探讨两种常用的轨迹优化方法:多项式插值和B样条插值,并通过对比分析它们的特点和适用场景,帮助你理解如何在实际应用中选择合适的轨迹优化策略。 首先,我们来看多项式插值。多项式插值是一...
标题中的“行业分类-设备装置-一种双轴运动平台的定位与动态轨迹跟踪控制装置及方法.zip”揭示了这个文件内容主要涉及的是机械设备领域,特别是关于双轴运动平台的定位和动态轨迹跟踪控制技术。这类技术广泛应用于...
在压缩包中的"crane"文件可能包含了实现这两种控制方法的具体MATLAB代码、Simulink模型或者仿真结果。通过研究这些文件,我们可以进一步了解控制算法的设计细节和具体实现步骤。为了提高控制性能,还可以尝试对控制...
本文将深入探讨两种在J2ME中实现抛物线的方法。 首先,我们要了解抛物线的基本原理。抛物线是物体在重力作用下自由落体运动轨迹的一种理想化模型,其轨迹是由初速度、发射角度以及重力加速度决定的。在二维空间中,...
离散化是将连续时间模型转换为离散时间模型的过程,这通常通过零阶保持器(ZOH)或向前Euler方法实现。 线性化是另一个关键步骤,特别是在MPC中,因为大多数优化算法在处理线性问题时效率更高。对于双轮差速小车,...
本文实例讲述了JS小球抛物线轨迹运动的两种实现方法。分享给大家供大家参考,具体如下: js实现小球抛物轨迹运动的大致思路: 1、用setInterval()方法,进行间隔性刷新,更新小球位置,以实现动态效果 2、绘制小球和...
在现代工业自动化领域,两轴高级轨迹规划PVT(Position-Velocity-Torque)是一种关键的技术,用于实现精确、高效和动态的多轴运动控制。PVT规划是通过对位置(Position)、速度(Velocity)和力矩(Torque)的精细化...
对差速移动机器人轨迹跟踪问题,提出一种使用PID环节对航向角和距离进行控制算法。首先对实际GPS传感器的经纬度进行转换,其次建立差速移动机器人运动学模型,最后利用控制算法对离散的数据点进行跟踪并与PurePursuit...
“动态时间规整”是指一种用于计算两个非线性时间序列相似度的算法。“轨迹映射”则是指在评估机器人轨迹准确度时,将机器人实际运动轨迹映射到理论轨迹上的过程。 在机器人技术领域,除了轨迹准确度的分析和优化,...
实现轨迹球算法时,还需要注意一些细节问题,比如平滑滚动、防止过度旋转(死区)和反转等问题。平滑滚动可以通过插值方法使旋转更加流畅;过度旋转可以通过限制旋转角度来避免;反转问题则可以通过判断旋转轴方向并...
轨迹球(Trackball)是实现3D对象旋转的一种常见方法,它允许用户通过鼠标操作来改变视角,从而观察3D模型的不同角度。 在VC++中实现OpenGL轨迹球,首先需要理解轨迹球的工作原理。轨迹球模拟了一个半径为1的虚拟...