gis软件设计实验报告完整版.docx

上传人:b****4 文档编号:3913266 上传时间:2023-05-06 格式:DOCX 页数:95 大小:694.43KB
下载 相关 举报
gis软件设计实验报告完整版.docx_第1页
第1页 / 共95页
gis软件设计实验报告完整版.docx_第2页
第2页 / 共95页
gis软件设计实验报告完整版.docx_第3页
第3页 / 共95页
gis软件设计实验报告完整版.docx_第4页
第4页 / 共95页
gis软件设计实验报告完整版.docx_第5页
第5页 / 共95页
gis软件设计实验报告完整版.docx_第6页
第6页 / 共95页
gis软件设计实验报告完整版.docx_第7页
第7页 / 共95页
gis软件设计实验报告完整版.docx_第8页
第8页 / 共95页
gis软件设计实验报告完整版.docx_第9页
第9页 / 共95页
gis软件设计实验报告完整版.docx_第10页
第10页 / 共95页
gis软件设计实验报告完整版.docx_第11页
第11页 / 共95页
gis软件设计实验报告完整版.docx_第12页
第12页 / 共95页
gis软件设计实验报告完整版.docx_第13页
第13页 / 共95页
gis软件设计实验报告完整版.docx_第14页
第14页 / 共95页
gis软件设计实验报告完整版.docx_第15页
第15页 / 共95页
gis软件设计实验报告完整版.docx_第16页
第16页 / 共95页
gis软件设计实验报告完整版.docx_第17页
第17页 / 共95页
gis软件设计实验报告完整版.docx_第18页
第18页 / 共95页
gis软件设计实验报告完整版.docx_第19页
第19页 / 共95页
gis软件设计实验报告完整版.docx_第20页
第20页 / 共95页
亲,该文档总共95页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

gis软件设计实验报告完整版.docx

《gis软件设计实验报告完整版.docx》由会员分享,可在线阅读,更多相关《gis软件设计实验报告完整版.docx(95页珍藏版)》请在冰点文库上搜索。

gis软件设计实验报告完整版.docx

gis软件设计实验报告完整版

 

地理与生物信息学院

2012/2013学年第一学期

GIS软件设计

实验报告

课程名称:

GIS软件设计

实验名称:

小型GIS软件系统的设计与开发

班级学号B********B********

学生姓名冶福荣郑正中 

指导教师原立峰 

 

日期:

2012年9月

 

一、软件设计题目

基于ArcGISEngine及C#编程语言构建一个小型GIS平台系统。

二、设计内容

软件为一个小型的GIS平台,主要包括:

空间数据存取模块、地图浏览模块、地图编辑模块、空间查询模块、空间分析模块、地图修饰模块。

(1)空间数据存取模块

该模块实现对地图数据的新建、加载、保存、另存和打印输出对于地图的硬拷贝输出实现所见即所得效果。

(2)地图浏览模块

该模块主要包括地图工具、滚动条,状态条、鹰眼图、内容视图等。

其中地图工具可以实现放大、缩小、中心放大、中心缩小、全景视图、漫游、要素选择和取消、空间查询等具体功能。

(3)地图数据编辑模块

该模块能够实现新建图层、添加图层、删除所有图层、开始编辑和结束编辑的操作。

编辑可以对图层进行创建新特征、修改任务、移动特征和设置捕捉环境等操作。

(4)空间查询模块

该模块实现的是属性查询。

(5)空间分析模块

该模块可以进行缓冲区分析。

三、设计要求

使用ArcGISEngine和C#、VB.net等编程语言完成任务。

四、实现过程

1.空间数据存储模块

图1.文件菜单

图2.工具栏

A.新建地图

1、创建同步地图类ControlsSynchronizer

2、新建新的地图对象IMapmap=newmap();同时更新地图文档

B.加载shapefile文件和mxd文档

1、新建打开文档对话框,设置文件类型为”(*.shp)|*.shp”

2、将对话框获得的shapefile文档的地址返回,检查文档是否存在,若存在则将文档加载,并将文档中的参数添加至featureclass和featurelayer中;若不存在,则错误提示。

3、更新mapcontrol和鹰眼中的地图。

C.保存地图文档

使用ESRI提供的接口函数IMapDocument类中的voidSave(boolbUseRelativePaths,boolbCreateThumnbail);函数。

D.另存地图文档

首先需用户确认是否需要保存当前的地图文档,之后调用类ControlsSaveAsDocCommandClass(),进行地图另存为操作。

E.打印地图文档

图3.打印窗体界面

创建打印窗体类:

PrintPageLayoutForm,将地图文档传递到窗体中预览,选择打印机、纸张大小、打印方向等,将地图打印出来。

F.地图输出为图片

图4.地图输出为图片界面

创建地图输出窗体类:

ExportMapForm,选择输出的路径、分辨率、图片尺寸、图片类型,并将地图输出为图片。

2.地图浏览模块

A.地图工具

实现工具栏中的控件,比如加载地图文件、添加地图图层、地图显示、漫游功能、中心缩放、放大缩小等功能。

分别创建GISBasicCommand类:

OpenNewMapDocument、ZoomIn、ZoomOut、FixedZoomIn、FixedZoomOut、FullExtent、GoBackToPreviousExtent、GoToNextExtent、ReDoDraw、UnDoDraw。

在工具栏,将这些功能添加上,单击实现。

具体代码如下:

///

///新建地图文档

///

///

///

privatevoidOpenNewDocument_Click(objectsender,EventArgse)

{

ICommandcommand=newOpenNewMapDocument(m_controlsSynchronizer);

ITooltool=commandasITool;

command.OnCreate(m_mapControl.Object);

command.OnClick();

}

///

///加载数据

///

///

///

privatevoidAddData_Click(objectsender,EventArgse)

{

ICommandcommand=newControlsAddDataCommandClass();

command.OnCreate(axMapControl1.Object);

command.OnClick();

}

///

///全屏命令

///

///

///

privatevoidFullExtent_Click(objectsender,EventArgse)

{

ICommandcommand=newControlsMapFullExtentCommandClass();

command.OnCreate(m_mapControl.Object);

command.OnClick();

}

///

///漫游命令

///

///

///

privatevoidPanTool_Click(objectsender,EventArgse)

{

ICommandcommand=newControlsMapPanToolClass();

ITooltool=commandasITool;

command.OnCreate(m_mapControl.Object);

axMapControl1.CurrentTool=tool;

axPageLayoutControl1.CurrentTool=tool;

}

///

///撤销命令

///

///

///

privatevoidGoBackToPreviousExtent_Click(objectsender,EventArgse)

{

ICommandcommand=newGoBackToPreviousExtent();

command.OnCreate(m_mapControl.Object);

command.OnClick();

}

///

///前进命令

///

///

///

privatevoidGoToNextExtent_Click(objectsender,EventArgse)

{

ICommandcommand=newGoToNextExtent();

command.OnCreate(m_mapControl.Object);

command.OnClick();

}

///

///放大命令

///

///

///

privatevoidZoomIn_Click(objectsender,EventArgse)

{

ICommandcommand=newZoomIn();

command.OnCreate(m_mapControl.Object);

ITooltool=commandasITool;

axMapControl1.CurrentTool=tool;

}

///

///缩小命令

///

///

///

privatevoidZoomOut_Click(objectsender,EventArgse)

{

ICommandcommand=newZoomOut();

command.OnCreate(m_mapControl.Object);

ITooltool=commandasITool;

axMapControl1.CurrentTool=tool;

}

///

///中心缩小命令

///

///

///

privatevoidFixedZoomIn_Click(objectsender,EventArgse)

{

ICommandcommand=newFixedZoomIn();

command.OnCreate(m_mapControl.Object);

command.OnClick();

}

///

///中心放大命令

///

///

///

privatevoidFixedZoomOut_Click(objectsender,EventArgse)

{

ICommandcommand=newFixedZoomOut();

command.OnCreate(m_mapControl.Object);

command.OnClick();

}

B.状态栏

状态条显示当前鼠标的坐标位置,当前比例尺,还有控件名称以及目前地图的编辑状态。

坐标显示的源代码如下:

///

///MapControl鼠标移动响应函数

///

///

///

privatevoidaxMapControl1_OnMouseMove(objectsender,IMapControlEvents2_OnMouseMoveEvente)

{

//显示当前比例尺

ScaleLabel.Text="比例尺1:

"+((long)this.axMapControl1.MapScale).ToString();

//显示当前坐标

CoordinateLabel.Text="当前坐标X="+e.mapX.ToString()+"Y="+e.mapY.ToString()

+""+this.axMapControl1.MapUnits.ToString().Substring(4);

}

C.鹰眼图

鹰眼和主地图的互动,主要体现在两个方面:

一是主地图的地图改变了,则鹰眼里的矩形框要移动到对应的位置,以指示当前地图在整个地图中的位置;二是鹰眼的矩形框移动了,则主地图中显示的地图要移动到相应的位置。

在主地图的OnAfterDrawMapControl事件中,根据当前地图的大小,改变鹰眼中矩形框的大小。

鹰眼实现过程:

1、创建函数,当主地图中的地图文档被替换时,将主地图中的图层拷贝并更新到鹰眼地图中的文档。

图层拷贝函数如下:

///

///图层拷贝函数

///

///

///

privateILayerLayerClone(ILayerpLayer)

