ArcGis9.2怎样实现动态移动的标牌(C#)?

laidon 2008-03-03 07:33:16
ArcGis9.2使用C#开发要实现以下功能

在地图上显示通过GPS接收到的汽车的位置信息,在地图上显示出各车的位置和移动情况
现在GPS信息已处理完毕,想用ArcGis9.2来实现GIS功能
地图的加载是用MapControlMain这个控件
(1)请问应该用什么控件或技术来实现标牌的显示及移动呢?而且不能占用太多的资源,因为可能会有很多标牌而且会都在移动.
(2)标牌还要显示汽车的各种信息:车主姓名、速度、方向和位置等,数据已经都有了,怎么在标牌上显示呢?
(3)还需要实现对标牌的删除、车主信息等,如何实现?

...全文
521 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
laidon 2008-09-03
  • 打赏
  • 举报
回复
项目已完成,结贴!
luoweiliuz 2008-07-01
  • 打赏
  • 举报
回复
有没有 动态图层实现的代码,参考呀
laidon 2008-05-08
  • 打赏
  • 举报
回复
摸索前进了...
UltraBejing 2008-04-30
  • 打赏
  • 举报
回复
我也想了解,谢谢LZ.
xingchenbbs 2008-03-19
  • 打赏
  • 举报
回复
星辰技术社区:www.netcsharp.cn,我们将帮您以最快的速度找到最佳的解决方案
yemao20 2008-03-14
  • 打赏
  • 举报
回复
通过元素也是可以的.
tornado96 2008-03-12
  • 打赏
  • 举报
回复

呵呵,代码就不必了,太长了,实现的主要代码可以贴进来交流一下。
1.先创建内存空间
IWorkspaceFactory pWSF = new InMemoryWorkspaceFactoryClass();
IWorkspaceName pWSN = pWSF.Create("", workspaceName, null, 0);
IName name = (IName)pWSN;
IWorkspace pWS = (IWorkspace)name.Open();

pWS就是要创建的内存图层。

2.然后就用IFeatureWorkspace接口来创建一个FeatureClass点图层
IFeatureClass pFC = pFWS.CreateFeatureClass("CarPosition", pFields, null, null, esriFeatureType.esriFTSimple, "Shape", "");

3.最后更新位置
//修改位置信息
ESRI.ArcGIS.Geometry.IPoint pt = new ESRI.ArcGIS.Geometry.PointClass();
pt.PutCoords(dblLongitude, dblLaitude);
pFeature.Shape = pt;

//保存修改
pFeature.Store();

4.刷新方法
m_pMapControl.ActiveView.PartialRefresh(esriViewDrawPhase.esriViewGeography,
m_pMapControl.get_Layer(0), null);
其中,m_pMapControl.get_Layer(0)为步骤2创建的FeatureClass所在地图层。

5.画轨迹,至于这个问题实现的方法有很多。我用到的主要用到GDI+来实现,首先把点集的经纬度坐标转换成屏幕坐标,然后画线。
转换
int x1, y1;
pt.PutCoords(mapX, mapY);
m_pMapCtrl.ActiveView.ScreenDisplay.DisplayTransformation.FromMapPoint(pt, out x1, out y1);
画线
//定义画板
Bitmap bmp = new Bitmap(m_pMapCtrl.Width, m_pMapCtrl.Height);
//临时画笔
Graphics tmpGraphics = Graphics.FromImage(bmp);//m_pMapCtrl.CreateGraphics();//
Pen pen = new Pen(Color.Red);
//画线

for (int i = 0; i < m_pPointList.Count - 1; i++)
{
tmpGraphics.DrawLine(pen, m_pPointList[i].X, m_pPointList[i].Y, m_pPointList[i + 1].X, m_pPointList[i + 1].Y);
}
Font f = new Font("宋体", 10);
PointF ptf = new PointF(myPt.X, myPt.Y);
tmpGraphics.DrawString(str, f, Brushes.Red, ptf);
Graphics gs = m_pMapCtrl.CreateGraphics();

如果用ArcEngine提供的方法来画,其中一种方法是:
public static void DrawPolyline(ESRI.ArcGIS.Controls.AxMapControl mapControl,
ESRI.ArcGIS.Geometry.IGeometry polyline)
{
try
{
ESRI.ArcGIS.Carto.IActiveView activeView = mapControl.ActiveView.FocusMap as
ESRI.ArcGIS.Carto.IActiveView;
if (activeView == null) return;

ESRI.ArcGIS.Display.IScreenDisplay screenDisplay = activeView.ScreenDisplay;

ESRI.ArcGIS.Display.ISimpleLineSymbol lineSymbol =
new ESRI.ArcGIS.Display.SimpleLineSymbolClass();
ESRI.ArcGIS.Display.IRgbColor rgbColor =
new ESRI.ArcGIS.Display.RgbColorClass();
rgbColor.Red = 255;
lineSymbol.Color = rgbColor;

screenDisplay.StartDrawing(screenDisplay.hDC,
(short)ESRI.ArcGIS.Display.esriScreenCache.esriNoScreenCache);

screenDisplay.SetSymbol((ESRI.ArcGIS.Display.ISymbol)lineSymbol);

screenDisplay.DrawPolyline(polyline);
screenDisplay.FinishDrawing();

//return (ESRI.ArcGIS.Display.ISymbol)lineSymbol;
}
catch (Exception ex)
{
//SysCommon.Global.mainLog.Error("调用DrawPolyline出错", ex);
}
}


希望对你有帮助^_^
amandayan 2008-03-06
  • 打赏
  • 举报
回复
tornado96高手:
能否给出使用内存图层,以及设置该图层的Feature,刷新该图层的使用方法的代码,想接见你的方法来实现动态跟踪,画动态轨迹(C#+AE9.2),不知道是否可以可行,真诚请教!不甚感激!
tornado96 2008-03-06
  • 打赏
  • 举报
回复
我做GPS车辆监控时用一个内存图层来存放GPS位置信息,然后把这个图层加载到地图控件上,在接收到新的GPS信息时改变其对应的Feature位置及其属性信息,然后刷该图层。通过这种方法可以实现楼主所提出的所有功能,单是刷新这个车辆图层性能还可以。曾试过用GDI来实现,不过因为在坐标转换(GPS坐标与像素点之间的转换)过程中精度不够好导致在显示时出现一定的误差,感觉效果不是很好。不知道有没有高手能提出更好的方法来^_^。另外,想问一下路过的高手有没有遇到下面类似的问题。用ArcGIS刷新数据量比较大的地图时,刷新速度非常慢,不知道有没有办法改进这个性能问题。
hsghxm 2008-03-05
  • 打赏
  • 举报
回复



你的问题太笼统,做GPS车辆监控的难点全给你提出来了,还真不知道怎么回答才好!呵呵,有兴趣的话到我的博客转转!www.gisboy.cn

2,142

社区成员

发帖
与我相关
我的任务
社区描述
它是一种特定的十分重要的空间信息系统。它是在计算机硬、软件系统支持下,对整个或部分地球表层(包括大气层)空间中的有关地理分布数据进行采集、储存、管理、运算、分析、显示和描述的技术系统。
社区管理员
  • 地理信息系统
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