ArcEngine实现空间拓扑空间关联空间距离运算.doc_第1页
ArcEngine实现空间拓扑空间关联空间距离运算.doc_第2页
ArcEngine实现空间拓扑空间关联空间距离运算.doc_第3页
ArcEngine实现空间拓扑空间关联空间距离运算.doc_第4页
ArcEngine实现空间拓扑空间关联空间距离运算.doc_第5页
已阅读5页,还剩17页未读 继续免费阅读

下载本文档

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

文档简介

【051】 ArcEngine实现空间分析1.熟悉 ITopologicalOperator 接口(用于空间拓扑运算)的使用2.熟悉 IRelationalOperator 接口(用于空间关联运算)的使用3.熟悉 IProximityOperator 接口(用于空间距离运算)的使用 目录:A1 ITopologicalOperator5 接口 公共方法: Buffer 方法: Boundary 方法: Clip 方法: ConvexHull 方法: Cut 方法: Union 方法: Intersect 方法: Difference 方法:A2 IRelationalOperator 接口 公共方法: Contains 方法: Overlaps 方法:A3 IPoint 接口A4 ICurve3 接口A5 ISegment 接口A6 ICircularArc 接口 -写在前面:使用空间分析的时候,会提示这样的错误“异常来自 HRESULT:0x80040215”,其原因就是:在使用 ITopologicalOperator求交集等操作的时候,有时会出现“ HRESULT:0x80040215”这个异常,原来是空间参考不一样所致。因此只要SpatialReference 属性设为同一空间参考就不会出现“ HRESULT:0x80040215”异常。所以在进行空间分析之前,要保证所建立的shapefile文件具有相同的SpatialReference!- 第A1个 ITopologicalOperator5 接口:1. Provides additional information on non-simple geometries.【拓扑操作】MembersDescriptionBoundary返回值:IGeometryThe boundary of this geometry. A polygons boundary is a polyline. A polylines boundary is a multipoint. A point or multipoints boundary is an empty point or multipoint.Buffer(double distance)返回值:IGeometry Constructs a polygon that is the locus of points at a distance less than or equal to a specified distance from this geometry.通过给定距离,得到操作图形的缓冲区,返回得到缓冲区几何图形!但是这里面的距离很是蹊跷,同时实验发现,我写入 0.01 的时候,大约表示 1km,所以大约是 1:100 000 的关系!Clip(IEnvelope clipperEnvelope)Constructs the intersection of this geometry and the specified envelope.返回矩形部分的要素,直接作用在要素上面!ClipDenseConstructs the intersection of this geometry and the specified envelope; densifies lines in output contributed by the clipping envelope.ClipExConstructs the intersection of this geometry and the specified envelope.ClipToDomainClips the geometry to the domain of the spatial reference. Useful for ensuring that buffers can be fit within the spatial domain of the feature class to which they are being added.ConstructUnionDefines this geometry to be the union of the inputs. More efficient for unioning multiple geometries than calling Union repeatedly.ConvexHullConstructs the convex hull of this geometry.CutSplits this geometry into a part left of the cutting polyline, and a part right of it.Cut2Divides a geometry into multiple partsDifferenceConstructs the geometry containing points from this geometry but not the other geometry.GeoNormalizeExShifts longitudes, if need be, into a continuous range of 360 degrees.IntersectConstructs the geometry that is the set-theoretic intersection of the input geometries. Use different resultDimension values to generate results of different dimensions.IntersectMultidimensionConstructs the set-theoretic intersection of the inputs. The results are returned in a geometry bag with one element per result dimension.IsKnownSimpleIndicates whether this geometry is known (or assumed) to be topologically correct.IsKnownSimpleIndicates whether this geometry is known (or assumed) to be topologically correct.IsSimpleIndicates whether this geometry is known (or assumed) to be topologically correct, after explicitly determining this if the geometry is not already known (or assumed) to be simple.IsSimpleExDetermines why a geometry is not simple. Currently only implemented for polygons.QueryClippedRedefines clippedGeometry to be the intersection of this geometry and the clipping envelope.QueryClippedDenseRedefines clippedGeometry to be the intersection of this geometry and the clipping envelope; densifies lines in the output contributed by the clipping envelope.SimplifyMakes this geometry topologically correct.SymmetricDifferenceConstructs the geometry that contains points from either but not both input geometries.UnionConstructs the geometry that is the set-theoretic union of the input geometries.CoClasses that implement ITopologicalOperatorCoClasses and ClassesDescriptionGeoEllipse (esriDefenseSolutions)Its a spheroidal ellipse.GeometryBagAn ordered collection of objects that support the IGeometry interface.GeoPolygon (esriDefenseSolutions)Its a spheroidal polygon.GeoPolyline (esriDefenseSolutions)This is a spheroidal polyline.MultiPatchA collection of surface patches.MultipointAn ordered collection of points; optionally has measure, height and ID attributes.PointA two dimensional point, optionally with measure, height, and ID attributes.PolygonA collection of rings ordered by their containment relationship; optionally has measure, height and ID attributes.PolylineAn ordered collection of paths; optionally has measure, height and ID attributes. | 公共代码部分:/公共变量!IMap pMap;IActiveView pActiveView;IEnvelope pEnv;ISelectionEnvironment pSelectionEnv;IEnumFeature pEnumFeature;IGraphicsContainer pGraphicsContainer;IFeature pFeature;IGeometry pGeometry;IEnvelope pEnvClip;IPolyline pLineCut;IPolygon pFirstPolygon;/鼠标点击事件!private void axMapControl1_OnMouseDown(object sender, IMapControlEvents2_OnMouseDownEvent e) axMapControl1.MousePointer = esriControlsMousePointer.esriPointerCrosshair; if (isClip) /此时要拉Clip框 pEnvClip = axMapControl1.TrackRectangle(); isClip = false; else if (isCut) pLineCut = axMapControl1.TrackLine() as IPolyline; isCut = false; else if (isFirstIn) pMap = axMapControl1.Map; pActiveView = pMap as IActiveView; pEnv = axMapControl1.TrackRectangle(); pSelectionEnv = new SelectionEnvironment(); pSelectionEnv.DefaultColor = GetColor(0, 255, 0); pMap.SelectByShape(pEnv, pSelectionEnv, false); pActiveView.Refresh(); pEnumFeature = axMapControl1.Map.FeatureSelection as IEnumFeature; else pMap = axMapControl1.Map; pActiveView = pMap as IActiveView; pEnv = axMapControl1.TrackRectangle(); pSelectionEnv = new SelectionEnvironment(); pSelectionEnv.DefaultColor = GetColor(255, 0, 0); pMap.SelectByShape(pEnv, pSelectionEnv, false); pActiveView.Refresh(); pEnumFeature = axMapControl1.Map.FeatureSelection as IEnumFeature; /RGB颜色!private IRgbColor GetColor(int r, int g, int b) IRgbColor pColor = new RgbColor(); pColor.Red = r; pColor.Green = g; pColor.Blue = b; return pColor; | Buffer:private void button1_Click(object sender, EventArgs e) while (true) pGraphicsContainer = pMap as IGraphicsContainer; /定义容器 pFeature = pEnumFeature.Next(); /遍历要素 if (pFeature = null) /若不存在要素,则推出循环 break; pGeometry = pFeature.Shape; /获取要素的Geometry ITopologicalOperator pTopoOperator = pGeometry as ITopologicalOperator; /QI到拓扑操作 IGeometry pBufferGeo = pTopoOperator.Buffer(2); /缓冲区分析 IElement pElement = new PolygonElement(); pElement.Geometry = pBufferGeo; /获取得到的缓冲区 pGraphicsContainer.AddElement(pElement, 0); /显示缓冲区 pActiveView.Refresh(); | Boundary:private void button2_Click(object sender, EventArgs e) while (true) pGraphicsContainer = pMap as IGraphicsContainer; /定义容器 pFeature = pEnumFeature.Next(); /遍历要素 if (pFeature = null) /若不存在要素,则推出循环 break; pGeometry = pFeature.Shape; /获取要素的Geometry ITopologicalOperator pTopoOperator = pGeometry as ITopologicalOperator; /QI到拓扑操作 IGeometry pBoundary = pTopoOperator.Boundary; /获取边界 ILineElement pLineEle = new LineElementClass(); ISimpleLineSymbol pSLS = new SimpleLineSymbol(); IRgbColor pColor = GetColor(0, 255, 0); pSLS.Color = pColor; pSLS.Width = 5; pLineEle.Symbol = pSLS; IElement pElement = pLineEle as IElement; pElement.Geometry = pBoundary; pGraphicsContainer.AddElement(pElement, 0); /显示边界 pActiveView.Refresh(); | Clip:bool isClip = false;private void button3_Click(object sender, EventArgs e) isClip = true;private void button4_Click(object sender, EventArgs e) while (true) pGraphicsContainer = pMap as IGraphicsContainer; /定义容器 pFeature = pEnumFeature.Next(); /遍历要素 if (pFeature = null) /若不存在要素,则推出循环 break; pGeometry = pFeature.Shape; /获取要素的Geometry ITopologicalOperator pTopoOperator = pGeometry as ITopologicalOperator; /QI到拓扑操作 pTopoOperator.Clip(pEnvClip); IElement pElement = new PolygonElement(); pElement.Geometry = pGeometry; /获取得到的缓冲区 pGraphicsContainer.AddElement(pElement, 0); /显示缓冲区 pActiveView.Refresh(); | ConvexHull:private void button5_Click(object sender, EventArgs e) while (true) pGraphicsContainer = pMap as IGraphicsContainer; /定义容器 pFeature = pEnumFeature.Next(); /遍历要素 if (pFeature = null) /若不存在要素,则推出循环 break; pGeometry = pFeature.Shape; /获取要素的Geometry ITopologicalOperator pTopoOperator = pGeometry as ITopologicalOperator; /QI到拓扑操作 IGeometry pBufferGeo = pTopoOperator.ConvexHull(); IElement pElement = new PolygonElement(); pElement.Geometry = pBufferGeo; /获取得到的缓冲区 pGraphicsContainer.AddElement(pElement, 0); /显示缓冲区 pActiveView.Refresh(); | Cut:bool isCut = false;private void button6_Click(object sender, EventArgs e) isCut = true;private void button7_Click(object sender, EventArgs e) while (true) pGraphicsContainer = pMap as IGraphicsContainer; /定义容器 pFeature = pEnumFeature.Next(); /遍历要素 if (pFeature = null) /若不存在要素,则推出循环 break; pGeometry = pFeature.Shape; /获取要素的Geometry ITopologicalOperator pTopoOperator = pGeometry as ITopologicalOperator; /QI到拓扑操作ry IGeometry pGeoRight = new PolygonClass(); IGeometry pGeoLeft = new PolygonClass(); pTopoOperator.Cut(pLineCut, out pGeoLeft, out pGeoRight); IElement pElement = new PolygonElement(); IFillShapeElement pFillEle = pElement as IFillShapeElement; ISimpleFillSymbol pSFS = new SimpleFillSymbol(); pSFS.Color = GetColor(255, 255, 0); pFillEle.Symbol = pSFS; pElement.Geometry = pGeoLeft; /获取得到的缓冲区 pGraphicsContainer.AddElement(pElement, 0); /显示缓冲区 pSFS = new SimpleFillSymbol(); pSFS.Color = GetColor(255, 0, 255); pFillEle.Symbol = pSFS; pElement = new PolygonElement(); pElement.Geometry = pGeoRight; /获取得到的缓冲区 pGraphicsContainer.AddElement(pElement, 0); /显示缓冲区 pActiveView.Refresh(); | Union:private void button8_Click(object sender, EventArgs e) IGeometry pUnionGeo = new PolygonClass(); pGraphicsContainer = pMap as IGraphicsContainer; /定义容器 while (true) pFeature = pEnumFeature.Next(); /遍历要素 if (pFeature = null) /若不存在要素,则推出循环 break; pGeometry = pFeature.Shape; /获取要素的Geometry ITopologicalOperator pTopoOperator = pUnionGeo as ITopologicalOperator; /QI到拓扑操作ry pUnionGeo = pTopoOperator.Union(pGeometry); IElement pElement = new PolygonElement(); IFillShapeElement pFillEle = pElement as IFillShapeElement; ISimpleFillSymbol pSFS = new SimpleFillSymbol(); pSFS.Color = GetColor(255, 255, 0); pFillEle.Symbol = pSFS; pElement.Geometry = pUnionGeo; /获取得到的缓冲区 pGraphicsContainer.AddElement(pElement, 0); /显示缓冲区 pActiveView.Refresh(); | Intersect:bool isFirstIn = false;private void button10_Click(object sender, EventArgs e) isFirstIn = true;private void button11_Click(object sender, EventArgs e) isFirstIn = false; pFirstPolygon = new PolygonClass(); while (true) pFeature = pEnumFeature.Next(); if (pFeature = null) break; pGeometry = pFeature.Shape; ITopologicalOperator pTopoOperator = pFirstPolygon as ITopologicalOperator; pFirstPolygon = pTopoOperator.Union(pGeometry) as IPolygon; private void button12_Click(object sender, EventArgs e) IGeometry pIntersectGeo = new PolygonClass(); IGeometry pSecondPolygon = new PolygonClass(); pGraphicsContainer = pMap as IGraphicsContainer; while (true) pFeature = pEnumFeature.Next(); if (pFeature = null) break; pGeometry = pFeature.Shape; ITopologicalOperator pTopoOperator = pSecondPolygon as ITopologicalOperator; pSecondPolygon = pTopoOperator.Union(pGeometry) as IPolygon; ITopologicalOperator pTopo = pSecondPolygon as ITopologicalOperator; pIntersectGeo = pTopo.Intersect(pFirstPolygon, esriGeometryDimension.esriGeometry2Dimension) as IPolygon; IElement pElement = new PolygonElementClass(); pElement.Geometry = pIntersectGeo; pGraphicsContainer.AddElement(pElement, 0); IFeatureLayer pFeatureLayer = pMap.get_Layer(0) as IFeatureLayer; pFeatureLayer.Visible = false; pFeatureLayer = pMap.get_Layer(1) as IFeatureLayer; pFeatureLayer.Visible = false; pActiveView.Refresh(); | Difference:(需要前面两部分)private void button13_Click(object sender, EventArgs e) IGeometry pIntersectGeo = new PolygonClass(); IGeometry pSecondPolygon = new PolygonClass(); pGraphicsContainer = pMap as IGraphicsContainer; while (true) pFeature = pEnumFeature.Next(); if (pFeature = null) break; pGeometry = pFeature.Shape; ITopologicalOperator pTopoOperator = pSecondPolygon as ITopologicalOperator; pSecondPolygon = pTopoOperator.Union(pGeometry) as IPolygon; ITopologicalOperator pTopo = pSecondPolygon as ITopologicalOperator; pIntersectGeo = pTopo.Difference(pFirstPolygon) as IPolygon; IElement pElement = new PolygonElementClass(); pElement.Geometry = pIntersectGeo; pGraphicsContainer.AddElement(pElement, 0); IFeatureLayer pFeatureLayer = pMap.get_Layer(0) as IFeatureLayer; pFeatureLayer.Visible = false; pFeatureLayer = pMap.get_Layer(1) as IFeatureLayer; pFeatureLayer.Visible = false; pActiveView.Refresh();- 第A2个 IRelationalOperator 接口:1. Provides access to members that determine if a certain spatial relationship exists between two geometries.MembersDescriptionContainsIndicates if this geometry contains the other geometry.前者是否包含后者!CrossesIndicates if the two geometries intersect in a geometry of lesser dimension.DisjointIndicates if the two geometries share no points in common. Negate this result to compute the Intersect relation.EqualsIndicates if the two geometries are of the same type and define the same set of points in the plane.OverlapsIndicates if the intersection of the two geometries has the same dimension as one of the input geometries.前者和后者是否有重叠!不包括包含关系!RelationIndicates if the defined relationship exists.TouchesIndicates if the boundaries of the geometries intersect.WithinIndicates if this geometry is contained (is within) another geometry.前者是否在后者内部!CoClasses that implement IRelationalOperatorCoClasses and ClassesDescriptionEnvelopeA rectangle with sides parallel to a coordinate system defining the extent of another geometry; optionally has min and max measure, height and ID attributes.GeometryBagAn ordered collection of objects that support the IGeometry interface.MultiPatchA collection of surface patches.MultipointAn ordered collection of points; optionally has measure, height and ID attributes.PointA two dimensional point, optionally with measure, height, and ID attributes.PolygonA collection of rings ordered by their containment relationship; optionally has measure, height and ID attributes.PolylineAn ordered collection of paths; optionally has measure, height and ID attributes. | 公共代码部分:IMap pMap;IActiveView pActiveView;IEnvelope pEnv;ISelectionEnvironment pSelectionEnv;IEnumFeature pEnumFeature;IFeature pFeature;IGeometry pGeometry;IGeometry pBasicGeo;private void axMapControl1_OnMouseDown(object sender, IMapControlEvents2_OnMouseDownEvent e) axMapControl1.MousePointer = esriControlsMousePointer.esriPointerCrosshair; pMap = axMapControl1.Map; pActiveView = pMap as IActiveView; pEnv = axMapControl1.TrackRectangle(); pSelectionEnv = new SelectionEnvironment(); pSelectionEnv.DefaultColor = GetColor(255, 0, 0); pMap.SelectByShape(pEnv, pSelectionEnv, false); pActiveView.Refresh(); pEnumFeature = pMap.FeatureSelection as IEnumFeature;private IRgbColor GetColor(int r, int g, int b) IRgbColor pColor = new RgbColor(); pColor.Red = r; pColor

温馨提示

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

评论

0/150

提交评论