




已阅读5页,还剩10页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
在Visual C+中使用MapX控件编辑一 系统构成31 系统的特点32 系统的主要功能33 系统的实现3二 数字化一张地图步骤31 图层管理31.1 配准、投影栅格图像31.2 创建图层41.3 绘制图层42 数据结构设计52.1 新建浏览器窗口5三 创建一个新的gst文件7四 利用MapX控件开发一个小型GIS71 创建MapX控件72 加载地图83 使用MapX标准工具94 绑定数据95 编辑图元(修改图元的颜色)106 创建自定义工具126.1 创建查询工具126.2 创建修改工具14五 总结16在Visual C+中使用MapX控件编辑系统报告一 系统构成1 系统的特点系统采用MapX组件与面向对象可视化编程语言Visual C+集成二次开发模式,具有GIS所必备的基本功能;同时该系统具有可扩展性,使开发者能根据实际情况添加其他应用功能,能够根据业务管理的变化不断改进系统功能。2 系统的主要功能1) 地图工具:系统界面中诸按钮具有地图的放大、缩小、漫游、居中、选中、 复位。2) 编辑:“修改颜色”按钮可以提供用户修改图层图元颜色的操作。3) 自定义工具:“查询”、“修改车站名”按钮提供了用户查询图层图元并高亮显示,可以对“城市”层图元信息进行修改3 系统的实现 在VC环境下集成MapX开发GIS软件是将MapX作为控件插入到应用程序中,然后通过设置其属性和调用其方法、相应其事件来实现的。二 数字化一张地图步骤1 图层管理1.1 配准、投影栅格图像在MapInfo中打开栅格图像“全国路网规划图”,对该栅格图像进行配准操作,在地图上四角设置四个点,输入经纬度坐标,如果要求以后所生成的Geoset地图精准,可以多设置几个配准点。在“全国路网规划图”中设置配准点:哈尔滨、乌鲁木齐、上海、南宁。设置图像的坐标系为地球坐标。配准栅格图如图1.1所示: 图1.11.2 创建图层创建两个新表命名为城市和线路,根据所建表设置字段名,如城市的字段有:城市名、等级、集装箱中心站;线路的字段有:线路名、长度、起点站、终点站。1.3 绘制图层在图层管理中增加图层:全国路网规划图、城市、线路,将全国路网图设置为底图,利用MapInfo绘图工具的符号工具在地图上标出城市;用折线工具在底图上画出主要铁路线路。2 数据结构设计2.1 新建浏览器窗口对城市和线路分别新建两个浏览器窗口,在浏览器窗口中编辑文本。“城市”对应的浏览器窗口如下表2.1所示:城市名城市等级集装箱中心站沈阳3是大连3是天津2是郑州3是西安3是青岛3是上海2是成都3是重庆2是昆明3是兰州3是深圳3是广州3是宁波3是武汉3是长春3否石家庄3否济南3否太原3否乌鲁木齐3否南京3否合肥3否杭州3否长沙3否福州3否南宁3否香港1否贵州3否银川3否满洲里7否绥芬河7否秦皇岛5否哈尔滨3是徐州4否包头4否连云港5否柳州5否厦门4否汕头5否 表2.1线路对应的浏览器窗口如下表2.1所示:线路名;长度:起点站:终到站:京广线2284km北京广州京九线2538km北京九龙滨州滨绥1483km满洲里绥芬河哈大线944km哈尔滨大连京沪线1463km北京上海焦柳线2395km大同柳州包成成昆线1754km包头昆明京包包兰线1813km北京兰州京沈线850km北京沈阳哈大客专904km哈尔滨大连京沈客专1300km北京沈阳沪汉蓉客专1900km上海成都杭宁深客专1600km杭州深圳徐郑兰客专1400km徐州兰州青石太客专770km青岛太原杭南长客专890km杭州长沙京秦沈客专900km北京沈阳京广深客专2230km北京深圳津秦客专256km天津秦皇岛陇海兰新3562km连云港乌鲁木齐沪浙湘贵线2677km上海昆明表2.2三 创建一个新的gst文件1 ) 启动Getset Manager2 ) 在Geoset Manager的菜单File中选择“new Getset”3 ) 在菜单“map”中选择“layer control”4 ) 选择“Add”按钮选择图层所对应的TAB文件“城市”、“线路”5 ) 设置这两个图层的属性6 ) 保存gst文件为“全国路网图”7 ) 选择工具注册图层到Geo Dictionary选择“城市”、“线路”。四 利用MapX控件开发一个小型GIS1 创建MapX控件1) 在Visual C+中通过应用程序向导创建一个基于对话框界面的应用程”zuoye”。2) 在对话框上单击鼠标右键,选择“Insert ActiveX Control”。3) 选择MapInfo MapX V5。4) 将MapX所带例子中的Mapx.cpp,Mapx.h拷入工程中。5) 将Mapx.cpp,Mapx.h导入到该工程中,选择ProjectAdd To ProjectFiles,选中Mapx.cpp,Mapx.h。6) 在ClassWizard中为插入的Mapx控件声名一个变量m_mapx,类型为CMapX。7) 在工程目录中删除cmapx.h,cmapx.cpp文件,并在FileView中删除8) 在Stdafx.h中添加#Include”MapX.h”9) 编译程序,会弹出编译错误,点击错误处,程序定位多错误代码,删除#Include“cmapx.h”,并将CCMapX对象改成CMapX。2 加载地图1) 获取程序主目录路径在zuoyeDlg.cpp文件中定义一个GetExeFilePath()函数,类型为CString,代码如下: CString GetExeFilePath() CString sAppPath=; GetModuleFileName(NULL,sAppPath.GetBuffer(MAX_PATH),MAX_PATH); sAppPath.ReleaseBuffer(); int n = sAppPath.ReverseFind(); if (n = 0) sAppPath = sAppPath.Left(n); sAppPath.TrimRight(); return sAppPath;2) 初始化地图集 在OnInitDialog()函数中加载gst地图加入以下代码: m_mapx.SetGeoSet(GetExeFilePath()+maps全国路网图.GST); CMapXLayers layers;CMapXLayer layer; for (int i=1;i=m_mapx.GetLayers().GetCount();i+)m_mapx.GetLayers().Item(i).SetSelectable(TRUE);3 使用MapX标准工具1) 在“全国路网图”对话框上添加Button控件,并重命名2) 添加Button控件的消息处理函数3) MapX标准工具 Button1 放大 m_mapx.SetCurrentTool(miZoomInTool); Button2 缩小m_mapx.SetCurrentTool(miZoomOutTool); Button3 漫游 m_mapx.SetCurrentTool(miPanTool); Button4 居中 m_mapx.SetCurrentTool(miCenterTool); Button5 选中 m_mapx.SetCurrentTool(miSelectTool); Button7 复位CMapXLayers layers=m_mapx.GetLayers(); CMapXRectangle rect=layers.GetBounds(); m_mapx.SetBounds(rect);4 绑定数据1) 在“全国路网图”对话框上添加Button控件,命名为“读取属性数据”2) 添加“读取属性数据”(Button6)控件的消息处理函数,代码如下:CMapXDatasets sets; CString str=m_mapx.GetGeoSet(); sets=m_mapx.GetDatasets(); CMapXGeosets geosets=m_mapx.GetGeosets(); int count=geosets.GetCount(); if (sets.GetCount()AddRef(); MexData = m_mapx.GetDatasets().Add(miDataSetLayer, layerVt,线路名,2);MexLayer = m_mapx.GetLayers().Item(1);catch (COleDispatchException *e) e-ReportError();e-Delete(); catch (COleException *e)e-ReportError();e-Delete();elseMessageBox(已读数据!,注意);5 编辑图元(修改图元的颜色)1) 在“全国路网图”对话框上添加Button控件,命名为“修改颜色”2) 添加“修改颜色”(Button10)控件的消息处理函数,代码如下:CMapXSelection select=m_mapx.GetLayers().Item(1).GetSelection();if (select.GetCount()=0)MessageBox(,请先选定城市);return;CColorDialog dlg;if (dlg.DoModal()=IDOK)COLORREF color=dlg.GetColor();m_mapx.GetLayers().Item(1).SetEditable(TRUE);for (int i=1;i=select.GetCount();i+)CMapXFeature f=select.Item(i);CMapXStyle style=f.GetStyle();style.SetSymbolVectorColor(color);f.Update();m_mapx.GetLayers().Item(1).Refresh();3) 编译,功能如下: 6 创建自定义工具6.1 创建查询工具1) 创建一个对话框,命名为“查询”将其ID修改为“IDD_FIND_DIALOG”2) 新建一个类,命名为“CFindDlg”3) 在“查询”对话框中添加一个Static Text控件,命名为“请选择查询对像的类型:”4) 在“查询”对话框中添加一个Combo Box控件,设置其ID为“IDC_COMBO_LAYER”5) 在ClassWizard中为插入的“IDC_COMBO_LAYER”控件声名一个变量m_comboLayer,类型为CComboBox。6) 在“查询”对话框中添加一个Static Text控件,命名为“请选择查询对像的名称:”7) 在“查询”对话框中添加一个Combo Box控件,设置其ID为“IDC_COMBO_NAME”8) 在ClassWizard中为插入的“IDC_COMBO_NAME”控件声名一个变量m_comboName,类型为CComboBox。9) 在FindDlg.h定义成员函数 CMapX* m_pMapx;/记录传入的MapX对象指针 void LoadComboName(int nLayer);/ 构造函数, 通过参数传入MapX对象 CFindDlg(CMapX* pMapx, CWnd* pParent = NULL); int m_nSelLayer; int m_nSelFeature;/返回查找对象的下标 CString m_strSelName;/可不用10) 在ClassWizard中为Cancel添加成员函数OnCancel(),编译11) 在ClassWizard中为CFindDlg对话框添加初始化成员函数OnlnitDialog(),编译,代码如下: for (int i=1;iGetLayers().GetCount();i+) m_comboLayer.AddString(m_pMapx-GetLayers().Item(i).GetName();12) 在ClassWizard中为Ok添加成员函数OnOk(),编译,代码如下: m_nSelLayer = m_comboLayer.GetCurSel()+1;m_nSelFeature = m_comboName.GetCurSel()+1;m_comboName.GetWindowText(m_strSelName);if (m_nSelFeature 1) for (int k=0;km_comboName.GetCount();k+) m_nSelFeature = m_comboName.FindString(0, m_strSelName)+1; 13) 在ClassWizard中为控件IDC_COMBO_LAYER添加成员函数OnSelchangeComboLayer(),编译,代码如下: int nIndex = m_comboLayer.GetCurSel();int nLayer = nIndex +1;/图层索引为下标1开始LoadComboName(nLayer);14) 在FindDlg.cpp中定义一个成员函数LoadComboName(int nLayer),代码如下:m_comboName.ResetContent();if (nLayer GetLayers().Item(nLayer);CMapXFeatures& features = curLayer.AllFeatures();for (int k=1;k=features.GetCount();k+) m_comboName.AddString(features.Item(k).GetName();15) 在CFindDlg:CFindDlg(CMapX* pMapx, CWnd* pParent /*=NULL*/): CDialog(CFindDlg:IDD, pParent)中初始化变量 m_pMapx = pMapx;m_nSelLayer = -1;m_nSelFeature = -1;m_strSelName = _T();16) 编译,功能如下: 6.2 创建修改工具1) 创建一个对话框,命名为“修改”2) 新建一个类,命名为“CStationDlg”3) 在“修改”对话框中添加一个Static Text控件,命名为“修改车站名”4) 在“修改”对话框中添加一个Edit Box控件,设置其ID为“IDC_EDIT_STATIONNAME”5) 在ClassWizard中为插入的“IDC_EDIT_STATIONNAME”控件声名一个变量m_StationName,类型为CString。6) 在“全国路网图”对话框上添加Button控件,命名为“修改车站名”7) 添
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年河南省驻马店市树人高级中学招聘教师3名备考考试题库附答案解析
- 商业场所管理责任协议书
- 城市燃气供应与服务协议
- 在线游戏托管运营协议
- 2025年电站空冷行业研究报告及未来行业发展趋势预测
- 乡村合作农业资源开发协议
- 2025年电子材料行业研究报告及未来行业发展趋势预测
- 信息技术在农业养殖中的应用合作合同
- 金陵饭店股权委托管理及旅游产业链整合合同
- 医疗机构职业健康安全与环保管理合同
- 浙江爱生药业有限公司新增年产12亿单位药品制剂自动生产检测线升级技术改造项目环评报告
- 2025年律师培训试题(含答案)
- 2025年三力模拟测试题及答案
- 西畴殡葬管理办法
- 脑脓肿病例分析课件
- 公立医院资金管理办法
- 边坡作业安全教育培训
- 印染工厂设计
- ktv安全消防管理制度
- 《子宫颈癌筛查规范(2025年版)》解读
- 政府夜市活动方案
评论
0/150
提交评论