收藏 分享(赏)

GIS软件开发技术报告.doc

上传人:精品资料 文档编号:9723059 上传时间:2019-08-28 格式:DOC 页数:16 大小:622.46KB
下载 相关 举报
GIS软件开发技术报告.doc_第1页
第1页 / 共16页
GIS软件开发技术报告.doc_第2页
第2页 / 共16页
GIS软件开发技术报告.doc_第3页
第3页 / 共16页
GIS软件开发技术报告.doc_第4页
第4页 / 共16页
GIS软件开发技术报告.doc_第5页
第5页 / 共16页
点击查看更多>>
资源描述

1、目录1 项目内容 21.1 项目目的 21.2 项目任务 22 GIS 软件底层开发 .22.1 技术路线 22.1.1 需求分析 22.1.2 项目设计 32.1.3 项目开发 42.2 逻辑结构 42.3 GIS 系统功能设计 .62.3.1 功能概述 62.3.2 功能模块 73 C#.NET 与 AE 二次开发 .103.1 技术路线 103.1.1 需求分析 103.1.2 项目设计 103.1.3 项目开发 113.2 逻辑结构 113.3 GIS 系统功能设计 .113.3.1 功能概述 113.3.2 功能模块 114 总结 11GIS 软件开发技术课程实习报告院(系)名 称:

2、XXXXXXX班 级 名 称 :XXXXX学 生 姓 名 :XXXXX 年 X 月1 项目内容1.1 项目目的进一步了解 C+开发的相关知识,掌握 C+开发的基本技术,丰富 C+开发的实战经验。拓展对 C#+AE 的二次开发的认识,对接口的调用有一定的了解,其次也是为了增强自己的团队协作意识,了解软件开发的思考角度和主要流程。1.2 项目任务实习一(底层开发):解析 MIF、MID 文件并绘制;提供图-属性、属性-图的检索;符号系统符合 MapInfo 显示规范;构建空间索引,优化图形绘制和空间检索效率;实习二(二次开发):SHP 数据MIF 数据的格式转换2 GIS 软件底层开发(详)技术路

3、线2.1.1 需求分析正文:(宋体小四,首行缩进 2 字符,正文间行距固定为 23 磅)1) 任务概述:本次 GIS 的底层开发任务是基于 MFC 的图形绘制和检索,要求在windows 环境下实现地图的读取、显示、基础操作(放大、缩小) 、添加属性信息、地图目标物索引的建立和查询,根据个人需求使用vs/vc,利用 c+语言(可包括部分 c 语言) 。要求软件能够正常运行,并能够进一步做到优化和美化。2) 数据描述:数据输入:系统所针对的数据主要包括 mif 数据和 mid 数据两种类型,其中 mif 数据主要储存图形数据,mid 数据存储属性数据。数据输出:mif 数据以点、线、面、特殊符号

4、为对象以相应颜色矢量图形呈现在窗体中,mid 数据以文字形式呈现。3) 功能需求:软件的功能模块划分为文件操作,建立索引、索引查询,符号绘制,图-属性、属性-图的检索。几个模块均通过鼠标点击响应机制实现功能的操作和实现。4) 性能需求:软件的性能尽量达到最优,包括数据的精确程度、响应时间、运行时间都尽可能地达到最优。5) 运行需求:软件的运行在一般的电脑上均可正常运行,对于软件的运行错误及时检查和修复。2.1.2 项目设计1) 总体设计根据软件的需求分析进行系统总体设计,包括有系统设计阶段和结构设计阶段。其中系统设计阶段主要是对组成系统的文件、程序、文档等进行设计,确定系统的模块组成以及模块之

5、间的相互关系。结构设计则包括了功能结构、数据结构。系统需求根据系统的需求分析内容进行软件各个阶段和内容的设计。主要功能流程图:开 始读 取 数 据弹 出 对 话 框选 择 文 件确 定 读 取 文 件绘 图是 否 建 立 索 引是点 击 索 引 建 立否拉 框 选 择 检 索部 分 重 绘是 否 拉 框 放 大是在 需 要 放 大 之 处拉 框鼠 标 松 开 重 绘 以放 大否 结 束根 据 图 层 名 称 选 取 符号 类 库 中 的 相 应 符 号2) 接口设计用户接口用户通过在 PC 机上打开软件(要求运行环境为 windows 系统) ,通过对软件功能的利用进行数据的交互处理。外部接口

