您的位置:首页 > 编程语言 > C语言/C++

Mapx开发目标轨迹显示核心代码(VC++)

2010-03-24 16:00 246 查看
[align=left]一、申明变量[/align]
[align=left] CMapX m_ctrlMapX; [/align]
[align=left] CMapXLayer m_objLayer; //运动目标图层[/align]
[align=left] CMapXLayer m_traceLayer; //目标轨迹层[/align]
[align=left] CMapXLayer m_scaleBarLayer; //比例尺图层[/align]
[align=left] CMapXFeature m_objFt;[/align]
[align=left] double m_lfCenterLon; //地图中心经度[/align]
[align=left] double m_lfCenterLat; //地图中心纬度[/align]
[align=left] CMapXFeature m_objTrackFt[MAXNUMINEMAP];[/align]
[align=left]二、 创建地图控件[/align]
[align=left] CRect rc;[/align]
[align=left] GetClientRect(&rc);[/align]
[align=left] m_ctrlMapX.Create(NULL,WS_VISIBLE, rc, this, IDC_MAP);[/align]
[align=left] m_ctrlMapX.SetCurrentTool(miPanTool); [/align]
[align=left] char GEOName[MAX_PATH];[/align]
[align=left] GetCurrentDirectory(MAX_PATH,GEOName);[/align]
[align=left] strcat(GEOName,"\map\asia.gst"); 字串3 [/align]
[align=left] [/align]
[align=left] m_ctrlMapX.SetGeoSet(GEOName);//设置地图名字[/align]
[align=left] m_ctrlMapX.SetTitleText("");[/align]
[align=left] m_ctrlMapX.SetMapUnit(miUnitKilometer);//设置地图单位[/align]
[align=left] m_ctrlMapX.SetPaperUnit(miPaperUnitKilometer);[/align]
[align=left] m_scaleBarLayer = m_ctrlMapX.GetLayers().AddUserDrawLayer("比例尺", 1);//添加用户显示图层[/align]
[align=left] m_ctrlMapX.SetAutoRedraw(TRUE);[/align]
[align=left]三、创建目标轨迹层[/align]
[align=left] m_objLayer = m_ctrlMapX.GetLayers().CreateLayer("目标",NULL, 1, 32);[/align]
[align=left] m_ctrlMapX.GetLayers().SetAnimationLayer(m_objLayer);//设置该层为动画图层[/align]
[align=left] m_objLayer.SetSelectable(FALSE);//设置该层目标为不可选择[/align]
[align=left] m_objLayer.SetAutoLabel(TRUE);//设置该层目标为自动标注[/align]
[align=left] m_objLayer.GetLabel().SetLineType(miLineTypeNone);//设置标注线形[/align]
[align=left] m_objLayer.GetLabel().SetPosition(miPositionTR);//设置标注位置[/align]
[align=left] m_objLayer.GetLabel().SetOffset(2);//设置标注偏移量[/align]
[align=left] m_objLayer.SetOverrideStyle(TRUE);//该层中所有Feature使用相同的style,***关键点,使用不同的style时,参数为FALSE*** 字串1 [/align]
[align=left] m_objLayer.GetLabel().GetStyle().SetTextFontColor(miColorRed);//设置标注颜色[/align]
[align=left] m_objLayer.GetLabel().SetOverlap(TRUE);//允许标注覆盖[/align]
[align=left] m_objLayer.GetStyle().GetSymbolFont().SetName("Mapinfo Symbols");//设置符号feature使用的字体[/align]
[align=left] m_objLayer.GetStyle().SetSymbolCharacter(53);//设置符号feature使用的字符[/align]
[align=left] m_objLayer.GetStyle().SetSymbolFontColor(RGB(255,0,0));//设置符号feature使用的颜色[/align]
[align=left] m_objLayer.GetStyle().SetLineWidth(1);//设置线形feature的线宽[/align]
[align=left] m_objLayer.SetDrawLabelsAfter(TRUE);//在所有图层绘制完后再绘制标注[/align]
[align=left]四、 创建目标轨迹层[/align]
[align=left] m_traceLayer = m_ctrlMapX.GetLayers().CreateLayer("轨迹",NULL, 2, 32);[/align]
[align=left] m_ctrlMapX.GetLayers().SetAnimationLayer(m_traceLayer);[/align]
[align=left] m_traceLayer.SetSelectable(FALSE);[/align]
[align=left] m_traceLayer.SetDrawLabelsAfter(TRUE);//影响标注刷新的关键 [/align]
[align=left] [/align]
[align=left] [/align]
[align=left]五、 响应OnDrawUserLayer绘制比例尺图层 [/align]
[align=left] [/align]
[align=left][/align]
[align=left] [/align]
[align=left]六、 定时器中改变目标位置 [/align]
[align=left] [/align]
[align=left] [/align]
[align=left]七、 刷新电子地图[/align]
[align=left] m_objLayer.BeginAccess(miAccessReadWrite);//大大减少CPU开销[/align]
[align=left] m_traceLayer.BeginAccess(miAccessReadWrite);//大大减少CPU开销[/align]
[align=left] for(int i=0;i<MAXNUMINEMAP; i++)[/align]
[align=left] {[/align]
[align=left] //设定目标位置[/align]
[align=left] sObjectInEMap[i].ft.GetPoint().Set(sGISPoint[i][0].x, sGISPoint[i][0].y);[/align]
[align=left] sObjectInEMap[i].ft.Update(); [/align]
[align=left] [/align]
[align=left] [/align]
[align=left] //设置目标轨迹[/align]
[align=left] //为空的时候创建目标轨迹对象[/align]
[align=left] if (m_objTrackFt[i]==NULL)[/align]
[align=left] {[/align]
[align=left] CMapXFeature ft;[/align]
[align=left] ft.CreateDispatch(ft.GetClsid());[/align]
[align=left] ft.Attach(m_ctrlMapX.GetDispatch(FALSE));[/align]
[align=left] ft.SetType(miFeatureTypeLine);[/align]
[align=left] ft.GetStyle().SetLineColor(colors[i%12]);[/align]
[align=left] ft.GetStyle().SetLineStyle(1);//77-铁轨(参考帮助)[/align]
[align=left] ft.GetStyle().SetLineWidth(2);[/align]
[align=left] CMapXPoints pts;[/align]
[align=left] pts.CreateDispatch(pts.GetClsid());[/align]
[align=left] //加入坐标数据[/align]
[align=left] pts.AddXY(sGISPoint[i][1].x, sGISPoint[i][1].y);[/align]
[align=left] pts.AddXY(sGISPoint[i][0].x, sGISPoint[i][0].y);[/align]
[align=left] ft.GetParts().Add(pts);[/align]
[align=left] //加入到目标图层[/align]
[align=left] m_objTrackFt[i] = m_traceLayer.AddFeature((LPDISPATCH)ft); 字串6 [/align]
[align=left] }[/align]
[align=left] else[/align]
[align=left] {[/align]
[align=left] //更新目标轨迹对象[/align]
[align=left] m_objTrackFt[i].GetParts().Item(1).AddXY(sGISPoint[i][0].x, sGISPoint[i][0].y);[/align]
[align=left] m_objTrackFt[i].Update();[/align]
[align=left] }[/align]
[align=left] sGISPoint[i][1] = sGISPoint[i][0];[/align]
[align=left] }[/align]
[align=left] m_traceLayer.EndAccess();[/align]
[align=left] m_objLayer.EndAccess();[/align]本文出自 “代志强” 博客,谢绝转载!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: