GIS二次开发综合实习_第1页
GIS二次开发综合实习_第2页
GIS二次开发综合实习_第3页
GIS二次开发综合实习_第4页
GIS二次开发综合实习_第5页
已阅读5页,还剩13页未读 继续免费阅读

下载本文档

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

文档简介

试验一ArcGISEngine控件使用试验目标使用MapControl、PageLayoutControl、ToolbarControl、TOCControl四个控件建立起基本桌面GIS应用程序框架。试验步骤1.新建项目开启VisualStudio,选择“文件|新建|项目”,在项目类型中选择VisualC#,再选择Windows应用程序模板,输入名称“GISControlDemo”,点击确定。在处理方案管理器中将“Form1.cs”重命名为“GISControlForm.cs”,在设计视图中,选中窗体,将其属性中“Text”改为“GISControlDemo”。2.添加控件选择工具箱中“菜单和工具栏|MenuStrip”,将其拖入窗体。选择工具箱中“ArcGISWindowsForms”,将ToolbarControl控件拖入窗体,并将其Dock属性设置为Top。选择工具箱中“菜单和工具栏|StatusStrip”,将其拖入到窗体。选择工具箱中“容器|SplitContainer”容器拖入窗体,并将其Dock属性设置为Fill。选择工具箱中“ArcGISWindowsForms”,将TOCControl控件拖入SplitContainer控件Panel1面板,并将其Dock属性设置为Fill。选择工具箱中“ArcGISWindowsForms”,将MapControl控件拖入SplitContainer控件Panel1面板,并将其Dock属性设置为Fill。最终将LicenseControl控件拖入到窗体任意地方。3.控件绑定经过以上步骤添加控件还只是单独存在,所以要进行控件绑定。分别右击ToolbarControl、TOCControl控件,选择“属性|General”,将Buddy设置为axMapControl1。这么,工具条和图层控件就与地图控件关联了。4.添加工具右击ToolbarControl,选择“属性|Items”,点击Add,选择Commands选项卡中Generic,双击Open、SaveAs、Redo、Undo即可将对应工具添加到工具条。常见工具备:MapNavigation中导航工具,MapInquiry中查询工具,FeatureSelection中选择工具。5.编译运行按F5即可编译运行程序,至此桌面GIS应用程序框架基本框架已经搭建好了,能够经过工具条工具打开地图文档,浏览地图了。三.问题及反思若程序抛出InvalidOperationException,打开GISControlForm.cs源代码在结构函数GISControlForm中添加以下代码:ESRI.ArcGIS.RuntimeManager.Bind(ESRI.ArcGIS.ProductCode.EngineOrDesktop);试验二地图文档和地理数据操作试验目标经过给程序添加菜单实现地图文档新建、打开、存放以及栅格和矢量数据添加等功效。试验步骤1.添加菜单在设计视图中,单击菜单栏,会出现“请在此处键入”提醒,单击提醒就能够键入菜单名称,如“文件”,再单击“文件”,即可输入其下拉子菜单。2.实现相关菜单在处理方案文件上右击,添加引用:ESRI.ArcGIS.DataSourcesRasterESRI.ArcGIS.Geodatabase添加以下命名空间:usingESRI.ArcGIS.Carto;usingESRI.ArcGIS.Controls;usingESRI.ArcGIS.DataSourcesRaster;usingESRI.ArcGIS.Geodatabase;在GISControlForm类中添加组员变量:publicstaticIMapDocumentpMapDocument;//需添加命名空间ESRI.ArcGIS.Carto新建地图文档相关代码以下:privatevoidNewFileToolStripMenuItem_Click(objectsender,EventArgse){SaveFileDialogSaveFileDlg=newSaveFileDialog();SaveFileDlg.Filter="地图文档文件(*.mxd)|*.mxd";SaveFileDlg.Title="输入需要新建地图文档名称";SaveFileDlg.ShowDialog();stringstrDocFile=string.Empty;pMapDocument=newMapDocumentClass();strDocFile=SaveFileDlg.FileName;if(strDocFile==string.Empty)return;pMapDocument.New(strDocFile);pMapDocument.Open(strDocFile,"");axMapControl1.Map=pMapDocument.get_Map(0);}打开地图文档相关代码以下:privatevoidOpenFileToolStripMenuItem_Click(objectsender,EventArgse){OpenFileDialogOpenFDlg=newOpenFileDialog();OpenFDlg.Filter="地图文档文件(*mxd)|*.mxd";OpenFDlg.ShowDialog();stringstrFileName=OpenFDlg.FileName;if(axMapControl1.CheckMxFile(strFileName)){//加载地图文档axMapControl1.MousePointer=esriControlsMousePointer.esriPointerHourglass;axMapControl1.LoadMxFile(strFileName,0,Type.Missing);axMapControl1.MousePointer=esriControlsMousePointer.esriPointerDefault;}else{MessageBox.Show("所选文件不是地图文档文件!","信息提醒");return;}}添加数据相关代码以下,使用switch语句添加shape文件和不一样格式栅格数据:privatevoidAddDataToolStripMenuItem_Click(objectsender,EventArgse){//利用文件对话框方式选择加载地图OpenFileDialogOpenDdlg=newOpenFileDialog();OpenDdlg.Title="选择需要加载地理数据文件";OpenDdlg.Filter="Shape格式文件(*.shp)|*.shp|栅格图像(*.bmp,*tif,*.jpg,*.img)|*.bmp;*tif;*.jpg;*.img";OpenDdlg.ShowDialog();stringstrFileName=OpenDdlg.FileName;if(strFileName==string.Empty)return;//假如用户没有进行文件选择,则返回stringstrFNameExten=System.IO.Path.GetExtension(strFileName);stringpathName=System.IO.Path.GetDirectoryName(strFileName);switch(strFNameExten){case".shp":{stringfileName=System.IO.Path.GetFileNameWithoutExtension(strFileName);//往axMapControl1中加载地图axMapControl1.AddShapeFile(pathName,fileName);break;}case".bmp":case".tif":case".jpg":case".img":{stringfileName=System.IO.Path.GetFileName(strFileName);IWorkspaceFactorypWSF=newRasterWorkspaceFactoryClass();IWorkspacepWS=pWSF.OpenFromFile(pathName,0);IRasterWorkspacepRWS=pWSasIRasterWorkspace;IRasterDatasetpRasterDataset=pRWS.OpenRasterDataset(fileName);IRasterLayerpRasterLayer=newRasterLayerClass();//影像金字塔判断与创建IRasterPyramidpRasPyramid=pRasterDatasetasIRasterPyramid;if(pRasPyramid!=null){{if(!(pRasPyramid.Present))//判断影像金字塔是否存在{pRasPyramid.Create();}}}IRasterpRaster=pRasterDataset.CreateDefaultRaster();pRasterLayer.CreateFromRaster(pRaster);ILayerpLayer=pRasterLayerasILayer;//向主控件中添加图像axMapControl1.AddLayer(pLayer,0);break;}}}地图文档保留、另存为及其程序退出代码以下:privatevoidSaveFileToolStripMenuItem_Click(objectsender,EventArgse){//判断文档是否为只读文档if(pMapDocument.get_IsReadOnly(pMapDocument.DocumentFilename)==true){MessageBox.Show("此地图文档为只读文档!","信息提醒");return;}//用相对路径保留地图文档pMapDocument.Save(pMapDocument.UsesRelativePaths,true);MessageBox.Show("保留成功!","信息提醒");}privatevoidSaveAsToolStripMenuItem_Click(objectsender,EventArgse){SaveFileDialogSaveFileDlg=newSaveFileDialog();SaveFileDlg.Filter="地图文档文件(*.mxd)|*.mxd";SaveFileDlg.Title="地图文档另存为";stringstrDocFile=string.Empty;SaveFileDlg.ShowDialog();strDocFile=SaveFileDlg.FileName;if(strDocFile==string.Empty)return;if(strDocFile==pMapDocument.DocumentFilename){//将修改后地图文档保留在原文件中pMapDocument.Save(pMapDocument.UsesRelativePaths,true);MessageBox.Show("保留成功!","信息提醒");}else{pMapDocument.SaveAs(strDocFile,true,true);MessageBox.Show("保留成功!","信息提醒");}}privatevoidExitToolStripMenuItem_Click(objectsender,EventArgse){Application.Exit();}3.编译运行按F5编译运行,如图所表示。问题及反思若调试过程出现:无法嵌入互操作类型"ESRI.ArcGIS.Carto.MapDocumentClass".请改用适用接口错误,右键“ESRI.ArcGIS.Carto|属性|嵌入互操作类型”改为false。但这么做错误消除了却会出现一系列警告。类似错误能够用一样方法处理。试验三右击菜单及其地图浏览功效实现试验目标在AE开发中右键菜单有两种实现方式,一是使用VisualStudio自带ContextMenuStrip控件,二是用AE封装IToolbarMenu接口。本试验采取第一个方法利用右键菜单实现地图放大、缩小、漫游功效。试验步骤1.添加控件,设置属性选择工具箱中“菜单和工具栏|ContextMenuStrip”,将其拖入到窗体。在ContextMenuStrip控件上右击选择“编辑项”,编辑MenuItem。设置MapControl控件ContextMenuStrip为contextMenuStrip1,将ContextMenuStrip和MapControl关联起来。2.相关代码及其实现privatevoidZoomInToolStripMenuItem_Click(objectsender,EventArgse){axMapControl1.MousePointer=esriControlsMousePointer.esriPointerZoomIn;}privatevoidZoomOutToolStripMenuItem_Click(objectsender,EventArgse){axMapControl1.MousePointer=esriControlsMousePointer.esriPointerZoomOut;}privatevoidPanToolStripMenuItem_Click(objectsender,EventArgse){axMapControl1.MousePointer=esriControlsMousePointer.esriPointerPan;}privatevoidaxMapControl1_OnMouseDown(objectsender,IMapControlEvents2_OnMouseDownEvente){//1代表左键,2代表右键,4代表中键if(e.button==1){if(axMapControl1.MousePointer==esriControlsMousePointer.esriPointerZoomIn){//将地图控件显示范围设置IPointp=axMapControl1.ToMapPoint(e.x,e.y);axMapControl1.Extent=axMapControl1.TrackRectangle();IPointpNext=axMapControl1.ToMapPoint(e.x,e.y);if(p.X==pNext.X&&p.Y==pNext.Y){IEnvelopecurExtent=axMapControl1.Extent;curExtent.XMin=p.X-0.25*curExtent.Width;curExtent.XMax=p.X+0.25*curExtent.Width;curExtent.YMin=p.Y-0.25*curExtent.Height;curExtent.YMax=p.Y+0.25*curExtent.Height;axMapControl1.Extent=curExtent;}//刷新地图axMapControl1.ActiveView.PartialRefresh(esriViewDrawPhase.esriViewGeography,null,null);}elseif(axMapControl1.MousePointer==esriControlsMousePointer.esriPointerZoomOut)

温馨提示

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

评论

0/150

提交评论