GIS软件开发技术报告.docx_第1页
GIS软件开发技术报告.docx_第2页
GIS软件开发技术报告.docx_第3页
GIS软件开发技术报告.docx_第4页
GIS软件开发技术报告.docx_第5页
已阅读5页,还剩11页未读 继续免费阅读

下载本文档

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

文档简介

目录1项目内容21.1项目目的21.2项目任务22GIS软件底层开发22.1技术路线22.1.1需求分析22.1.2项目设计32.1.3项目开发42.2逻辑结构42.3GIS系统功能设计62.3.1功能概述62.3.2功能模块73C#.NET与AE二次开发103.1技术路线103.1.1需求分析103.1.2项目设计103.1.3项目开发113.2逻辑结构113.3GIS系统功能设计113.3.1功能概述113.3.2功能模块114总结11GIS软件开发技术课程实习报告院(系)名 称:XXXXXXX班 级 名 称 :XXXXX学 生 姓 名 :XXX XX年X月1 项目内容1.1 项目目的进一步了解C+开发的相关知识,掌握C+开发的基本技术,丰富C+开发的实战经验。拓展对C#+AE的二次开发的认识,对接口的调用有一定的了解,其次也是为了增强自己的团队协作意识,了解软件开发的思考角度和主要流程。1.2 项目任务实习一(底层开发):解析MIF、MID文件并绘制;提供图-属性、属性-图的检索;符号系统符合MapInfo显示规范;构建空间索引,优化图形绘制和空间检索效率;实习二(二次开发):SHP数据MIF数据的格式转换2 GIS软件底层开发(详)22.1 技术路线2.1.1 需求分析正文:(宋体小四,首行缩进2字符,正文间行距固定为23磅)1) 任务概述:本次GIS的底层开发任务是基于MFC的图形绘制和检索,要求在windows环境下实现地图的读取、显示、基础操作(放大、缩小)、添加属性信息、地图目标物索引的建立和查询,根据个人需求使用vs/vc,利用c+语言(可包括部分c语言)。要求软件能够正常运行,并能够进一步做到优化和美化。2) 数据描述:l 数据输入:系统所针对的数据主要包括mif数据和mid数据两种类型,其中mif数据主要储存图形数据,mid数据存储属性数据。l 数据输出:mif数据以点、线、面、特殊符号为对象以相应颜色矢量图形呈现在窗体中,mid数据以文字形式呈现。3) 功能需求:软件的功能模块划分为文件操作,建立索引、索引查询,符号绘制,图-属性、属性-图的检索。几个模块均通过鼠标点击响应机制实现功能的操作和实现。4) 性能需求:软件的性能尽量达到最优,包括数据的精确程度、响应时间、运行时间都尽可能地达到最优。5) 运行需求:软件的运行在一般的电脑上均可正常运行,对于软件的运行错误及时检查和修复。2.1.2 项目设计1) 总体设计根据软件的需求分析进行系统总体设计,包括有系统设计阶段和结构设计阶段。其中系统设计阶段主要是对组成系统的文件、程序、文档等进行设计,确定系统的模块组成以及模块之间的相互关系。结构设计则包括了功能结构、数据结构。l 系统需求根据系统的需求分析内容进行软件各个阶段和内容的设计。l 主要功能流程图:2) 接口设计l 用户接口用户通过在PC机上打开软件(要求运行环境为windows系统),通过对软件功能的利用进行数据的交互处理。l 外部接口系统版本必须在Windows7及以上。GisApp主应用程序必须安装在计算机上。必须留有足够的硬盘空间。l 内部接口通过打开文件方式获取数据信息,进行数据操作。软件的其他操作模块基于打开后显示的数据进行3) 运行设计l 一般的处理流程是先打开数据,随后可使用其他功能模块l 系统运行时有较友好的界面,基本能够实现用户的数据处理要求l 系统响应时间应该符合用户的一般需求,响应时间都应该在10秒之内2.1.3 项目开发1) 软件定义:要求实现的软件为基于底层开发的具有地理数据读取和检索功能的基础地理信息软件。2) 相关知识l Mif、mid数据读取:MIF由文件头和数据段组成,第一部分“文件头”定义了版本信息、字符集、投影参数坐标类型与表结构。第二部分为“数据段”,数据段包含MAPINFO定义的点、线、面、多义线、区域、圆弧、文本、矩形、圆角矩形和椭圆等实体。MID属性数据文件按MIF中定义的属性结构分别描述了每个图形对象的属性内容。l 网格索引:格网型空间索引的基本思想是将研究区域用横竖线条划分大小相等或不等的格网,记录每一个格网所包含的空间实体。当用户进行空间查询时,首先计算出用户查询对象所在格网,然后再在该网格中快速查询所选空间实体,这样一来就大大地加速了空间索引的查询速度。l 四叉树索引:四叉树索引的基本思想是将地理空间递归划分为不同层次的树结构。它将已知范围的空间等分成四个相等的子空间,如此递归下去,直至树的层次达到一定深度或者满足某种要求后停止分割。四叉树的结构比较简单,并且当空间数据对象分布比较均匀时,具有比较高的空间数据插入和查询效率。l 放大:图幅显示范围重新赋值和映射 ,目标重绘l 符号库:符号系统符合MapInfo显示规范。3) 项目计划:编写软件设计方案理解mif、mid数据组织结构掌握C+/C语言关于读取数据的函数和语句设计地图数据存储结构建立符号库绘制地图建立索引类、索引管理类初始化索引网格和网格动态数组查询操作4) 项目实施:根据软件设计书进行软件的编码与测试5) 项目交付:第一阶段:数据的读取和绘制第二阶段:软件成果汇总2.2 逻辑结构程序的实现按照面向对象的算法进行设计,利用了类的封装、继承、多态性。1) 地图数据存储的逻辑结构2) 网格索引类3) 建立索引4) 索引查询2.3 GIS系统功能设计2.3.1 功能概述要求软件能够解析MIF、MID文件并进行绘制;提供图-属性、属性-图的检索;其次构建空间索引,实现查询操作,优化图形绘制和空间检索效率;其中符号系统的设计要符合MapInfo显示规范。2.3.2 功能模块1) 打开文件显示l 功能描述用于打开文件夹读取文件内容(这里为mif、mid数据),并显示出来l 性能根据数据量的多少,数据打开和绘制的时间会由实际情况的不同而有所不同。这里所用的数据显示时间不超过5秒l 输入项目在输入文件中选择要输入打开的mif、mia文件l 输出项目这里只要求数据以图形的形式显示出来,不要求进行其他的输出功能l 算法SHGetPathFromIDList(pList, szPath) /把指定的文档或目录地点转换为文档系统路径OnOpenFolder(szPath);/通过路径打开文件夹MIFPaths.Add(finder.GetFilePath();/列举所有的在当前目录下的文件,并且将他们的文件名存储在数组里面ReadMIFData(MIFPaths.GetAt(i);/逐个读取文件_wfopen_s(&fp, MIFData, _T(r);/打开mif数据 _ wfopen_s(&fp1, MIDData, _T(r);/打开mid数据geomap.AddLayer(layer);/逐图层添加layer-AddObject(obj);/逐对象添加(CGeoPolyline *)obj)-AddPoint(CPoint(x1, y1);/线的坐标数据(CGeoPoint*)obj)-pt=CPoint(x1,y1);/点的坐标数据(CGeoPolygon*)obj)-AddPoint(CPoint(x1, y1);/面的坐标数据geomap.wcRect = mapRect;/获得图幅显示范围/画线void CGeoPolyline:Draw(CDC *pDC)pDC-MoveTo(pts.GetAt(0);pDC-LineTo(pts.GetAt(i);/画线pDC-TextOut(pt.x, pt.y, ColumnName);pDC-Ellipse(pt.x - 1000, pt.y - 1000, pt.x + 1000, pt.y + 1000);/画面void CGeoPolygon:Draw(CDC *pDC)pDC-Polygon(pts.GetData(),pts.GetSize();l 接口通过按钮和菜单进行相应函数的调用,进而完成数据打开和绘制功能的实现。l 限制条件打开的数据量不能过大,否则会引起系统反应延时等情况;打开数据类型限制为mif和mid数据。2) 建立索引l 功能描述对于网格索引而言,建立mn的格网(这里在程序内部赋值),对每一个网格,遍历所有对象并进行判断,若对象与当前格网相交或包含于格网中,则将对象存储在网格的对象数组中。对于四叉树索引,设定子节点网格的对象数目阈值,要求每一个处于子节点的网格数组所包含的数量都不低于这个阈值,即每做一次网格的四象限划分都进行一次判断。l 性能格网索引适合于数据量较大的项目建立相应索引,建立的效率高;四叉树索引适合于数据量一般,索引的建立略显麻烦。l 输入项目鼠标操作指令。l 输出项目索引的建立和绘制l 算法建立索引void CTESTGISView:OnGridIndex()geomap.IntlzIdxArea(a, b);/传递索引行列数spatialIndex-SetSpatialIndex(wcRect, x, y);/设置索引参数geoLayer-InitlizeIdxArea();/初始化索引动态数组/点状目标if (area-IsPolygonInter(rectMIN,area-indexBounding)/判断目标与当前格网区域是否相交area-AddObj(obj);/加入目标/线状目标if (area-IsPolylineInter(pt1, pt2, area-indexBounding)area-AddObj(obj);/加入目标/面状目标if (area-IsInside(pt, area-indexBounding)area-AddObj(obj);/加入目标geomap.spatialIndex-Draw(pDC);绘制网格l 接口通过按钮和菜单进行相应函数的调用,完成相应索引类型的建立l 限制条件格网索引的行列数和四叉树索引的深度都在程序内部实现了设置,大大缩小了程序的适用范围和使用适度3) 索引查询l 功能描述获取鼠标在屏幕上绘制的矩形,对于网格索引,逐一遍历网格,判断矩形区域与当网格是否有交集,若有交集则对当前网格内所包含的所有对象逐一遍历,判断是否与矩形区域有交集,若有交集则对该目标进行重绘且颜色要有所改变以区分其他未被选中的目标;对于四叉树索引,由父节点开始,若有交集,则遍历此父节点的子节点,对每一个子节点做同样的父节点处理,直到到达叶节点结束,对于所有与矩形区域有交集的子节点网格,逐一遍历其中的对象,判断是否与矩形区域有交集,若有交集则对该目标进行重绘且颜色要有所改变以区分其他未被选中的目标;l 性能网格索引查询适合于数据量大的项目,查询算法简单,查询效率高,四叉树索引适合数据量相对较小的项目,查询效率高l 输入项目根据鼠标在屏幕上的绘制输入框选矩形l 输出项目对于被选中的目标进行重绘l 算法 void CTESTGISView:BoxSelected()geomap.spatialIndex-SearchIndexArea(&rect);int size = geomap.spatialIndex-SIndexAreas.GetSize();for (int i = 0; i SIndexAreas.GetAt(i);indexArea-SearchIndexObj(&rect, dc);/重绘点if (IsInside(pt, rect)(CGeoPoint*)obj)-Draw(pDC);/重绘线if (IsPolylineInter(pt1, pt2, rect)(CGeoPolyline*)obj)-Draw(pDC);/重绘面if (IsPolygonInter(rect1,rect)(CGeoPolygon *)obj)-Draw(pDC);l 接口通过鼠标点击和菜单进行相应函数的调用,完成相应索引类型的建立l 限制条件目前程序只能满足拉框检索4) 放大l 功能描述选择拉框放大菜单选项,用鼠标在屏幕需要进行放大的地方绘制合适的矩形框,鼠标松开即可实现放大操作l 性能由于所显示的地图内容均为矢量数据,并且地图的放大操作是基于重绘实现的,所以放大操作所用的时间依赖于数据量的大小l 输入项目鼠标在屏幕绘制矩形框l 输出项目放大后得到的局部图像l 算法 void CTESTGISView:OnEnlarge()if (isLarge)if (abs(pt1.x - pt2.x)2 | abs(pt1.y - pt2.y)pt2.x ? pt2.x : pt1.x;geomap.wcRect.right = pt1.xpt2.x ? pt2.x : pt1.x;geomap.wcRect.bottom = pt1.ypt2.y ? pt2.y : pt1.y;Invalidate();l 接口通过鼠标点击菜单选项和屏幕操作l 限制条件只实现了拉框放大,其他放大功能未实现3 C#.NET与AE二次开发(略)33.1 技术路线3.1.1 需求分析1) 任务概述:本次GIS的二次开发任务是基于C#与AE的数据格式转换,要求在windows环境下实现shp数据的读取、shp数据转换为mif数据。 2) 数据描述:l 数据输入:输入shp数据l 数据输出:数据输出为mif数据格式3) 功能需求:软件的功能要求实现shp数据的读取和shp数据转换为mif数据4) 性能需求:软件的性能尽量达到最优,包括数据的精确程度、响应时间、运行时间都尽可能地达到最优。5) 运行需求:软件的运行在一般的电脑上均可正常运行,对于软件的运行错误及时检查和修复。3.1.2 项目设计1) 设计思想:二次开发使用vs开发环境加以实现,并使用了ESRI interop程序集,它服务于被放置在.NET窗体上的、位于.NET 窗体控件中的ArcGIS控件,这些程序集在托管的.NET代码和非托管的COM代码之间起了桥梁作用。2) 主要功能流程:开始读取数据弹出对话框选择shp文件确定保存选择保存路径及输入mif文件名确定转化结束3) 接口设计:l 输入shp文件路径OpenFileDialog()string fullpath = fd.FileName;/文件路径名Shapepath = System.IO.Path.GetDirectoryName(fullpath);/得到文件的路径名 Shapename = System.IO.Path.GetFileNameWithoutExtension(fullpath);/不包括后缀的文件名textInShape.Text = fullpath;l 输出mif文件路径SaveFileDialog()string fullpath = sf.FileName;Mifpath = System.IO.Path.GetDirectoryName(fullpath);Mifname = System.IO.Path.GetFileNameWithoutExtension(fullpath);textOutMif.Text = fullpath;l 格式转换StreamWriter myWrite = new StreamWriter(myStream);/写文件IWorkspace pWS = pWSF.OpenFromFile(fullpath, 0)/打开工作空间IFeatureClass pFeatureClass = pFWS.OpenFeatureClass(filename);/打开要素类IFeatureCursor pFeatureCursor = pFeatur

温馨提示

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

评论

0/150

提交评论