6、系统版本必须在 Windows7 及以上。GisApp 主应用程序必须安装在计算机上。必须留有足够的硬盘空间。内部接口通过打开文件方式获取数据信息,进行数据操作。软件的其他操作模块基于打开后显示的数据进行3) 运行设计一般的处理流程是先打开数据,随后可使用其他功能模块系统运行时有较友好的界面,基本能够实现用户的数据处理要求系统响应时间应该符合用户的一般需求,响应时间都应该在 10 秒之内2.1.3 项目开发1) 软件定义:要求实现的软件为基于底层开发的具有地理数据读取和检索功能的基础地理信息软件。2) 相关知识Mif、mid 数据读取:MIF 由文件头和数据段组成,第一部分 “文件头”定义了版

7、本信息、字符集、投影参数坐标类型与表结构。第二部分为“数据段” ,数据段包含 MAPINFO 定义的点、线、面、多义线、区域、圆弧、文本、矩形、圆角矩形和椭圆等实体。MID 属性数据文件按 MIF 中定义的属性结构分别描述了每个图形对象的属性内容。网格索引:格网型空间索引的基本思想是将研究区域用横竖线条划分大小相等或不等的格网,记录每一个格网所包含的空间实体。当用户进行空间查询时,首先计算出用户查询对象所在格网,然后再在该网格中快速查询所选空间实体,这样一来就大大地加速了空间索引的查询速度。四叉树索引:四叉树索引的基本思想是将地理空间递归划分为不同层次的树结构。它将已知范围的空间等分成四个相等

8、的子空间,如此递归下去,直至树的层次达到一定深度或者满足某种要求后停止分割。四叉树的结构比较简单,并且当空间数据对象分布比较均匀时,具有比较高的空间数据插入和查询效率。放大:图幅显示范围重新赋值和映射 ,目标重绘符号库:符号系统符合 MapInfo 显示规范。3) 项目计划:编写软件设计方案理解 mif、mid 数据组织结构掌握 C+/C 语言关于读取数据的函数和语句设计地图数据存储结构建立符号库绘制地图建立索引类、索引管理类初始化索引网格和网格动态数组查询操作4) 项目实施:根据软件设计书进行软件的编码与测试5) 项目交付:第一阶段:数据的读取和绘制第二阶段:软件成果汇总2.2 逻辑结构程序

9、的实现按照面向对象的算法进行设计,利用了类的封装、继承、多态性。1) 地图数据存储的逻辑结构2) 网格索引类3) 建立索引CGeoMapCGeoLayer1 CGeoLayer2 CGeoObjectCGeoPoint CGeoPolyline CGeoPolygonCgeoAnno索 引 域 CSpatialIndexArea()变 量函 数对 象 ID索 引 idxID索 引 域 边 界 indexBounding判 断 矩 形 相 交IsPolygonInter判 断 点 在 矩 形 内IsInside判 断 线 与 矩形 相 交IsPolylineInter查 找 对 象SearchI

10、ndexAreaObject绘 制 索 引 格 Draw(CDC *pDC)添 加 对 象 标 志 AddID索 引 管 理CSpatialIndex()变 量行 列 数 m, n索 引 范 围indexRect索 引 数 组idxAreas查 找 索 引 域SIndexAreas函 数绘 制 Draw(CDC *pDC)创 建 索 引CreateIndexArea()设 置 索 引SetSpatialIndex添 加 索 引 域AddIndexArea查 询 索 引 域SearchIndexArea开 始是 否 建 立 索引 是 是 否 建 立 网格 索 引 是 设 置 网 格 行 列数 、

