嵌入式课程设计刘亚南.docx_第1页
嵌入式课程设计刘亚南.docx_第2页
嵌入式课程设计刘亚南.docx_第3页
嵌入式课程设计刘亚南.docx_第4页
嵌入式课程设计刘亚南.docx_第5页
已阅读5页,还剩14页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

前言 随着嵌入式硬件设备快速的发展, 在嵌入式应用领域迫切需要基础性的GIS开发平台,来满足不断增长的嵌入式 GIS 应用需求。 eSuperMap 是 eMbedded ( 嵌入式 ) SuperMap 的缩写,它充分考虑到了嵌入式设备资源紧缺的特点,从数据结构到基本算法都精益求精,对资源的消耗很低,而其性能却很优异,功能强大、系统稳定,用户能灵活定制系统,为面向嵌入式应用的地理信息系统的开发提供了极大的方便 eSuperMap 功能全面、开发方式灵活、资源消耗低,运行效率高,可广泛应用于通讯、测量、交通、军事、消防、医疗等多种领域,是开发嵌入式 GIS 应用、 GPS 前端产品和位置服务( LBS )的理想选择。一、嵌入式GIS的总体介绍 eSuperMap是超图公司自主研发的嵌入式GIS开发平台。随着嵌入式设备的发展,嵌入式GIS应用的广泛增加,迫切需要基础性开发平台,提供灵活的定制能力,eSuperMap是满足这一市场需求的二次开发平台,利用它可以为嵌入式设备快速地开发和构建各种GIS/GPS应用系统,如PDA上的GIS应用和卫星导航终端应用等。eSuperMap功能全面、开发方式灵活、资源消耗低,运行效率高,可广泛应用于通讯、测量、交通、军事、消防、医疗等多种领域,是开发嵌入式GIS应用、GPS前端产品和位置服务(LBS)的理想选择。二、嵌入式产品的特点开发方式eSuperMap以C+类库和.NET控件的方式进行分发,支持Visual C+、eMbedded Visual C+、Visual Studio 2005和Visual Studio 2008等多种开发工具,eSuperMap类库中类的层次关系清晰,结构简练,容易理解。用户可以使用eSuperMap类库和控件,根据应用系统和硬件系统的不同需求,定制出自己特色的应用系统。运行环境C+类库:支持Windows NT、Windows 2000 Windows XP、Windows Server 2003操作系统;支持多种硬件设备上,如IBM PC兼容机。装有Windows CE 4.0及以上版本及Windows Mobile的各类嵌入式设备(PocketPC 2003、Windows mobile 5.0、Windows mobile 6.0系列等)。NET组件:装有Windows CE 5.0及以上版本及Windows Mobile的各类嵌入式设备(Windows mobile 5.0、Windows mobile 6.0系列等)。数据结构eSuperMap专门为嵌入式设备量身定做了数据,更适合在资源紧缺的嵌入式设备上使用。根据嵌入式设备的特点,eSuperMap专门设计出两种数据存储格式,即PMF(Portable Map File)和PMR(Portable Map Runtime File)文件格式,同时采用多数据源无缝集成技术通过数据引擎访问不同的数据文件。这两种数据文件紧凑,逻辑结构清晰,方便管理,而且不依赖于任何数据库技术,可移植性强,同时PMR是适用于运行时使用的数据文件,数据访问的效率比传统的组织方式有了更大的提高。应用交通、军警政府机关特殊用途、环境保护、测绘、旅游娱乐、通讯、消防、医疗等领域。三、嵌入式的功能数据 提供PMF和PMR两种格式的数据 通过多源数据无缝集成技术,用户可实现自定义格式数据 支持BMP、JPEG、SIT、PNG、ECW影像压缩等格式的数据 直接访问服务器数据,本地不保存地图数据 支持数据加密 数据编辑地图显示 地图放大、缩小、任意缩放等 地图旋转 文字的自动避让 沿线状地物流动标注文字 支持矢量/栅格符号,自定义符号 自定义线型(支持复杂线型) 高亮显示选中的实体 根据比例尺动态切换图层的显示状态 提供跟踪图层和动态显示活动物体的轨迹路径分析 最短路径分析 最佳路径分析 基于时态和规则的路径分析 动态修改路段权值 自定义路径分析模型 多种路径分析模式,适应不同规格设备空间分析和量算 点、线、面缓冲区分析 距离和面积量算 量算提供捕捉功能 裁剪、包含、重叠等空间分析算法GPS和导航 获取GPS位置信息 获取卫星状态信息 支持三种GPS数据协议,并可以自定义GPS协议解析 纠正GPS位置偏差 转弯提示 行进距离、终点距离提示查询功能 图查属性:查询实体的属性信息 SQL查询:根据属性条件查询实体 空间查询:根据空间条件查询实体 联合查询:根据属性和空间条件联合查询专题地图 提供单值专题图、分段专题图、标签专题图 标签专题图支持流动注记 支持网路数据集的结点专题图网络通讯 地图的下载和上传 浏览SuperMap IS 地图 支持WMS、WFS网络数据地图投影功能提供数十种投影变换(高斯/墨卡托/兰伯特等) 支持不同大地参照系下的坐标变换四、嵌入式的基本开发步骤 用Visual Studio 2005 VC+、 eSuperMap开发嵌入式GIS步骤:第一步:创建一个新工程第二步:开发环境设置第三步:添加工作空间、地图窗口实例第四步: 设置菜单项并生成消息响应函数第五步:实现菜单响应函数第六步:下载程序所依赖的库和数据到模拟器中第七步:编译运行程序第八步,设置其它的菜单项、消息响应函数、消息映射函数五、地图的基本操作1、地图的基本操作主要包括的内容是:工作空间的打开、关闭、保存、地图放大、地图缩小、地图漫游、自由缩放、全幅显示、显示地图等操作。2、地图基本操作的实现的主要代码有:void CMyeSuperMapApp:OnAppExit() /退出系统 m_WorkSpace.Close(); CWinApp:OnAppExit(); /退出系统关闭工作空间文件,在CMyeSuperMapView 类中,如下:void CMyeSuperMapView:OnFileClose() theApp.m_WorkSpace.Close(); m_MapWnd.Close(); m_bFileOpened = false; m_MapWnd.Refresh();地图操作方法,在CMyeSuperMapView 类中,如下:void CMyeSuperMapView:OnMapPan() /平移地图 m_MapWnd.SetAction( CSeDrawParameters:uaPan ); void CMyeSuperMapView:OnMapRefresh() /刷新 m_MapWnd.Refresh();void CMyeSuperMapView:OnMapViewentire() /整幅显示 m_MapWnd.ViewEntire();void CMyeSuperMapView:OnMapZoomin() /放大 m_MapWnd.SetAction( CSeDrawParameters:uaZoomIn );void CMyeSuperMapView:OnMapZoomout() /缩小 m_MapWnd.SetAction( CSeDrawParameters:uaZoomOut );鼠标时间响应方法,在CMyeSuperMapView 类中,如下:void CMyeSuperMapView:OnLButtonDown(UINT nFlags, CPoint point) /响应鼠标操作 m_MapWnd.OnLButtonDown(nFlags, point); CView:OnLButtonDown(nFlags, point);void CMyeSuperMapView:OnLButtonUp(UINT nFlags, CPoint point) /响应鼠标操作 m_MapWnd.OnLButtonUp(nFlags, point); CView:OnLButtonUp(nFlags, point);在OnFileOpen事件输入如下代码:void CMyeSuperMapView:OnFileOpen() CFileDialog dlgFile( true, _T(), NULL, OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT,_T(WorkSpace Files (*.pmw)|*.pmw) ); /弹出对话框选择工作空间文件 if( dlgFile.DoModal() = IDOK ) /如果已经打开工作空间文件,则先关闭 if( theApp.m_WorkSpace.IsOpen() ) theApp.m_WorkSpace.Close(); m_MapWnd.Close(); m_bFileOpened = false; /获得图形文件的完整路径及文件名 CString strFileName = dlgFile.GetPathName(); /打开工作空间 if( theApp.m_WorkSpace.Open( strFileName ) ) /与地图窗口关联 m_MapWnd.OnInitialUpdate( &theApp.m_WorkSpace, this ); /获取地图列表 CSeMaps *pMaps = theApp.m_WorkSpace.GetMaps(); if( pMaps ) if( pMaps-GetMapCount() 0 ) /如果有定义好的地图就打开第一个地图 CSeMapDef MapDef; /打开地图方法一: 通过名字取地图 CString strMapName = pMaps-GetMapNameAt(0); if( pMaps-GetMap( strMapName, MapDef ) ) if( m_MapWnd.OpenMap( MapDef ) ) m_MapWnd.Refresh(); else /没有地图,打开第一个数据源的第一个数据集作为当前地图 CSeDataSource *pDataSource = theApp.m_WorkSpace.GetDataSourceAt( 0 ); if( pDataSource & pDataSource-GetDatasetCount() 0 ) /取第一个数据集添加到地图窗口中 CSeDataset *pDataset = pDataSource-GetDatasetAt( 0 ); if( pDataset ) m_MapWnd.AddLayer( pDataset ); m_MapWnd.Refresh(); m_bFileOpened = true; 显示地图:在CMyeSuperMapView 类中,单击OnDraw函数,输入以下代码:void CMyeSuperMapView:OnDraw(CDC* pDC) CMyeSuperMapDoc* pDoc = GetDocument(); ASSERT_VALID(pDoc); / TODO: add draw code for native data here /显示地图 CRect rcClient; GetClientRect( &rcClient ); if( m_bFileOpened ) m_MapWnd.OnDraw( pDC, rcClient, rcClient ); else pDC-FillSolidRect( &rcClient, RGB(255,255,255) ); /显示地图系统启动界面:地图操作,放大:六、地图编辑操作的实现1、地图编辑可实现的主要功能是:添加节点、添加线、添加面、删除节点、删除面、线、文本编辑等。2、主要功能实现的代码如下:(1)void CcccView:OnSelectEditLayer() /弹出选择可编辑图层对话框CDlgSelectLayer dlg;dlg.m_pMapWnd = &m_MapWnd;if (dlg.DoModal()= IDOK )m_strEditableLayer = dlg.m_strLayerName;/设置可编辑图层if ( m_MapWnd.SetEditableLayer( m_strEditableLayer ) )/打开编辑工具条CMainFrame *pFrame=(CMainFrame*)AfxGetMainWnd(); pFrame-m_wndEditBar.ShowWindow( SW_SHOW );pFrame-RecalcLayout();m_MapWnd.Refresh();(2)实现添加点、线、面、文本等对象的程序代码。void CcccView:OnEditAddPoint()/设置或取消用户操作为添加点对象 if( m_MapWnd.GetAction() = CSeDrawParameters:uaEditCreatePoint )m_MapWnd.SetAction( CSeDrawParameters:uaNull );elsem_MapWnd.SetAction( CSeDrawParameters:uaEditCreatePoint );void CcccView:OnEditAddLine()/设置或取消用户操作为添加线对象if( m_MapWnd.GetAction() = CSeDrawParameters:uaEditCreateLine )m_MapWnd.SetAction( CSeDrawParameters:uaNull );elsem_MapWnd.SetAction( CSeDrawParameters:uaEditCreateLine );void CcccView:OnEditAddPolygon()/设置或取消用户操作为添加面对象if( m_MapWnd.GetAction() = CSeDrawParameters:uaEditCreatePolygon )m_MapWnd.SetAction( CSeDrawParameters:uaNull );elsem_MapWnd.SetAction( CSeDrawParameters:uaEditCreatePolygon );void CcccView:OnEditAddText()/设置或取消用户操作为添加文本对象if( m_MapWnd.GetAction() = CSeDrawParameters:uaEditCreateText )m_MapWnd.SetAction( CSeDrawParameters:uaNull );elsem_MapWnd.SetAction( CSeDrawParameters:uaEditCreateText );(3)编辑对象的代码实现void CcccView:OnEditText()/设置或取消用户操作为编辑文本对象if( m_MapWnd.GetAction() = CSeDrawParameters:uaEditEditText )m_MapWnd.SetAction( CSeDrawParameters:uaNull );elsem_MapWnd.SetAction( CSeDrawParameters:uaEditEditText );/初始化文本风格if( !m_MapWnd.InitialEditTextStyle() )CSeLayer* pEditLayer = m_MapWnd.GetLayer( m_strEditableLayer );if( pEditLayer )CSeDataset *pEditDataset = pEditLayer-GetDataset();if( pEditDataset & pEditDataset-GetType() = CSeDatasetInfo:Text )/设置编辑的文本风格和当前数据集风格相同( (CSeStyleText*)(pEditLayer-m_pStyle) )-SetFixedSizeFlag( true );m_MapWnd.SetEditTextStyle( *(CSeStyleText*)pEditLayer-m_pStyle) );(4)增加节点、线、面的代码实现。void CcccView:OnEditAddVertex()/设置或取消用户操作为添加节点if( m_MapWnd.GetAction() = CSeDrawParameters:uaEditVertexAdd )m_MapWnd.SetAction( CSeDrawParameters:uaNull );elsem_MapWnd.SetAction( CSeDrawParameters:uaEditVertexAdd );void CcccView:OnEditDeleteVe()/设置或取消用户操作为删除节点if( m_MapWnd.GetAction() = CSeDrawParameters:uaEditVertexDelete )m_MapWnd.SetAction( CSeDrawParameters:uaNull );elsem_MapWnd.SetAction( CSeDrawParameters:uaEditVertexDelete );void CcccView:OnEditEditVertex()/设置或取消用户操作为编辑节点if( m_MapWnd.GetAction() = CSeDrawParameters:uaEditVertexEdit )m_MapWnd.SetAction( CSeDrawParameters:uaNull );elsem_MapWnd.SetAction( CSeDrawParameters:uaEditVertexEdit );运行截图:七、地图查询功能的实现1、地图的查询功能包括:SQL查询、范围查询、缓冲区查询,对象缓冲区查询、量算距离、量算面积等。2、查询功能代码的实现:(1)SQL查询功能的实现:void CcccView:OnQueryBySql()/SQL查询if ( m_nUserAction = USER_ACTION_QUERY_BY_SQL )/取消SQL查询m_nUserAction = USER_ACTION_NONE;else/设置SQL查询m_nUserAction = USER_ACTION_QUERY_BY_SQL;m_MapWnd.SetAction( CSeDrawParameters:uaNull );/打开查询对话框CDlgQuery dlg;dlg.m_pMapWnd = &m_MapWnd;dlg.m_nQueryMode = m_nUserAction;/设置查询模式if ( dlg.DoModal() = IDOK )/得到查询结果m_pRecordset = dlg.m_pQueryRecord;(2)范围查询功能的实现:void CcccView:OnQueryByBounds()/范围查询if ( m_nUserAction = USER_ACTION_QUERY_BY_BOUNDS)/取消范围查询m_nUserAction = USER_ACTION_NONE;else/设置为范围查询,在OnLButtonDown()和OnLButtonDblClk()中具体实现m_nUserAction = USER_ACTION_QUERY_BY_BOUNDS;m_MapWnd.SetAction( CSeDrawParameters:uaNull );m_arrPoint.RemoveAll(); (3)对象缓冲区查询的实现:void CcccView:OnQueryByDistance()/对象缓冲查询if ( m_nUserAction = USER_ACTION_QUERY_BY_DISTANCE)/取消对象缓冲查询m_nUserAction = USER_ACTION_NONE;else/设置为对象缓冲查询,具体的实现过程是在OnLButtonDown()中m_nUserAction = USER_ACTION_QUERY_BY_DISTANCE;m_MapWnd.SetAction(CSeDrawParameters:uaPointModeSelect);/将所有图层设置为可选择long nLayCount=m_MapWnd.GetLayerCount();for (int i=nLayCount-1;i= 0; i-)CSeLayer *pLayer=m_MapWnd.GetLayerAt(i);if (pLayer!=NULL)pLayer-SetSelectable(TRUE);(4)量算距离、量算面积功能的实现:void CcccView:OnMeasureDistance()/量算距离if(m_nUserAction = USER_ACTION_MEASURE_DISTANCE)/取消m_nUserAction = USER_ACTION_NONE;else/设置用户动作为量算距离m_nUserAction = USER_ACTION_MEASURE_DISTANCE;m_MapWnd.SetAction( CSeDrawParameters:uaNull);m_arrPoint.RemoveAll(); /显示状态栏CMainFrame* pFrame = (CMainFrame*)AfxGetMainWnd();pFrame-m_wndStatusBar.ShowWindow(SW_SHOW);pFrame-RecalcLayout();void CcccView:OnMeasureArea()/量算面积if(m_nUserAction = USER_ACTION_MEASURE_AREA)/取消m_nUserAction = USER_ACTION_NONE;else/设置用户动作为量算面积m_nUserAction = USER_ACTION_MEASURE_AREA;m_MapWnd.SetAction(CSeDrawParameters:uaNull);m_arrPoint.RemoveAll();/显示状态栏CMainFrame* pFrame = (CMainFrame*)AfxGetMainWnd();pFrame-m_wndStatusBar.ShowWindow(SW_SHOW);pFrame-RecalcLayout();系统运行截图:八、路径分析1、路径分析包括:分析设置、路径分析、导出邻接矩阵等操作。2、功能实现的代码:(1)分析模型的参数设置void CcccView:OnAnalyseSetting()/分析模型设置CDlgPathAnalyseSetting dlg;if ( dlg.DoModal() = IDOK )m_nAnalystMode = dlg.m_nAnalyseMode;m_nAnalystModel = dlg.m_nAnalyseModel;m_MapWnd.SetAction( CSeDrawParameters:uaNull);elsem_nAnalystMode = 0;m_nAnalystModel = 0;(2)实现路径分析的代码设计void CcccView:OnPathAnalyse()/路径分析,具体分析在OnLButtonDown()中if ( m_nAction != PATH_ANALYSE)/设置为路径分析CSeDatasetVector* pDatasetNetwork = NULL;CDlgSelect dlg;if ( dlg.DoModal() = IDOK )pDatasetNetwork = dlg.GetDataset();if ( pDatasetNetwork )/设置要分析的网路数据集if( m_PathAnalyst.SetDatasetNetwork( pDatasetNetwork ) )/设置分析模型m_bRuleParamSetted = m_PathAnalyst.SetPathRuleParams( m_nAnalystModel );m_nAction = PATH_ANALYSE;m_MapWnd.SetAction( CSeDrawParameters:uaNull);if( m_nAnalystMode = 1 )/少内存占有方式,需要导入邻接矩阵文件,如果没有可以先导出一个if( m_bRuleParamSetted )CFileDialog dlg( TRUE, _T(snf), _T(*.snf), OFN_OVERWRITEPROMPT,_T(eSuperMap NetWo

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论