GIS软件开发技术报告.docx
- 文档编号:13991859
- 上传时间:2023-06-19
- 格式:DOCX
- 页数:20
- 大小:593.83KB
GIS软件开发技术报告.docx
《GIS软件开发技术报告.docx》由会员分享,可在线阅读,更多相关《GIS软件开发技术报告.docx(20页珍藏版)》请在冰点文库上搜索。
GIS软件开发技术报告
1项目容3
1.1项目目的3
1.2项目任务3
2GIS软件底层开发3
2.1技术路线3
2.1.1需求分析3
2.1.2项目设计4
2.1.3项目开发5
2.2逻辑结构5
2.3GIS系统功能设计7
2.3.1功能概述7
2.3.2功能模块8
3C#.NET与AE二次开发14
3.1技术路线14
3.1.1需求分析14
3.1.2项目设计15
3.1.3项目开发15
3.2逻辑结构15
3.3GIS系统功能设计16
3.3.1功能概述16
3.3.2功能模块16
4总结16
GIS软件开发技术课程
实习报告
院(系)名称:
XXXXXXX班级名称:
XXXXX学生姓名:
XXX
XX年X月
1项目容
1.1项目目的
进一步了解C++开发的相关知识,掌握C++开发的基本技术,丰富C++开发的实战经验。
拓展对C#+AE的二次开发的认识,对接口的调用有一定的了解,其次也是为了增强自己的团队协作意识,了解软件开发的思考角度和主要流程。
1.2项目任务
实习一(底层开发):
解析MIF、MID文件并绘制;
提供图->属性、属性->图的检索;
符号系统符合Maplnfo显示规;
构建空间索引,优化图形绘制和空间检索效率;
实习二(二次开发):
SHP数据tMIF数据的格式转换
2GIS软件底层开发(详)
2.1技术路线
2.1.1需求分析
正文:
(宋体小四,首行缩进2字符,正文间行距固定为23磅)
1)任务概述:
本次GIS的底层开发任务是基于MFC的图形绘制和检索,要求在windows环境下实现地图的读取、显示、基础操作(放大、缩小)、添加属性信息、地图目标物索引的建立和查询,根据个人需求使用vs/vc,
利用C++语言(可包括部分c语言)。
要求软件能够正常运行,并能够进一步做到优化和美化。
2)数据描述:
+数据输入:
系统所针对的数据主要包括mif数据和mid数据两种类型,其中mif数据主要储存图形数据,mid数据存储属性数据。
-数据输出:
mif数据以点、线、面、特殊符号为对象以相应颜色矢
量图形呈现在窗体中,mid数据以文字形式呈现。
3)功能需求:
软件的功能模块划分为文件操作,建立索引、索引查询,符号绘制,图-属性、属性-图的检索。
几个模块均通过鼠标点击响应机制实现功能的操作和实现。
4)性能需求:
软件的性能尽量达到最优,包括数据的精确程度、响应时间、运行时间都尽可能地达到最优。
5)运行需求:
软件的运行在一般的电脑上均可正常运行,对于软件的运行错误及时检查和修复。
2.1.2项目设计
1)总体设计
根据软件的需求分析进行系统总体设计,包括有系统设计阶段和结构设计阶段。
其中系统设计阶段主要是对组成系统的文件、程序、文档等进行设计,确定系统的模块组成以及模块之间的相互关系。
结构设计则包括了功能结构、数据结构。
+系统需求
根据系统的需求分析容进行软件各个阶段和容的设计。
+主要功能流程图:
2)接口设计
+用户接口
用户通过在PC机上打开软件(要求运行环境为windows系统),通过对软件功能的利用进行数据的交互处理。
+外部接口
系统版本必须在Windows7及以上。
GisApp主应用程序必须安装在计算机上。
必须留有足够的硬盘空间。
+部接口
通过打开文件方式获取数据信息,进行数据操作。
软件的其他操作模块基于打开后显示的数据进行
3)运行设计
,叫一般的处理流程是先打开数据,随后可使用其他功能模块
+系统运行时有较友好的界面,基本能够实现用户的数据处理要求
+系统响应时间应该符合用户的一般需求,响应时间都应该在10秒之
2.1.3项目开发
1)软件定义:
要现的软件为基于底层开发的具有地理数据读取和检索功能的基础地理信息软件。
2)相关知识
4-Mif、mid数据读取:
MIF由文件头和数据段组成,第一部分“文件头”定义了版本信息、字符集、投影参数坐标类型与表结构。
第二部分为“数据段”,数
据段包含MAPINFO定义的点、线、面、多义线、区域、圆弧、文本、矩形、圆角矩形和椭圆等实体。
MID属性数据文件按MIF中定义的属性结构分别描述了每个图形对象的属性容。
-网格索引:
格网型空间索引的基本思想是将研究区域用横竖线条划分大小相等或不等的格网,记录每一个格网所包含的空间实体。
当用户进行空间查询时,首先计算出用户查询对象所在格网,然后再在该网格中快速查询所选空间实体,这样一来就大加速了空间索引的查询速度。
-四叉树索引:
四叉树索引的基本思想是将地理空间递归划分为不同层次的树结构。
它将已知围的空间等分成四个相等的子空间,如此递归下去,直至树
的层次达到一定深度或者满足某种要求后停止分割。
四叉树的结构比较简单,
并且当空间数据对象分布比较均匀时,具有比较高的空间数据插入和查询效率。
-放大:
图幅显示围重新赋值和映射,目标重绘
-符号库:
符号系统符合MapInfo显示规。
3)项目计划:
编写软件设计方案t理解mif>mid数据组织结构宀掌握C++/C语言关于读取数据的函数和语句t设计地图数据存储结构t建立符号库t绘制地图t建立索引类、索引管理类t初始化索引网格和网格动态数组t查询操作
4)项目实施:
根据软件设计书进行软件的编码与测试
5)项目交付:
第一阶段:
数据的读取和绘制第二阶段:
软件成果汇总
2.2逻辑结构
程序的实现按照面向对象的算法进行设计,利用了类的封装、继承、多态性。
1)地图数据存储的逻辑结构
CGeoMap
2)网格索引类
4)
索引查询
2.3GIS系统功能设计
2.3.1功能概述
要求软件能够解析MIF、MID文件并进行绘制;提供图->属性、属性->图的检索;其次构建空间索引,实现查询操作,优化图形绘制和空间检索效率;其中符号系统的设计要符合
MapInfo显示规。
2.3.2功能模块
1)打开文件显示
J!
功能描述
用于打开文件夹读取文件容(这里为mif、mid数据),并显示出来
J!
性能
根据数据量的多少,数据打开和绘制的时间会由实际情况的不同而有所不同。
这里所用的数据显示时间不超过5秒
-输入项目
在输入文件中选择要输入打开的mif、mia文件
小输出项目
这里只要求数据以图形的形式显示出来,不要求进行其他的输出功能
小算法
SHGetPathFromlDList(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;//获得图幅显示围
///////////////画线
voidCGeoPolyline:
:
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);
//////////////画面
voidCGeoPolygon:
:
Draw(CDC*pDC)
pDC->Polygon(pts.GetData(),pts.GetSize());
H接口
通过按钮和菜单进行相应函数的调用,进而完成数据打开和绘制功能的实现。
—限制条件
打开的数据量不能过大,否则会引起系统反应延时等情况;打开数据类型限制为mif和mid数据。
2)建立索引
-功能描述
对于网格索引而言,建立mxn的格网(这里在程序部赋值),对每一个网格,遍历所有对象并进行判断,若对象与当前格网相交或包含于格网中,则将对象
存储在网格的对象数组中。
对于四叉树索引,设定子节点网格的对象数目阈值,要求每一个处于子节点的网格数组所包含的数量都不低于这个阈值,即每做一次网格的四象限划分都进行一次判断。
』\性能
格网索引适合于数据量较大的项目建立相应索引,建立的效率高;四叉树索引
适合于数据量一般,索引的建立略显麻烦。
亠输入项目
鼠标操作指令。
索引的建立和绘制
-算法
建立索引
voidCTESTGISView:
:
OnGridlndex()
geomap.lntlzldxArea(a,b);〃传递索引行列数
spatiallndex->SetSpatiallndex(wcRect,x,y);〃设置索引参数
geoLayer->lnitlizeldxArea();〃初始化索引动态数组
////////////////////点状目标
if(area->lsPolygonlnter(rectMIN,area->indexBounding))〃判断目标与当前格网区域是否相交{
area->AddObj(obj);〃加入目标
}
////////////////////线状目标
if(area->lsPolylinelnter(pt1,pt2,area->indexBounding))
{
area->AddObj(obj);//加入目标
}
////////////////////面状目标
if(area->lsInside(pt,area->indexBounding))
{
area->AddObj(obj);//加入目标
}
geomap.spatiallndex->Draw(pDC);绘制网格
-接口
通过按钮和菜单进行相应函数的调用,完成相应索引类型的建立
创建索引
CreateIndexArea(
)
绘制索引窗格
spatiallndex
>Draw(pDq
设置索引行列数、范围
SetSpatiallndex()
初始化索引动态数组
InitlizeIdxAre
a()
-限制条件
格网索引的行列数和四叉树索引的深度都在程序部实现了设置,大大缩小了程
序的适用围和使用适度
3)索引查询
-功能描述
获取鼠标在屏幕上绘制的矩形,对于网格索引,逐一遍历网格,判断矩形区域
与当网格是否有交集,若有交集则对当前网格所包含的所有对象逐一遍历,判
断是否与矩形区域有交集,若有交集则对该目标进行重绘且颜色要有所改变以区分其他未被选中的目标;
对于四叉树索引,由父节点开始,若有交集,则遍历此父节点的子节点,对每
一个子节点做同样的父节点处理,直到到达叶节点结束,对于所有与矩形区域
有交集的子节点网格,逐一遍历其中的对象,判断是否与矩形区域有交集,若
有交集则对该目标进行重绘且颜色要有所改变以区分其他未被选中的目标;
』!
性能
网格索引查询适合于数据量大的项目,查询算法简单,查询效率高,四叉树索
弓I适合数据量相对较小的项目,查询效率高
』\输入项目
根据鼠标在屏幕上的绘制输入框选矩形
亠输出项目
对于被选中的目标进行重绘
-算法
voidCTESTGISView:
:
BoxSelected()
geomap.spatiallndex->SearchlndexArea(&rect);
intsize=geomap.spatialIndex->SIndexAreas.GetSize();
for(inti=0;i { indexArea=geomap.spatialIndex->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(IsPolygonlnter(rect1,rect)) ((CGeoPolygon*)obj)->Draw(pDC); 亠接口 通过鼠标点击和菜单进行相应函数的调用,完成相应索引类型的建立 -限制条件 目前程序只能满足拉框检索 4)放大 -功能描述 选择拉框放大菜单选项,用鼠标在屏幕需要进行放大的地方绘制合适的矩形框, 鼠标松开即可实现放大操作 』\性能 由于所显示的地图容均为矢量数据,并且地图的放大操作是基于重绘实现的, 所以放大操作所用的时间依赖于数据量的大小 -输入项目 鼠标在屏幕绘制矩形框 Z输出项目 放大后得到的局部图像 -算法 voidCTESTGISView: : OnEnlarge() if(isLarge) { if(abs(pt1.x-pt2.x)<2||abs(pt1.y-pt2.y)<2)return; geomap.wcRect.left=pt1.x>pt2.x? pt2.x: ptl.x; geomap.wcRect.right=pt1.x pt2.x: ptl.x; geomap.wcRect.bottom=pt1.y pt2.y: ptl.y; geomap.wcRect.top=pt1.y>pt2.y? pt2.y: ptl.y;Invalidate。 ; } 』\接口 通过鼠标点击菜单选项和屏幕操作 拉框放大 OnEnlarge() 地图显示区域变 换 重绘 Invalidate() 』\限制条件 只实现了拉框放大,其他放大功能未实现 3C#.NET与AE二次开发(略) 3.1技术路线 3.1.1需求分析 1)任务概述: 本次GIS的二次开发任务是基于C#WAE的数据格式转换,要求在windows环境下实现shp数据的读取、shp数据转换为mif数据。 2)数据描述: 亠数据输入: 输入shp数据 -数据输出: 数据输出为mif数据格式 3)功能需求: 软件的功能要现shp数据的读取和shp数据转换为mif数据 4)性能需求: 软件的性能尽量达到最优,包括数据的精确程度、响应时间、运行时间都尽可能地达到最优。 5)运行需求: 软件的运行在一般的电脑上均可正常运行,对于软件的运行错误及时检查和修复。 3.1.2项目设计 1)设计思想: 二次开发使用vs开发环境加以实现,并使用了ESRIinterop程序集, 它服务于被放置在.NET窗体上的、位于.NET窗体控件中的ArcGIS控件,这些程序集在托管的.NET代码和非托管的COM代码之间起了桥梁作用。 2)主要功能流程: 开始t读取数据t弹出对话框t选择shp文件t确定t保存t选择保存路径及输 入mif文件名t确定t转化t结束 3)接口设计: 小输入shp文件路径 OpenFileDialog() stringfullpath=fd.FileName;//文件路径名 Shapepath=System.IO.Path.GetDirectoryName(fullpath);//得到文件的路径名 Shapename=System.IO.Path.GetFileNameWithoutExtension(fullpath);//不包括后 缀的文件名 textInShape.Text=fullpath; -输出mif文件路径 SaveFileDialog() stringfullpath=sf.FileName; Mifpath=System.IO.Path.GetDirectoryName(fullpath); Mifname=System.IO.Path.GetFileNameWithoutExtension(fullpath);textOutMif.Text=fullpath; -格式转换 StreamWritermyWrite=newStreamWriter(myStream);//写文件 IWorkspacepWS=pWSF.OpenFromFile(fullpath,0)//打开工作空间 IFeatureClasspFeatureClass=pFWS.OpenFeatureClass(filename);//打开要素类 IFeatureCursorpFeatureCursor=pFeatureClass.Search(null,false);//逐一要素访问 写文件头/////////// if(geotype==esriGeometryType.esriGeometryPoint)//点 elseif(geotype==esriGeometryType.esriGeometryPolyline)〃线 elseif(geotype==esriGeometryType.esriGeometryPolygon)//面myWrite.WriteLine(); 3.1.3项目开发 3.2逻辑结构 开始 开始转换 输入文件路 径、名称 Shapepath 打开工作空间写文件信息 IWorkspacemyWrite.Wr FactoryiteLine 、Shapename 输岀文件路 径、名称 Mifpath、 Mifname 3.3GIS系统功能设计 3.3.1功能概述 输入shp文件路径,输出mif文件路径,进行格式转换 3.3.2功能模块 根据软件的需求分析进行系统总体设计,包括有系统设计阶段和结构设计阶段。 其中系统设 计阶段主要是对组成系统的文件、程序、文档等进行设计,确定系统的模块组成以及模块之 间的相互关系。 结构设计则包括了功能结构、数据结构。 1)读取shp文件 利用Iworkspace接口来对Gis中的数据库文件进行操作,因为shp文件是点集集 合、数据集合和其索引文件的集合,所以需要通过专门的接口来实现。 2)写入mif数据 通过接口调用函数,判断读取信息类型,根据不同类型信息编辑数据 4总结 本次实习我主要操作了底层开发的容,从读取mif数据开始逐渐从基础学起,通过网上查阅 和反复询问,尝试和反复修改逐渐在编写程序的过程中理解其中的逻辑结构和语法,在实习 的中段开始认识到一直困惑和为难的函数和语句的使用其实并非很关键,重要的是编程的思 路要理清,对类的封装和调用之间的关系要清楚,而需要用到哪些函数或功能可以查阅相关 资料和示例,理解之后转换为自己的容即可。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- GIS 软件 开发 技术 报告