11、 索 引 范 围 初 始 化 网 格 将 网 格 所 覆 盖的 对 象 加 入 网格 对 象 数 组 内否是 否 建 立 四叉 树 索 引否结 束否设 置 四 叉 树 深度 、 索 引 范 围 初 始 化 网 格 将 处 于 叶 节 点的 网 格 所 覆 盖的 对 象 加 入 到网 格 的 对 象 数组 内4) 索引查询开 始已 选 择 格 网 索 引 否 已 选 择 四 叉 树 索 引否结 束是鼠 标 绘 制 矩 形 框遍 历 所 有 网 格 找 出 与 当 前矩 形 区 域 有 交 集 的 网 格对 于 以 上 结 果 网 格 逐 一 遍历 其 中 对 象 , 判 断 是 否 与当 前 矩

12、 形 相 交对 于 选 中 的 目 标 进 行 重 绘鼠 标 绘 制 矩 形 框从 四 叉 树 最 顶 端 开 始对 父 节 点 进 行 遍 历 , 选 出与 矩 形 有 交 集 的 节 点对 每 个 选 中 的 父 节 点 遍 历它 们 的 子 节 点 选 出 与 矩 形有 交 集 的 子 节 点以 选 中 的 子 节 点 重 新 做 为父 节 点 进 行 以 上 相 同 遍 历直 到 叶 节 点 结 束对 于 选 中 的 叶 节 点 遍 历 其中 的 对 象 , 判 断 与 矩 形 是否 有 交 集选 出 有 交 集 的 对 象 进 行 重绘2.3 GIS 系统功能设计2.3.1 功能概述

13、要求软件能够解析 MIF、MID 文件并进行绘制;提供图-属性、属性-图的检索;其次构建空间索引,实现查询操作,优化图形绘制和空间检索效率;其中符号系统的设计要符合 MapInfo 显示规范。2.3.2 功能模块1) 打开文件显示功能描述用于打开文件夹读取文件内容(这里为 mif、mid 数据) ,并显示出来性能根据数据量的多少,数据打开和绘制的时间会由实际情况的不同而有所不同。这里所用的数据显示时间不超过 5 秒输入项目在输入文件中选择要输入打开的 mif、mia 文件输出项目这里只要求数据以图形的形式显示出来,不要求进行其他的输出功能算法SHGetPathFromIDList(pList,

14、 szPath) /把指定的文档或目录地点转换为文档系统路径OnOpenFolder(szPath);/通过路径打开文件夹MIFPaths.Add(finder.GetFilePath();/列举所有的在当前目录下的文件,并且将他们的文件名存储在数组里面ReadMIFData(MIFPaths.GetAt(i);/逐个读取文件_wfopen_s(/打开mif数据_ wfopen_s(/打开 mid 数据geomap.AddLayer(layer);/逐图层添加layer-AddObject(obj);/逐对象添加(CGeoPolyline *)obj)-AddPoint(CPoint(x1,

15、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

16、+ 1000, pt.y + 1000);/画面void CGeoPolygon:Draw(CDC *pDC)pDC-Polygon(pts.GetData(),pts.GetSize();接口通过按钮和菜单进行相应函数的调用,进而完成数据打开和绘制功能的实现。开 始读 取 数 据浏 览 文 件 夹OnFileOpen()读 取 文 件 夹OnOpenFolder读 取 数 据ReadMIFData读 取 目 标 对 象 数据 和 属 性 数 据CGeoObject线(CGeoPolyline *)obj)-AddPoint点(CGeoPoint*)obj)-pt=CPoint面(CGeoPo

17、lygon*)obj)-AddPoint图 层 layer-AddObject(obj)地 图geomap.AddLayer(layer)画 图geomap.Draw(pDC)geoLayers.GetAt(i)-Draw(pDC)geoObjts.GetAt(i)-Draw(pDC)CGeoPoint:Draw(CDC* pDC)CGeoPolyline:Draw(CDC *pDC)CGeoPolygon:Draw(CDC *pDC)坐 标 映 射OnPrepareDC(CDC* pDC, CPrintInfo* pInfo)结 束限制条件打开的数据量不能过大,否则会引起系统反应延时等情况;

18、打开数据类型限制为 mif 和 mid 数据。2) 建立索引功能描述对于网格索引而言,建立 mn 的格网(这里在程序内部赋值) ,对每一个网格,遍历所有对象并进行判断,若对象与当前格网相交或包含于格网中,则将对象存储在网格的对象数组中。对于四叉树索引,设定子节点网格的对象数目阈值,要求每一个处于子节点的网格数组所包含的数量都不低于这个阈值,即每做一次网格的四象限划分都进行一次判断。性能格网索引适合于数据量较大的项目建立相应索引,建立的效率高;四叉树索引适合于数据量一般,索引的建立略显麻烦。输入项目鼠标操作指令。输出项目索引的建立和绘制算法建立索引void CTESTGISView:OnGrid

19、Index()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);/加

