欢迎来到课桌文档! | 帮助中心 课桌文档-建筑工程资料库
课桌文档
全部分类
  • 党建之窗>
  • 感悟体会>
  • 百家争鸣>
  • 教育整顿>
  • 文笔提升>
  • 热门分类>
  • 计划总结>
  • 致辞演讲>
  • 在线阅读>
  • ImageVerifierCode 换一换
    首页 课桌文档 > 资源分类 > DOCX文档下载  

    GIS课程设计.docx

    • 资源ID:955250       资源大小:339.43KB        全文页数:23页
    • 资源格式: DOCX        下载积分:5金币
    快捷下载 游客一键下载
    会员登录下载
    三方登录下载: 微信开放平台登录 QQ登录  
    下载资源需要5金币
    邮箱/手机:
    温馨提示:
    用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)
    支付方式: 支付宝    微信支付   
    验证码:   换一换

    加入VIP免费专享
     
    账号:
    密码:
    验证码:   换一换
      忘记密码?
        
    友情提示
    2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
    3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
    4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
    5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

    GIS课程设计.docx

    本科生实验报告实验课程GIS课程设计学院名称地球科学学院专业名称地理信息科学摘要针对本专业目前所学的GIS应用与GIS开发课程的要求,本次课程设计主要是对GlS二次开发与GlS软件应用进行相关编码和上机实验,主要利用ArCEngine二次开发平台和VS2013开发工具完成了地物统计的GIS二次开发实验、利用ArcGIS和Envi等相关软件完成了甘孜水利侵蚀的计算,旨在培养GIS的开发与应用能力,实际的问题解决能力和动手能力,加强了学生对GlS相关应用领域的理解。关键词:空间分析、算法、GIS应用、ArcEngineArcMap>EnVi、甘孜、水利侵蚀目录实验一:ArCEngine二次开发实验:地物分类统计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)进一步熟悉ArCEngine开发接口以及高级功能,加深对GIS空间分析和空间统计的理解1.2. 实验内容利用C#语言、VS开发工具、ArCEngine开发平台实现地物分类统计1.3. 地物分类统计技术流程1.4. 1算法思想及算法流程图算法基本思想:(1)二次开发Com组件TTool,分别是用于线统计和面统计两类的工具(2)数据输入及相关初始化,选择统计工具(3)如果统计工具是面统计,则获取地图控件的轨迹多边形,否则就是线统计,获取地图控件的轨迹线,并对线做35的缓冲区。使用IElement接口绘图,然后使用IActivView导出地图(4)使用TQueryFilter进行空间查询,然后使用IDataStatiStiCS接口统计地类名称字段的值集合(5)遍历上步中的值集合,每个迭代中通过值构造SqI语句Where条件”地类名称二值”,同时结合(3)步中的轨迹多边形或者缓冲区,运用ISPatialFilter进行空间查询。遍历每个要素,统计该要素与轨迹多边形或缓冲区的相交图形的距离,从而得出每类地物的面积(6)使用IArea求出轨迹多边形或者缓冲区的总面积(7)相关结果可视化展示,算法结束算法流程图:图1-1地物分类统计流程图1.5. 2关键代码实现该算法的核心代码如下:统计工具核心:/<summary>/SummarydescriptionforStaticTool./<summary>Guid(*0428808a-4782-4f81-a0b3-93be6e9226dc*)Classinterface(ClassInterfaceType.None)ProgId(wGisStatistics.Com.StaticTool*)publicsealedclassPolygonStaticTool:BaseToolprivateIHookHelperm_hookHelper=null;privateIMapControlSmapControl=null;privateIToolbarControltooIBarControl=null;publicPolygonStaticToolO(/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:changeresourcenameifnecessary/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/<summary>/Occurswhenthistooliscreated/</summary>/<paramname="hook”>Instanceofthealication<param>publicoverridevoidOnCreateCobjecthook)(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:Addotherinitializationcodethis.toolBarControl=hookasIToolbarControl;this.mapControl=this.toolBarControl.BuddyasIMapControl3;/<suary>/Occurswhenthistoolisclicked/</summary>publicoverridevoidOnClickO(/TODO:AddStaticTool.OnClickimplementationthis.mapControl.CurrentTool=this;)publicoverridevoidOnMouseDown(intButton,intShift,intX,intY)(/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;SymbolUtiLClearElement(mapContro1);)privatevoidoutPutArea(IGeometrypGeometry)(ITopologicalOperatorpTopoIogicOperator=pGeometryasITopologicalOperator;pTopo1ogicOperator.Simplify();/pTopologicOperator.ClipIActiveViewpActiveView=this.mapControlasIActiveView;/PictureBoxp=newPictureBoxO;/pActiveView.Output();privateImageOutputImagedGeometrypGeometry)(returnMapImageUtil.SaveCurrentToImage(mapControl.Map,331,151,pGeometry.Envelope);#CndregiOn/<summary>IllSummarydescriptionforPolylineStaticTool./</summary>Guid(*62751d8d-07b3-4d84-a559-5ebdafbb4e0e*)Classinterface(ClassInterfaceType.None)ProgId(wGisStatistics.Com.PolylineStaticTool*)publicsealedclassPolylineStaticTool:BaseToolprivateIHookHelperm_hookHelper=null;privateIMapContro13mapControl=null;privateIToolbarControltooIBarControl=null;publicPolylineStaticToolO(/TODO:Definevaluesforthepublicproperties/base.m_category=""/localizabletextbase.m_caption="线统计";/localizabletextbase.m_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/<suunary>/OccurswhenthistooliscreatedIII</summary>/<paramname=*hook*>Instanceoftheapplication<param>publicoverridevoidOnCreate(objecthook)trym_hookHelper=newHookHelperClassO;m_hookHelper.Hook=hook;if(m_hookHelper.ActiveView=null)m_hookHelper=null;)catch(m_hookHelper=null;if(m_hookHelper=null)base.m_enabled=false:elsebase.m_enabled=true;/TODO:Addotherinitializationcodethis.toolBarControl=hookasIToolbarControl;this.mapControl=this,tooIBarControl.BuddyasIMapControl3;)/<summary>/Occurswhenthistoolisclicked/</summary>publicoverridevoidOnClickO/TODO:AddPolylineStaticTool.OnClickimplementation)publicoverridevoidOnMouseDown(intButton,intShift,intX,intY)/TODO:AddPolylineStaticTool.OnMouseDownimplementationif(Button=1)(!GeometrypGeometry=this.mapControl.TrackLineO;ITopologicalOperatorpTopoOpreator=pGeometryasITopologicalOpcrator;!GeometrynewGeometry=pTopoOpreator.Buffer(35);SymbolUtil.InsertNormalLineElement(mapControl,pGeometry,255,O,O);SymbolUtil.InsertNormalLineElement(mapControl,TopologicOpreatorUtil.GetGeometryBoundary(newGeometry),O,255,O);newStatisForm(newGeometry,this.mapControl,OutputImage(pGcometry).ShowDialogO;SymbolUtil.ClearElement(mapControl);privateImageOutputImagedGeometrypGeometry)(returnMapImageUtiLSaveCurrentToImage(mapControl.Map,331,151,pGeometry.Envelope);)核心统计类:/<summary>/空间查询与操作帮助类/2015/12/11fhr/<summary>classFeatureDealUtil(ublicstaticboolUpdateFeature(IList<IFeature>pfeatuers,DataTable(IataTable)for(inti=O;i<dataTable.Rows.Count;i+)(!FeaturepFeature=pfeatuersi;DataRowdRow=dataTable.Rowsi;boolisUdate=false;for(intj=O;j<dRow.ItemArray.CountO;j+)(IFieldpField=pFeature.Fields.get_Field(j);if(!pField.Editable)(continue;if(pField.Type=esriFieldType.esriFieldTypeBlobpField.Type=esriFieldType.GsriFieldTypeRaster11pField.Type=esriFieldType.esriFie1dTypeGeometry)(continue;)if(pFeature.get_Value(j)!=dRowj)isllpdate=true;objectVaIUe=dRowj;if(pFeature.Fields.get_Field(j).CheckValue(value)pFeature.set_Value(j,value);if(isUpdate)pFeature.StoreO;returntrue;/<suunary>/统计某一段各值的个数III</summary>/<paramname="layer"></Paran>/<paramname=*fieldName*></param>/<returns></returns>publicstaticIDictionary<string,Int32>QueryLayercountForUnikevaluesdFeatureLayerlayer,stringfieldName,!GeometryGeometry)(IDictionary<string,int>result=newDictionary<string,int>();IList<object>values=GetUnikeValues(layer,fieldName);foreach(stringvalueinvalues)(stringwhere=string.Format(*0='1,*,fieldName,value);Int32count=GetLayerCountdayer,pGeometry,where,fieldName);result.Add(value,count):)returnresult;)publicstaticIDictionary<string,double>QueryLayerAreaForUnikevaluesdFeatureLayerlayer,stringfieldName,!GeometrypGeometry)IDictionary<string,double>result=newDictionary<string,double>();IList<object>values=GetUnikeValues(layer,fieldName);foreach(stringvalueinvalues)stringwhere=string.Format(z,0=''",fieldName,value);doublecount=GetLayerClipArea(layer,pGeometry,where,fieldName);result.Add(value,count);returnresult;publicstaticIList<object>GetUnikeValues(IFeatureLayerlayer,stringfieIdName)IList<object>values=newList<object>();IFeatureCursorPFeatUreCUrSor=QueryFeatureInLayer(layer,;IDataStatisticsHataStatistics=newDataStatiStiCSCIaSS();dataStatistics.Cursor=pFeatureCursoras!Cursor;dataStatistics.Field=fieldName;/IStatisticsResultsresult=dataStatistics.Statistics;!EnumeratormyEnumerator=dataStatistics.UniqueValues;1.ist<string>myValueList=newList<string>();myEnumerator.ResetO;while(myEnumerator.MoveNextO)(if(myEnumerator.Current!=null)(values.Add(myEnumerator.Current.ToStringO);)/IStatisticsResultsresult=dataStatistics.Statistics;returnvalues;)publicstaticdoubleGetLayerClipAreadFeatureLayerlayer,!GeometrypGeometry,stringwhere,stringfieldName)(!CursorpCursor=QueryFeatureInLayerdayer,pGeometry,where)as!Cursor;/returnGetLayerCount(pCursor,fieldName);returnGetLayerClipArea(pCursor,pGeometry);ublicstaticdoubleGetLayerClipArea(!CursorpCursor,!GeometryoriginGeo)(doublearea=O;IFeatureCursorcursor=pCursorasIFeatureCursor;!FeaturepFeature=cursor.NextFeatureO;while(pFeature!=null)(ITopologicalOperatorpTopo=pFeature.ShapeasITopologicalOperator;!Geometrygeometry=pTopo.Intersect(originGeo,esriGeometryDimension.esriGeometry2Dimension);area+=(geometryas!Area).Area;pFeature=cursor.NextFeatureO;)returnarea;/<suuary>/利用语句进行查询返回游标和查询过滤类/</summary>/<paramname=wfeatureLayer*></param>/<paramname=wwhereClause*></param>/<returns></returns>publicstaticIFeatureCursorQueryFeatureInLayerdFeatureLayerfeatureLayer,StringwhereClause)(IFeatureCursorfeatureCursor=null;IQueryFilter2queryFilter=newQueryFiiterClassO;queryFilter.WhereClause=whereClause;IFeatureClassFeatureClass=featureLayer.FeatureClass;featureCursor=featureClass.Search(queryFi1ter,false);returnfeatureCursor;)/<suary>/利用空间位置进行查询返回游标/</summary>/<paramname=*featureLayerz,X/param>/<paramname="geometry"</Parain>/<returns></returns>publicstaticIFeatureCursorQueryFeatureInLayerdFeatureLayerfeatureLayer,!Geometrygeometry)(IFeatureCursorfeatureCursor=null;ISpatialFilterSpatialFilter=newSpatialFilterO;switch(featureLayer.FeatureClass.ShapeType)(caseesriGeometryType.esriGeometryPoint:SpatialFilter.SpatialRel=CsriSpatialRelEnum.esriSpatialRelContains;break;caseesriGeometryType.esriGeometryPoIyline:SpatialFiiter.SpatialRel=esriSpatialRelEnum.esrISpatialRelIntersects;break;caseesriGeometryType.CsriGeonietryPolygon:SpatialFiiter.SpatialRel=esriSpatialRelEnum.esrISpatialRelIntersects;break;)SpatialFilter.Geometry=geometry;IFeatureClassfeatureClass=featureLayer.FeatureClass;featureCursor=featureClass.Search(spatialFiIter,false);returnfeatureCursor;统计窗体核心代码:private!GeometrypGeometry=null;privateIMapContro13mapCotrol=null;publicStatisForm(IGeometrypGeometry,IMapContro13mapControl,Imageimage)InitialiZeCoraponentO;this.pGeometry=pGeometry;this.mapControl=mapControl;this.pictureBoxl.Image=image;)privatevoidbuttonl_Click(objectsender,EventArgse)(if(string.IsNullOrEnipty(boBoxl.Text)MessageBox.Show("请选择操作图层”);return;Dea1QueryLayer(boBoxl.SelectedIndex);privatevoidDealQueryLayer(Int32index)ILayerlayer=this.mapControl.get_Layer(index);StringBuilderbuilder=newStringBuilderO;stringareaTexl=string.Formal("面积:0rn*,GetArea(pGeometry);buiIder.Append(areaText);IDictionary<string,double>resultsFeatureDealUtil.QueryLayerAreaForUnikevaluesdayerasIFeatureLayer,"地类名称",pGeometry);foreach(varresultinresults)builder.Append(string.Format(*0:lrn*,result.Key,result.Value.ToStringO);)this.richTextBoxl.Text=builder.ToStringO;)privatedoubleGetAreadGeometrygeometry)IAreapArea=geometryas!Area;returnpArea.Area;1.3.3算法实现图13线缓冲区统计结果1.4.实验总结地物分类统计因为运用ArCEgnine二次开发接口,所以本身并无多少复杂的算法,核心是熟悉各类开发接口,熟悉相关空间分析和统计功能的ArCEngine的代码实现。在实际的试验中,还需要熟悉相关字典和集合的运用,特别是对于地物分类统计面积中,首先需要统计地物类,再根据地物类进行分类统计。实验二:GIS应用实验:甘孜水利侵蚀2.1. 实验目的(1)了解和熟悉常用GIS和RS等软件的应用(2) 了解和掌握水利侵蚀相关计算模型和计算方法,运用相关软件实现(3)进一步加深对GlS的理解2.2. 实验内容利用ArCGIS、Envi和网络资源进行甘孜水利侵蚀的计算2.3, 甘孜县水利侵蚀统计技术流程2.3. 1流程图流程图如下:图2-1水利侵蚀计算流程图2.3.2技术流程(1)获取数据,包括甘孜县遥感影像、土地利用类型数据、dem数据(2)利用Envi软件根据遥感影像计算和生成NDVI。图2-2NDVl计算过程图2-3NDVl计算结果(3)对遥感数据进行预处理(正射校正等),处理完后就该数据生成植被覆盖度。(4)利用ArcGlS重分类工具对植被指数覆盖度进行重分类:图2-4重分类过程图2-5重分类结果(5)利用ArcGIS的slope工具根据DEM数据生成坡度。4SlopeIxtrasterOutputrstrD:GISCTS¾gS计.通S1”Ja0PUtl>ut5Qa¾rsmt(optional)rag31hex(option)I-11图2-6坡度计算过程图2-7坡度计算结果(6)使用ArCGlS重分类工具对坡度进行重分类,t RecbssifyInput rsttr a,” R«eKt> fi14 ;V«luOntput rasterC13ify lt Entritcis>A图2-8坡度重分类过程图2-9坡度重分类结果(7)利用ArcMap要素转栅格工具将土地利用数据按CLASS字段转成栅格图2-10要素转栅格过程图2-11土地利用栅格数据(8)对土地利用栅格数据进行重分类,分为非耕地、耕地2类。% Red”的- X图2-12土地利用重分类过程图2-13土地利用重分类结果(9)根据下图进行计算非耕地与耕地的侵蚀程度。由栅格计算器计算:FUsterCalculator-XpAlgbrexpressionlayersandvariables图2-16耕地侵蚀计算结果(10)按照9步相同方法计算非耕地侵蚀:.RasterCalculatorAIGrQ*xprstio地心ureure -1SiOPe雌翎 ConditionalConPKkSetNJMath*1lltMSa多耕地RedM$.9ope图2-17非耕地侵蚀计算过程2.3.3技术成果图2-18非耕地侵蚀计算结果甘孜县水利侵蚀图,学,twyn学*><,«rr图2-19阿坝地区水利侵蚀计算结果2.4. 实验总结阿坝地区水利侵蚀的计算运用到了一系列的空间数据处理和空间分析等操作,使用到了ArCGIS和EnVi等两大比较常用的GlS和遥感软件,在实际的操作中,遇到了一系列的相关问题,比如因为细节问题而导致的重分类结果不正确等,所有的操作均是对平时的GIS操作的实践与巩固,收获还是比较巨大的。通过对此次GIS课程设计,我们按照老师课堂的要求和相关数据,利用ArcEngine二次开发平台,VS2013集成开发工具、ArcMap,Envi等几大工具分别完成了地物统计的开发实验和甘孜水利侵蚀计算的应用实验,收获良多,主要体现在几个方面:1 .深刻理解和掌握了ArcEngine二次开发平台的相关接口和类库。2 .在利用ArCEngine实现地物分类统计时,比较全面的应用了缓冲区运算,拓扑运算和地图导出等功能,所以整体提升了对GIS开发的掌握能力。3 .我们也进一步熟悉了ArcEngine开发接口以及高级功能,加深了自己对GIS空间分析和空间统计的理解。4 .加强了对ArcMap和Envi软件掌握和熟练程序,在一定程度上提升了我们的实践和动手能力。5 .ArcEngine和ArcMap整体上是相通的,同为ArcGIS产品,同时ArcObjects又是整个ArCGIS产品的核心,所以在实际的实验当中,我们也运用到了ArCObjeCtS的相关开发组件,所有的开发功能均与ArCMaP类似,只不过将UI互动改为了代码的操作和处理。6 .相比开发实验,我们在GlS应用实验,也就是甘孜水利侵蚀的计算当中,遇到了更多的问题,主要是由于我们的知识面比较有限、对相关模型和计算公式不太了解,因此比较难以下手,不过在后期的讨论与查询资料中,很好的解决了这些问题,这是一次比较成功的实践虽然本地的GlSKEC课程设计比较简单,不过在背后有深刻的意义,我们应该重点的去学习和总结,两个实验的背后都代表了GIS领域中比较重要的开发应用平台和相关分析方法,所以我们应该加以拓展和理解。学生(签名):2017年1月9日成绩评定:指导教师(签名):年月日22

    注意事项

    本文(GIS课程设计.docx)为本站会员(夺命阿水)主动上传,课桌文档仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知课桌文档(点击联系客服),我们立即给予删除!

    温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




    备案号:宁ICP备20000045号-1

    经营许可证:宁B2-20210002

    宁公网安备 64010402000986号

    课桌文档
    收起
    展开