




免费预览已结束,剩余13页可下载查看
下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
MapX二次开发实习讲义一、 创建一个MapX工程1、 新建VC工程Step 1:新建工程Step 2:选择Single DocumentStep 3:选择CFormView2、 添加MapX组件Step 1:选择Project-Add to Project-ComponentStep 2:选择MapX组件Step 3:选择只添加一个MapX对象CCMapXStep 4:将MapX组件添加到Form,并定义变量Step 5:为MapX控件定义变量3、 工程整理Step 1:将MAPX.H、MAPX.CPP拷贝至工程目录Step2:从工程目录中删除cmapx.h,cmapx.cpp文件,并在FileView中删除Step3:选择Project-Add to Project-Files将MAPX.H、MAPX.CPP加到工程中Step4:在Stdafx.h中添加#Include “MapX.h”Step5:编译程序,会弹出编译错误Step6:点击错误出,程序定位到错误代码,删除#Include “cmapx.h”,并将CCMapX对象改成CMapXStep7:编译工程,成功,一个标准的MapX工程创建成功。二、 加载图层方式1:加载GeoSet图层集在工程中添加按钮或菜单,添加如下代码:CFileDialog dlg(TRUE,NULL);CString strGeoset;if(dlg.DoModal()=IDOK)strGeoset = dlg.GetPathName();/加载Geoset的方法,为Map的方法m_Map.SetGeoSet(strGeoset);方式2:调用Layer 管理对话框CMapXLayers layers;layers = m_Map.GetLayers();layers.LayersDlg();方式3:添加单个图层CMapXLayers layers = m_Map.GetLayers();CFileDialog dlg(TRUE,NULL);CString str;if(dlg.DoModal()=IDOK)str = dlg.GetPathName();layers.Add(str,1);三、 图层管理1、图层数量CMapXLayers layers = m_Map.GetLayers();int nLayerCount = layers.GetCount();2、遍历图层for(int i=0;inLayerCount;i+)CMapXLayer layer = layers.Item(i+1);m_Layers.AddString(layer.GetName();AfxMessageBox(layer.GetName(); 遍历图层可以得到每一个图层对象Layer,并对每一个图层对象可以遍历图层对象的属性、操作图层。如设置图层的可见性:layer.SetVisible(FALSE);3、得到层中所有特征CMapXLayers layers=m_Map.GetLayers();CMapXLayer layer = layers.Item(1);CMapXFeatures fs; fs=layer.AllFeatures(); m_ListInfo.ResetContent();/遍历层对象 for(int i=0;ifs.GetCount();i+) m_ListInfo.AddString(fs.Item(i+1).GetName();/m_ListInfo为定义的ListBox控件 四、 地图操作1、地图放大m_Map.SetCurrentTool(1003);2、地图缩小m_Map.SetCurrentTool(1004);3、地图漫游m_Map.SetCurrentTool(miPanTool);4、设置鼠标状态m_Map.SetMousePointer(miCrossCursor);5、 全图操作CMapXLayers layers = m_Map.GetLayers();CMapXRectangle rect = layers.GetBounds();m_Map.SetBounds(rect);五、 事件响应1、获取鼠标漫游地图坐标Step1:给地图添加鼠标漫游事件,右键点击地图Step2:添加MouseMoveMap1消息Step3:在MouseMoveMap1消息中添加函数获取坐标double dX,dY;m_Map.ConvertCoord(&X,&Y,&dX,&dY,miScreenToMap );m_X = dX; /m_X为事先在工程中定义的Edit变量m_Y = dY; /m_Y为事先在工程中定义的Edit变量UpdateData(FALSE);2、量距操作Step1:定义自定义工具,与一个菜单或按钮关联m_Map.CreateCustomTool(102,miToolTypeLine,miSizeCursor);m_Map.SetCurrentTool(102);Step2:添加ToolUsed事件Step3:在ToolUsed消息中添加响应获取量距距离操作的代码if(ToolNum=102)CString str;str.Format(Distance = %.2f,Distance);AfxMessageBox(str);3、量面积操作(响应PolylineUsed事件,与量距相同)m_Map.CreateCustomTool(302,miToolTypePoly, miSizeCursor);m_Map.SetCurrentTool(302);m_Map.SetMousePointer(miCrossCursor);六、 属性查询/定义图层UpdateData(TRUE);CMapXLayers layers=m_Map.GetLayers();CMapXLayer layer = layers.Item(1);/定义查询对象CMapXLayerFind find = layer.GetFind();/得到查询对象 CMapXFindFeature FoundObject;FoundObject = find.Search(m_Query);/获取查询对象信息CString str;if(FoundObject.GetType()=0)/判断地物是否为多边形 str.Format(Area = %.2f,FoundObject.GetArea(); str=FoundObject.GetName()+s Area is: +str;AfxMessageBox(str);/将地图定位至查询对象的中心double dX,dY;dX = FoundObject.GetCenterX();dY = FoundObject.GetCenterY();m_Map.SetCenterX(dX);m_Map.SetCenterY(dY);/将查询对象放至选择集CMapXSelection Selection = layer.GetSelection();Selection.SelectByPoint(dX,dY, miSelectionNew);七、 空间查询1、点查询Step1:定义自定义空间查询工具,与一个菜单或按钮关联m_Map.CreateCustomTool(202,miToolTypePoint,miCrossCursor);m_Map.SetCurrentTool(202);Step2:在ToolUsed消息中添加响应点查询操作的代码/点空间查询else if(ToolNum=202)CMapXLayers layers=m_Map.GetLayers();CMapXLayer layer = layers.Item(1);CMapXPoint point;CMapXFeatures fs;CString str;if(!point.CreateDispatch(point.GetClsid()return; point.Set(double)X1,(double)Y1);/查询语句 fs=layer.SearchAtPoint(point,miSearchResultAll); for(int n=0;nfs.GetCount();n+) if(fs.Item(n+1).GetType()=0)/判断获得的地物的形状是否为多边形str.Format( The Aera of %s is:%lfrn,fs.Item(n+1).GetName(),fs.Item(n+1).GetArea(); else str.Format( the ID of %s is:%srn ,fs.Item(n+1).GetName(),fs.Item(n+1).GetFeatureID(); str=the result searched by Point is:rn+str;AfxMessageBox(str);m_Map.SetCenterX(X1); m_Map.SetCenterY(Y1);/把查询结果放入选择集中显示CMapXSelection Selection=layer.GetSelection();Selection.SelectByPoint(X1,Y1,0);2、圆查询Step1:定义自定义空间(圆)查询工具,与一个菜单或按钮关联m_Map.CreateCustomTool(203,miToolTypeCircle,miCrossCursor);m_Map.SetCurrentTool(203);Step2:在ToolUsed消息中添加响应点查询操作的代码else if(ToolNum=202)CMapXFeatures fs;CMapXPoint point;if(!point.CreateDispatch(point.GetClsid()TRACE0(Failed to Create Circle Pobject);return;point.Set(X1,Y1);CMapXLayers layers=m_Map.GetLayers();CMapXLayer layer = layers.Item(1);fs=layer.SearchWithinDistance(point,Distance,0,miSearchResultAll);/圆查询的范围m_Map.SetCenterX(X1);m_Map.SetCenterY(Y1);CMapXSelection Selection =layer.GetSelection();Selection.SelectByRadius(X1,Y1,Distance, 0);Invalidate();3、矩形查询Step1:定义自定义空间(矩形)查询工具,与一个菜单或按钮关联m_Map.CreateCustomTool(204,miToolTypeMarquee,miCrossCursor);m_Map.SetCurrentTool(204);Step2:在ToolUsed消息中添加响应点查询操作的代码else if(ToolNum=202)CMapXFeatures fs;CMapXRectangle rec;if(!rec.CreateDispatch(rec.GetClsid() TRACE0(Failed to Create Rectangle Pobject); return; rec.Set(X1,Y1,Y1,Y2);CMapXLayers layers=m_Map.GetLayers();CMapXLayer layer = layers.Item(1);fs=layer.SearchWithinRectangle(rec,miSearchResultAll);/矩形查询的范围m_Map.SetCenterX(X1);m_Map.SetCenterY(Y1);CMapXSelection Selection =layer.GetSelection();Selection.SelectByRectangle(X1,Y1,X2,Y2, 0);Invalidate();八、 数据绑定(访问属性字段)CMapXLayers layers=m_Map.GetLayers();CMapXLayer layer = layers.Item(1);COleVariant rsVariant; rsVariant.vt = VT_DISPATCH;rsVariant.pdispVal = layer;CMapXDatasets datasets = m_Map.GetDatasets();/datasets.Add(miDataSetLayer,rsVariant);CMapXDataset dataset = datasets.Item(1);CMapXFields fields = dataset.GetFields();for(int i=0;ifields.GetCount();i+)/CMapXField field = fields.Item(i+1);AfxMessageBox(fields.Item(i+1).GetName();九、 专题图1、制作专题图CMapXLayers layers=m_Map.GetLayers();CMapXLayer layer = layers.Item(1);COleVariant rsVariant; rsVariant.vt = VT_DISPATCH;rsVariant.pdispVal = layer;/绑定层的属性数据表CMapXDatasets datasets = m_Map.GetDatasets();datasets.Add(miDataSetLayer,rsVariant);CMapXDataset dataset = datasets.Item(1);CMapXThemes themes = dataset.GetThemes();if(themes.GetCount!=0)themes.RemoveAll();themes.Add(miThemeDotDensity, 4,AAA);CMapXTheme theme = themes.Item(AAA);theme.ThemeDlg();2、自动注记CMapXLayers layers=m_Map.GetLayers();layers.Item(1).SetAutoLabel(TRUE);3、得到每一个对象中字段值CMapXLayers layers=m_Map.GetLayers();CMapXLayer layer = layers.Item(1);COleVariant rsVariant; rsVariant.vt = VT_DISPATCH;rsVariant.pdispVal = layer;CMapXDatasets datasets = m_Map.GetDatasets();/datasets.Add(miDataSetLayer,rsVariant);CMapXDataset dataset = datasets.Item(1);CMapXFields fields = dataset.GetFields();long RowCount = dataset.GetRowCount();long FieldsCount = fields.GetCount();COleVariant valueVt;for(int i=0;iAddRef();CMapXFeatureFactory cFactory= m_Map.GetFeatureFactory();/创建特征对象feature = cFactory.CreateLine(vtPoints);feature.SetType(miFeatureTypeLine);/设置线型CMapXStyle style=feature.GetStyle();style.SetLineColor(miColorRed);style.SetLineStyle(93);feature.SetStyle(style.m_lpDispatch);/将结果添加到图层里面m_LineLayer.AddFeature(feature);Invalidate();3、添加面对象Step1:定义自定义空间添加线工具,与一个菜单或按钮关联m_Map.CreateCustomTool(303,miToolTypePolygon, miSizeCursor);m_Map.SetCurrentTool(303);Step2:在OnPolyToolUsedMap1消息中添加面操作的代码/添加多边形else if(ToolNum=303)CMapXLayers layers=m_Map.GetLayers();CMapXFeature feature; /声明Feature变量if(!feature.CreateDispatch(feature.GetClsid() TRACE0(Failed to Create Feature object); return;/创建图层if(m_PolyLayer=NULL)m_PolyLayer = layers.CreateLayer(PolyLayer);elsem_PolyLayer = layers.Item(PolyLayer);CMapXPoints pts; pts.AttachDispatch(Points,FALSE);COleVariant vtPoints;vtPoints.vt = VT_DISPATCH;vtPoints.pdispVal = pts.m_lpDispatch;vtPoints.pdispVal-AddRef();CMapXFeatureFactory cFactory= m_Map.GetFeatureFactory();/创建特征对象feature = cFactory.CreateRegion(vtPoints);/设置线型CMapXStyle style=feature.GetStyle();style.SetRegionPattern(miPatternCross); /设置填充方式style.SetRegionBorderColor(miColorRed); /设置边框颜色style.SetRegionBorderWidth(2); /设置边框宽度feature.SetStyle(style.m_lpDispatch);/将结果添加到图层里面m_PolyLayer.AddFeature(feature);Invalidate();十二、 鹰眼地图Step 1 :往鹰眼视图中添加地图/给鹰眼添加数据m_MapEye.SetGeoSet(strGeoset);m_MapEye.GetLayers().Add(str,1);Step 2: 创建鹰眼视图中的位置矩形框图层m_MapEye.GetLayers().CreateLayer(Rectangle);Step 3:添加主视图刷新事件,并将当前的主视图地图范围转化为矩形,并在鹰眼的矩形框图层中画之if(!hasLoad)return; double X1,Y1,X2,Y2; /声明坐标变量/声明FeatureFactory变量并获取缺省值CMapXFeatureFactory cFactory=m_MapEye.GetFeatureFactory();CMapXLayer layer; /声明图层变量CMapXFeature feature; /声明Feature变量CMapXFeatures features; /声明Features变量CMapXPoints points; /声明Points变量points.CreateDispatch(points.GetClsid();CMapXRectangle rect; /声明矩形变量rect.CreateDispatch(rect.GetClsid();/获取主图的边界,根据这个边界值,在鹰眼图上添加一个矩形Featurerect = m_Map.GetBounds();X1 = rect.GetXMin(); /获得矩形左上顶点x坐标Y1 = rect.GetYMin(); /获得矩形左上顶点y坐标X2 = rect.GetXMax(); /获得矩形右下顶点x坐标Y2 = rect.GetYMax(); /获得矩形右下顶点y坐标/得到添加矩形Feature的图层layer=m_MapEye.GetLayers().Item(Rectangle);features=layer.AllFeatures();/没有添加矩形Feature的图层,则新建if(features.GetCount() = 0)/添加四个顶点构成一个矩形框points.AddXY(X1,Y1); /添加顶点1points.AddXY(X1,Y2); /添加顶点2points.A
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 七年级地理下册 11《中国在世界中》教学设计1 鲁教版五四制
- 发展对象培训班开班仪式
- 人教版四年级数学下册集体备课教案
- 冻干粉灯检培训
- 工程部培训先进经验分享
- 九年级英语上册 Unit 4 I used to be afraid of the dark Section B(3a-Self Check)教学设计(新版)人教新目标版
- 部门人品培训
- 人教部编版八年级历史上册第6课戊戌变法教学设计
- 财税销售培训
- 写作:学写故事(教学设计)八年级语文下册同步备课系列(统编版)
- 8个事故案例13个警示视频文字完善篇(矿山局迎检资料)
- 黑龙江省齐齐哈尔市重点达标名校2025届中考一模生物试题含解析
- Unit 3 Diverse Cultures Reading and Thinking (说课稿)高一英语同步高效课堂(人教版2019必修第三册)001
- 工地试验室管理经验交流
- 乙女游戏情感叙事中的虚拟亲密关系
- 女方婚后出轨保证书(6篇)
- 马克思主义基本原理概论复习资料
- 学校白板打印机维修合同(2篇)
- 电化学储能系统现场验收要求表
- 运维或技术支持岗位招聘笔试题与参考答案(某大型央企)2024年
- 2023年高考辽宁卷化学真题(解析版)
评论
0/150
提交评论