20、入目标/面状目标if (area-IsInside(pt, area-indexBounding)area-AddObj(obj);/加入目标geomap.spatialIndex-Draw(pDC);绘制网格接口通过按钮和菜单进行相应函数的调用,完成相应索引类型的建立开 始 建 立 索 引OnGridIndex()初 始 化 索 引IntlzIdxArea( )设 置 索 引 行 列 数 、范 围SetSpatialIndex( )初 始 化 索 引 动 态 数组InitlizeIdxArea()创 建 索 引CreateIndexArea()绘 制 索 引 窗 格spatialIndex-

21、Draw(pDC)限制条件格网索引的行列数和四叉树索引的深度都在程序内部实现了设置,大大缩小了程序的适用范围和使用适度3) 索引查询功能描述获取鼠标在屏幕上绘制的矩形,对于网格索引,逐一遍历网格,判断矩形区域与当网格是否有交集,若有交集则对当前网格内所包含的所有对象逐一遍历,判断是否与矩形区域有交集,若有交集则对该目标进行重绘且颜色要有所改变以区分其他未被选中的目标;对于四叉树索引,由父节点开始,若有交集,则遍历此父节点的子节点,对每一个子节点做同样的父节点处理,直到到达叶节点结束,对于所有与矩形区域有交集的子节点网格,逐一遍历其中的对象,判断是否与矩形区域有交集,若有交集则对该目标进行重绘且

22、颜色要有所改变以区分其他未被选中的目标;性能网格索引查询适合于数据量大的项目,查询算法简单,查询效率高,四叉树索引适合数据量相对较小的项目,查询效率高输入项目根据鼠标在屏幕上的绘制输入框选矩形输出项目对于被选中的目标进行重绘算法void CTESTGISView:BoxSelected()geomap.spatialIndex-SearchIndexArea(int size = geomap.spatialIndex-SIndexAreas.GetSize();for (int i = 0; i SIndexAreas.GetAt(i);indexArea-SearchIndexObj(/重

23、绘点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);接口通过鼠标点击和菜单进行相应函数的调用,完成相应索引类型的建立开 始拉 框BoxSelected()鼠 标 按 下OnLButtonDown鼠 标 松 开OnLButtonUp记 录 与 矩 形 相 交格 网SearchIndex

24、Area(CRect *rect)查 询 目 标SearchIndexObj(CRect *rect, CDC *pDC)重 绘 obj)-Draw(pDC)限制条件目前程序只能满足拉框检索4) 放大功能描述选择拉框放大菜单选项,用鼠标在屏幕需要进行放大的地方绘制合适的矩形框,鼠标松开即可实现放大操作性能由于所显示的地图内容均为矢量数据,并且地图的放大操作是基于重绘实现的,所以放大操作所用的时间依赖于数据量的大小输入项目鼠标在屏幕绘制矩形框输出项目放大后得到的局部图像算法void CTESTGISView:OnEnlarge()if (isLarge)if (abs(pt1.x - pt2.x

25、)pt2.x ? pt2.x : pt1.x;geomap.wcRect.right = pt1.xpt2.y ? pt2.y : pt1.y;Invalidate();接口通过鼠标点击菜单选项和屏幕操作开 始拉 框 放 大OnEnlarge()地 图 显 示 区 域 变换重 绘Invalidate()结 束限制条件只实现了拉框放大,其他放大功能未实现3 C#.NET 与 AE 二次开发(略)技术路线3.1.1 需求分析1) 任务概述:本次 GIS 的二次开发任务是基于 C#与 AE 的数据格式转换,要求在windows 环境下实现 shp 数据的读取、shp 数据转换为 mif 数据。 2)

26、 数据描述:数据输入:输入 shp 数据数据输出:数据输出为 mif 数据格式3) 功能需求:软件的功能要求实现 shp 数据的读取和 shp 数据转换为 mif 数据4) 性能需求:软件的性能尽量达到最优,包括数据的精确程度、响应时间、运行时间都尽可能地达到最优。5) 运行需求:软件的运行在一般的电脑上均可正常运行,对于软件的运行错误及时检查和修复。3.1.2 项目设计1) 设计思想:二次开发使用 vs 开发环境加以实现,并使用了 ESRI interop 程序集,它服务于被放置在.NET 窗体上的、位于.NET 窗体控件中的 ArcGIS 控件,这些程序集在托管的.NET 代码和非托管的