{

IFeatureLayerpFeatureLayer=newFeatureLayerClass();

pFeatureLayer.FeatureClass=(pLayerasIFeatureLayer).FeatureClass;

pFeatureLayer.Name=pLayer.Name;

pFeatureLayer.DisplayField=(pLayerasIFeatureLayer).DisplayField;

pFeatureLayer.MaximumScale=pLayer.MaximumScale;

pFeatureLayer.MinimumScale=pLayer.MinimumScale;

(pFeatureLayerasIGeoFeatureLayer).Renderer=(pLayerasIGeoFeatureLayer).Renderer;

(pFeatureLayerasIGeoFeatureLayer).AnnotationProperties=(pLayerasIGeoFeatureLayer).AnnotationProperties;

(pFeatureLayerasIGeoFeatureLayer).DisplayAnnotation=(pLayerasIGeoFeatureLayer).DisplayAnnotation;

#region清除鹰眼中的标注

IAnnotateLayerPropertiesCollectionpAnnotateLayerPropertiesCollection=(pFeatureLayerasIGeoFeatureLayer).AnnotationProperties;

if(pAnnotateLayerPropertiesCollection.Count>0)

{

pAnnotateLayerPropertiesCollection.Clear();

}

#endregion

returnpFeatureLayerasILayer;

图层拷贝函数主要避免在加载具有文本标记的地图文档时因地图文档共用时的错误,通过图层拷贝,并清楚鹰眼图层中的标注,即可避免这个问题。

2、鼠标事件的响应

鼠标事件主要有鼠标的移动、单击。

当鼠标单机并移动时,绘制鹰眼框,鼠标的移动与主地图控件的地图进行互动。

3.地图数据编辑模块

A.添加图层

添加图层代码如下:

///

///加载shapefile数据命令

///

///

///

privatevoidLoadShapFileToolStripMenuItem_Click(objectsender,EventArgse)

{

AddShapefile();

}

//添加Shapefile文件函数

publicvoidAddShapefile()

{

ESRI.ArcGIS.Carto.IActiveViewactiveView=axMapControl1.ActiveView;

ESRI.ArcGIS.Carto.IActiveViewactiveView1=axMapControl2.ActiveView;

if(activeView==null)

{

return;

}

if(activeView1==null)

{

return;

}

System.Windows.Forms.OpenFileDialogopenFileDialog=newSystem.Windows.Forms.OpenFileDialog();

openFileDialog.Filter="Shapefiles(*.shp)|*.shp";

if(openFileDialog.ShowDialog()==DialogResult.OK)

{

stringshapefileLocation=openFileDialog.FileName;

stringpathFile=shapefileLocation;

if(shapefileLocation!

="")

{

IWorkspaceFactoryworkspaceFactory=newShapefileWorkspaceFactoryClass();

IFeatureWorkspacefeatureWorkspace=(IFeatureWorkspace)workspaceFactory.OpenFromFile(System.IO.Path.GetDirectoryName(shapefileLocation),0);

IFeatureClassfeatureClass=featureWorkspace.OpenFeatureClass(System.IO.Path.GetFileNameWithoutExtension(shapefileLocation));

IFeatureLayerfeatureLayer=newFeatureLayerClass();

featureLayer.FeatureClass=featureClass;

featureLayer.Name=featureClass.AliasName;

featureLayer.Visible=true;

//添加到主窗口中的代码

activeView.FocusMap.AddLayer(featureLayer);

activeView.Extent=activeView.FullExtent;

activeView.PartialRefresh(esriViewDrawPhase.esriViewGeography,null,null);

//添加到鹰眼视图窗口中的代码

activeView1.FocusMap.AddLayer(featureLayer);

activeView1.Extent=activeView1.FullExtent;

activeView1.PartialRefresh(esriViewDrawPhase.esriViewGeography,null,null);

}

else

{

MessageBox.Show("操作出错啦!

");

}

}

}

B.删除所有图层

删除所有图层这个功能目前只能实现把图层隐藏,达到完全删除的功能还未实现。

C.编辑栏实现

地图编辑栏主要实现的是地图要素的描绘、移动、删除、修改等。

实现的思路是调用ESRI提供的接口。

在界面上添加两个ToolBarControl,分别在其中命名为axEditToolBar和axExtraToolbar。

添加命令至ToolBar中:

代码如下:

//axToolbarControl1.SetBuddyControl(axMapControl1);

axEditToolBar.SetBuddyControl(axMapControl1);

axExtraToolbar.SetBuddyControl(axMapControl1);

//setthetoolbar

//ExtraEditorToolbar

axExtraToolbar.AddItem("esriControls.ControlsUndoCommand",0,-1,true,0,esriCommandStyles.esriCommandStyleIconOnly);

axExtraToolbar.AddItem("esriControls.ControlsRedoCommand",0,-1,false,0,esriCommandStyles.esriCommandStyleIconOnly);

axExtraToolbar.AddItem("esriControls.ControlsEditingCutCommand",0,-1,true,0,esriCommandStyles.esriCommandStyleIconOnly);

axExtraToolbar.AddItem("esriControls.ControlsEditingPasteCommand",0,-1,false,0,esriCommandStyles.esriCommandStyleIconOnly);

axExtraToolbar.AddItem("esriControls.ControlsEditingCopyCommand",0,-1,false,0,esriCommandStyles.esriCommandStyleIconOnly);

axExtraToolbar.AddItem("esriControls.ControlsEditingClearCommand",0,-1,false,0,esriCommandStyles.esriCommandStyleIconOnly);

//EditorToolbar

axEditToolBar.AddItem("esriControls.ControlsEditingEditorMenu",0,-1,false,0,esriCommandStyles.esriCommandStyleIconOnly);

//command

axEditToolBar.AddItem("EditorCommands.GeneralizeCmd",0,-1,false,0,esriCommandStyles.esriCo

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

当前位置:首页 > 自然科学 > 物理

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2