《GIS课程设计.docx》由会员分享,可在线阅读,更多相关《GIS课程设计.docx(23页珍藏版)》请在第壹文秘上搜索。
1、本科生实验报告实验课程GIS课程设计学院名称地球科学学院专业名称地理信息科学摘要针对本专业目前所学的GIS应用与GIS开发课程的要求,本次课程设计主要是对GlS二次开发与GlS软件应用进行相关编码和上机实验,主要利用ArCEngine二次开发平台和VS2013开发工具完成了地物统计的GIS二次开发实验、利用ArcGIS和Envi等相关软件完成了甘孜水利侵蚀的计算,旨在培养GIS的开发与应用能力,实际的问题解决能力和动手能力,加强了学生对GlS相关应用领域的理解。关键词:空间分析、算法、GIS应用、ArcEngineArcMapEnVi、甘孜、水利侵蚀目录实验一:ArCEngine二次开发实验:
2、地物分类统计11.1. 实验目的11.2. 实验内容11.3. 地物分类统计技术流程11.3.1 算法思想及算法流程图11.3.2 关键代码21.3.3 算法实现111.4. 实验总结12实验二:GIS应用实验:甘孜县水利侵蚀132. 1.实验目的133. 2.实验内容134. 3.甘孜县水利侵蚀统计技术流程132.3.1流程图132.3.2技术流程132.3.3技术成果192.4.实验总结20实验一:ArCEngine二次开发实验:地物分类统计1.1. 实验目的(I)熟练搭建ArCEngine开发环境,了解ArCEngine和ArCObjeCtS相关接口和实体类(2)利用ArCEngine实
3、现地物分类统计,缓冲区运算,拓扑运算和地图导出等功能(3)进一步熟悉ArCEngine开发接口以及高级功能,加深对GIS空间分析和空间统计的理解1.2. 实验内容利用C#语言、VS开发工具、ArCEngine开发平台实现地物分类统计1.3. 地物分类统计技术流程1.4. 1算法思想及算法流程图算法基本思想:(1)二次开发Com组件TTool,分别是用于线统计和面统计两类的工具(2)数据输入及相关初始化,选择统计工具(3)如果统计工具是面统计,则获取地图控件的轨迹多边形,否则就是线统计,获取地图控件的轨迹线,并对线做35的缓冲区。使用IElement接口绘图,然后使用IActivView导出地图
4、(4)使用TQueryFilter进行空间查询,然后使用IDataStatiStiCS接口统计地类名称字段的值集合(5)遍历上步中的值集合,每个迭代中通过值构造SqI语句Where条件”地类名称二值”,同时结合(3)步中的轨迹多边形或者缓冲区,运用ISPatialFilter进行空间查询。遍历每个要素,统计该要素与轨迹多边形或缓冲区的相交图形的距离,从而得出每类地物的面积(6)使用IArea求出轨迹多边形或者缓冲区的总面积(7)相关结果可视化展示,算法结束算法流程图:图1-1地物分类统计流程图1.5. 2关键代码实现该算法的核心代码如下:统计工具核心:/Summarydescriptionfo
5、rStaticTool./Guid(*0428808a-4782-4f81-a0b3-93be6e9226dc*)Classinterface(ClassInterfaceType.None)ProgId(wGisStatistics.Com.StaticTool*)publicsealedclassPolygonStaticTool:BaseToolprivateIHookHelperm_hookHelper=null;privateIMapControlSmapControl=null;privateIToolbarControltooIBarControl=null;publicPoly
6、gonStaticToolO(/TODO:Definevaluesforthepublicproperties/base.m_category=*;/localizabletextbase.m_caption=面统计;/localizabletextbase.m_message=而统计;/localizabletext(e. g.base.m,toolTip=使用多边形进行统计;/localizabletextbase,mname=面统计;/uniqueid,non-localizable*MyCategory_MyTool*)try/TODO:changeresourcenameifnece
7、ssary/stringbitmapResourceNamc=GetTypeO.Name+”.bmp;base.m_bitmap=newBitmap(GetTypeO,bitmapResourceNamc);base.m_cursor=newSystem.Windows.Forms.Cursor(GetTypeO,GetType().Name)catch(Exceptionex)System.Diagnostics.Trace.WriteLine(ex.Message,“InvalidBitmap);#regionOverriddenClassMethods/Occurswhenthistoo
8、liscreated/InstanceofthealicationpublicoverridevoidOnCreateCobjecthook)(try(m_hookllelper=newHookHelperClassO;m_hookllelper.Hook=hook;if(m_hookllelper.ActiveView=null)(m_hookHelper=null;catchm_hookllelper=null;)if(m-hook11elper=null)base.m_enabled=false;elsebase.m_enabled=true;/TODO:Addotherinitiali
9、zationcodethis.toolBarControl=hookasIToolbarControl;this.mapControl=this.toolBarControl.BuddyasIMapControl3;/Occurswhenthistoolisclicked/publicoverridevoidOnClickO(/TODO:AddStaticTool.OnClickimplementationthis.mapControl.CurrentTool=this;)publicoverridevoidOnMouseDown(intButton,intShift,intX,intY)(/
10、TODO:AddStaticTool.OnMouseDownimplementationif(Button=1)!GeometrypGeometry=this.mapControl.TrackPolygonO;SymbolUtil.InsertNormalLineElement(mapControl,TopologicOpreatorUtil.GetGeometryBoundary(PGeometry),255,O,O);newStatisForm(pGeometry,this.mapControl,OutputImage(pGeometry).ShowDialogO;SymbolUtiLCl
11、earElement(mapContro1);)privatevoidoutPutArea(IGeometrypGeometry)(ITopologicalOperatorpTopoIogicOperator=pGeometryasITopologicalOperator;pTopo1ogicOperator.Simplify();/pTopologicOperator.ClipIActiveViewpActiveView=this.mapControlasIActiveView;/PictureBoxp=newPictureBoxO;/pActiveView.Output();private
12、ImageOutputImagedGeometrypGeometry)(returnMapImageUtil.SaveCurrentToImage(mapControl.Map,331,151,pGeometry.Envelope);#CndregiOn/IllSummarydescriptionforPolylineStaticTool./Guid(*62751d8d-07b3-4d84-a559-5ebdafbb4e0e*)Classinterface(ClassInterfaceType.None)ProgId(wGisStatistics.Com.PolylineStaticTool*
13、)publicsealedclassPolylineStaticTool:BaseToolprivateIHookHelperm_hookHelper=null;privateIMapContro13mapControl=null;privateIToolbarControltooIBarControl=null;publicPolylineStaticToolO(/TODO:Definevaluesforthepublicproperties/base.m_category=;/localizabletextbase.m_caption=线统计;/localizabletextbase.m_
14、message=线统计;/localizabletextbase.m_toolTip=使用线段缓冲区进行统计;/localizabletextbase.m_name=线统计;/uniqueid,non-localizable(e.g.*MyCategory_MyTool*)try(/TODO:changeresourcenameifnecessary/stringbitmapResourceName=GetType().Name+”.bmp;base.m_bitmap=newBitmap(GetTypeO,bitmapResourceName);base.m_cursor=newSystem.Windows.Forms.Cursor(GetTypeO,GetType().Name+”.cur*);)catch(Exceptionex)System.Diagnostics.Trace.WriteLine(ex.Message,*InvalidBitmap*);)regionOverriddenClassMethods/OccurswhenthistooliscreatedIII/Instanceoftheapplicationp