27、COM 代码之间起了桥梁作用。2) 主要功能流程:开始读取数据弹出对话框选择 shp 文件确定保存选择保存路径及输入 mif 文件名确定转化结束3) 接口设计:输入shp文件路径OpenFileDialog()string fullpath = fd.FileName;/文件路径名Shapepath = System.IO.Path.GetDirectoryName(fullpath);/得到文件的路径名 Shapename = System.IO.Path.GetFileNameWithoutExtension(fullpath);/不包括后缀的文件名textInShape.Text = f

28、ullpath;输出 mif 文件路径SaveFileDialog()string fullpath = sf.FileName;Mifpath = System.IO.Path.GetDirectoryName(fullpath);Mifname = System.IO.Path.GetFileNameWithoutExtension(fullpath);textOutMif.Text = fullpath;格式转换StreamWriter myWrite = new StreamWriter(myStream);/写文件IWorkspace pWS = pWSF.OpenFromFile(

29、fullpath, 0)/打开工作空间IFeatureClass pFeatureClass = pFWS.OpenFeatureClass(filename);/打开要素类IFeatureCursor pFeatureCursor = pFeatureClass.Search(null, false);/逐一要素访问写文件头/if (geotype = esriGeometryType.esriGeometryPoint)/点else if (geotype = esriGeometryType.esriGeometryPolyline)/线else if (geotype = esriGe

30、ometryType.esriGeometryPolygon)/面myWrite.WriteLine();3.1.3 项目开发3.2 逻辑结构开 始输 入 文 件 路径 、 名 称Shapepath、 Shapename输 出 文 件 路径 、 名 称Mifpath、Mifname开 始 转 换打 开 工 作 空 间IWorkspaceFactory写 文 件 信 息myWrite.WriteLine3.3 GIS 系统功能设计3.3.1 功能概述输入 shp 文件路径,输出 mif 文件路径,进行格式转换3.3.2 功能模块根据软件的需求分析进行系统总体设计,包括有系统设计阶段和结构设计阶段

31、。其中系统设计阶段主要是对组成系统的文件、程序、文档等进行设计,确定系统的模块组成以及模块之间的相互关系。结构设计则包括了功能结构、数据结构。1) 读取 shp 文件利用 Iworkspace 接口来对 Gis 中的数据库文件进行操作,因为 shp 文件是点集集合、数据集合和其索引文件的集合,所以需要通过专门的接口来实现。2) 写入 mif 数据通过接口调用函数,判断读取信息类型,根据不同类型信息编辑数据4 总结本次实习我主要操作了底层开发的内容,从读取 mif 数据开始逐渐从基础学起,通过网上查阅和反复询问,尝试和反复修改逐渐在编写程序的过程中理解其中的逻辑结构和语法,在实习的中段开始认识到一直困惑和为难的函数和语句的使用其实并非很关键,重要的是编程的思路要理清,对类的封装和调用之间的关系要清楚,而需要用到哪些函数或功能可以查阅相关资料和示例,理解之后转换为自己的内容即可。

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 企业管理 > 管理学资料

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报