当前位置: 首页 > 免费论文下载 > 电子信息 >
论文服务

基于ArcGIS Engine 的图斑重叠及面层孤岛处理工具的开发

时间:2013-01-09来源:易品网 点击:
  基于ArcGIS Engine 的图斑重叠及面层孤岛处理工具的开发
  摘要: 在图斑的制作过程中,以手工勾绘为主,难免出现图斑重叠等问题,另外AutoCAD 不是专业的GIS 软件,无法处理图斑套图斑的情况,本文采用C# 及ArcEngine 组件库开发了以图幅为单位图斑自动编号的程序,较好地解决了这个问题,并提供了源程序,供相关技术人员参考.
  Abstract: In the production process of the polygon, hand -painting is the main way, so the problem of overlapping is inevitable.
  AutoCAD is not a kind of professional GIS software, so it can not handle the case of the overlapping problem. This paper adopts C# andArcEngine compoments to number the mapsheets. Meanwhile, the source code is provided for reference.
  关键词: ArcGIS Engine;图斑;重叠;面层孤岛
  Key words: ArcGIS Engine;parcels;overlapping;polygon islands0
  引言
  土地利用分类是国家为掌握土地资源现状、制定土地政策、合理利用土地的重要基础工作之一,是在土地资源管理中应用最广、覆盖最全的基础分类.而图斑是指单一地类地块、以及被行政界线、土地权属界线或线状地物分割的单一地类地块,在土地利用现状图中,图斑是制图的最小单元.
  依照相关技术规定(《第二次全国土地调查技术规程》、《土地利用数据库标准》以及《天津市第二次土地调查土地利用现状调查技术规定》) 要求,需要在调查的基础上,将调绘资料转绘到计算机中,目前一般采用AutoCAD作为图斑录入的平台,在实际工作中,由于制作过程中以手工勾绘为主,难免出现图斑重叠等问题,另外AutoCAD不是专业的GIS 软件,无法处理图斑套图斑的情况,这就需要我们采用其他方法来进行处理,例如采用ArcGis 等软件来处理此类问题,当然这需要使用人员比较熟练地掌握ArcGis 的使用,另外一种方式就是采用本文提出的利用ArcEngine 来开发专用处理工具,简化了许多步骤,使得一般作业人员也很容易进行处理.
  1 ArcGIS Engine 简介ArcGIS Engine 是建立在ArcObject 之上的一个完整的嵌入式的GIS 组件库.ArcObjects 是整个ArcGIS Engine软件的核心功能库,它是由平台独立的COM 对象组成.
  ArcGIS Engine 在核心ArcObjects 组件上又做了一次封装,开发人员可以用来构建自定义GIS 和制图应用程序.
  这些对象是平台独立的,可以从不同的平台来访问.开发人员可以扩展对象库,并且完全控制应用软件用户界面的外形和感觉.
  ArcGIS Engine 由两个产品组成:构建软件所用的开发工具包以及使已完成的应用程序能够运行的可再发布的Runtime(运行时环境).ArcGIS Engine 开发工具包是一个基于组件的软件开发产品,可用于构建自定义GIS 和制图应用软件.它并不是一个终端用户产品,而是软件开发人员的工具包,适于为Windows、UNIX 或Linux 用户构建基础制图和综合动态GIS 应用软件.ArcGIS EngineRuntime 是一个使终端用户软件能够运行的核心ArcObjects 组件产品,并且将被安装在每一台运行ArcGISEngine 应用程序的计算机上.
  2 程序设计思路目前,二调成果或日常工作成果主要以ArcGIS 的SHP 数据格式为主,在进行数据处理前,需要将cad 数据转为SHP 数据.
  图斑重叠基本实现方法如下:①打开shp 文件,启动编辑功能;②检查是否为面状数据,否者退出;③采用游标来构造要素集,通过获取要素的质心来判断要素是否重叠;④将重叠的要素放入一个新的数据集中,待到所有要素检查完成,将多余的要素删除.
  面层孤岛的实现方法:①打开shp 文件,启动编辑功能;②检查是否为面状数据,否者退出;③采用游标来构造要素集,通过获取要素的质心来判断一个要素是否在另一个要素中;④采用ITopologicalOperator 接口的Difference方法,将图斑中的图斑去除,生成新的图斑并保存.
  C# 是微软为.NET Framework 量身订做的程序语言,ArcEngine 是ESRI 公司一套完备的嵌入式GIS 组件库和工具库,这二者的结合是目前开发主流GIS 系统的主要工具和手段,在国土系统及其它领域具有广泛的应用.
  本文所载程序采用vs.net2008 开发环境、ArcGISEngine9.3 组件库开发完成,如果要实现此项功能,需要在电脑上安装vs.net2008 及ArcGIS Engine9.3.
  本程序是根据实际工程需要开发的,并通过天津某区图斑数据的测试.
  3 功能的实现(程序源代码)[4]-[5]
  下面列出这两个工具的主要代码:
  //图层重叠处理public static void HandleOverlayer(string ShapePath){int count;IFeatureEdit pFeatureEdit=null;IWorkspaceFactory pWorkspaceFactory=new ShapefileWorkspaceFactoryClass();IWorkspace pWorkspace=pWorkspaceFactory.OpenFromFile(System.IO.Path.GetDirectoryName(ShapePath), 0);IFeatureWorkspace pFeatureWorkspace=pWorkspace asIFeatureWorkspace;IFeatureClass pFeatureClass =pFeatureWorkspace.
  OpenFeatureClass(System.IO.Path.GetFileNameWithoutExtension(ShapePath));IWorkspaceEdit pWorkspaceEdit = pWorkspace asIWorkspaceEdit;pWorkspaceEdit.StartEditing(true);ISet pSet=new SetClass();IFeatureCursor pFeatureCursor = pFeatureClass.Search(null, false);IFeature pFeature=pFeatureCursor.NextFeature();while (pFeature! =null){ISpatialFilter pSpatialFilter=new SpatialFilterClass();pSpatialFilter.Geometry=pFeature.Shape;pSpatialFilter.GeometryField="shape";pSpatialFilter.SpatialRel=esriSpatialRelEnum.esriSpatialRelContains;count=0;IFeatureCursor pFeatureCursor1 =pFeatureClass.Search(pSpatialFilter, false);IFeature pFeature1=pFeatureCursor1.NextFeature();while (pFeature1 ! = null){++count;if (count > 1)pSet.Add(pFeature1);pFeatureEdit=pFeature1 as IFeatureEdit;pFeature1=pFeatureCursor1.NextFeature();Application.DoEvents();}
  try{if (pSet.Count>0)pFeatureEdit.DeleteSet(pSet);}
  catch (Exception exp){MessageBox.Show(exp.Message);}
  pFeature=pFeatureCursor.NextFeature();}
  pWorkspaceEdit.StopEditing(true);MessageBox.Show (" 数据处理完成! ", " 图层重叠处理", MessageBoxButtons.OK, MessageBoxIcon.Information);}
  //处理面层的孤岛public static void HandlePolygon(string ShapePath){Boolean isChange=false;IWorkspaceFactory pWorkspaceFactory=new ShapefileWorkspaceFactoryClass();IWorkspace pWorkspace=pWorkspaceFactory.OpenFromFile(System.IO.Path.GetDirectoryName(ShapePath), 0);IFeatureWorkspace pFeatureWorkspace=pWorkspace asIFeatureWorkspace;IFeatureLayer pFeatureLayer=new FeatureLayerClass();pFeatureLayer.FeatureClass=pFeatureWorkspace.OpenFeatureClass (System.IO.Path.GetFileNameWithoutExtension(ShapePath));if(pFeatureLayer.FeatureClass.ShapeType!=esri GeometryType.esriGeometryPolygon){MessageBox.Show("当前图层不是面状图层,不能进行处理", " 面层孤岛处理", MessageBoxButtons.OK,MessageBoxIcon.Error);return;}
  IWorkspaceEdit pWorkspaceEdit =pWorkspace asIWorkspaceEdit;pWorkspaceEdit.StartEditing(true);IFeatureCursor pFeatureCursor = pFeatureLayer.Search(new QueryFilterClass(), false);IFeature pFeature = pFeatureCursor.NextFeature();while (pFeature ! =null){IArea pArea=pFeature.Shape as IArea;IRelationalOperator pRelationalOperator =pArea.
  Centroid as IRelationalOperator;ITopologicalOperator pTopologicalOperator = pFeature.
  Shape as ITopologicalOperator;ISpatialFilter pSpatialFilter=new SpatialFilterClass();pSpatialFilter.SpatialRel=esriSpatialRelEnum.esriSpatialRelContains;pSpatialFilter.GeometryField = "shape";pSpatialFilter.Geometry = pFeature.Shape;IFeatureCursor pFeatureCursor1 =pFeatureLayer.Search(pSpatialFilter, false);IFeature pFeature1=pFeatureCursor1.NextFeature();while (pFeature1 ! = null){try{pArea=pFeature1.Shape as IArea;if (! pRelationalOperator.Equals(pArea.Centroid)){pTopologicalOperator=pTopologicalOperator.Difference (pFeature1.Shape) asITopologicalOperator;isChange = true;}
  }
  catch (Exception exp){MessageBox.Show(exp.Message);break;}
  pFeature1 = pFeatureCursor1.NextFeature();}
  System.Runtime.InteropServices.Marshal.ReleaseComObject(pSpatialFilter);System.Runtime.InteropServices.Marshal.ReleaseComObject(pFeatureCursor1);try{if (isChange){pFeature.Shape=pTopologicalOperator as IGeometry;pFeature.Store();isChange = false;}
  }
  catch (Exception exp){MessageBox.Show(exp.Message);break;}
  pFeature=pFeatureCursor.NextFeature();}
  pWorkspaceEdit.StopEditing(true);MessageBox.Show (" 数据处理完成! ", " 面层孤岛处理", MessageBoxButtons.OK, MessageBoxIcon.Information);}
  4 结语在图斑数据入库过程中,作业人员难免会碰到此类问题,即使在今后的工作中,也会有这样的需求,本文采用C# 及ArcEngine 组件库,开发了相应的程序,基本满足规范[1]的要求,提高了工作效率,对相关技术人员有一定的参考价值.
  
  • 认准易品期刊网

1、最快当天审稿 最快30天出刊

易品期刊网合作杂志社多达400家,独家内部绿色通道帮您快速发表(部分刊物可加急)! 合作期刊列表


2、100%推荐正刊 职称评审保证可用

易品期刊网所推荐刊物均为正刊,绝不推荐假刊、增刊、副刊。刊物可用于职称评审! 如何鉴别真伪期刊?

都是国家承认、正规、合法、双刊号期刊,中国期刊网:http://www.cnki.net 可查询,并全文收录。


3、八年超过1万成功案例

易品期刊网站专业从事论文发表服务8年,超过1万的成功案例! 更多成功案例


4、发表不成功100%全额退款保证

易品期刊网的成功录用率在业内一直遥遥领先,对于核心期刊的审稿严格,若未能发表,全额退款! 查看退款证明

特色服务
杂志社内部绿色审稿通道,快速发表论文
发表流程
论文发表流程
专题推荐