1、接口教程ArcGIS Engine空间分析空间分析功能是GIS的主要功能之一,本章将为读者介绍一些GIS开发常用的功能涉及到的空间拓扑运算,空间关系运算,空间临近运算所使用到的接口。例如开发一个缓冲区分析功能,获取两个几何要素的最短距离,判断两个几何要素的拓扑关系等都需要使用到这些接口,使用这些接口可以极大提高开发者的开发效率。1.1目标1.熟悉ITopologicalOperator接口(用于空间拓扑运算)的使用2.熟悉IRelationalOperator接口(用于空间拓扑运算)的使用3.熟悉IProximityOperator接口(用于空间拓扑运算)的使用1.2准备工作1.IDE:Vis
2、ual Studio 2005/20082.ArcGIS Engine Developer kit 9.31.1 ITopologicalOperator接口1.1.1 ITopologicalOperator接口简介ITopologicalOperator接口用来通过对已存在的几何对象做空间拓扑运算以产生新的结合对象。实现该接口的类有Point,Multipoint,Polyline,Polygon,MultiPatch这些都是高级几何对象,另外GeometryBag也实现了该接口,低级的构建几何对象如Segments(Line,Circular Arc,Elliptic Arc,Bezie
3、r Curve),Paths或者Rings如果想使用该接口需包装成高级几何对象。ITopologicalOperator接口在GIS开发中使用非常广泛,通常GIS系统中缓冲区分析,裁剪几何图形,几何图形差分操作,几何图形合并操作等都需要使用此接口。下表是ITopologicalOperator接口主要的方法说明:方法名称说明 Boundary几何图形对象的边界 Buffer对几何图形对象进行缓冲区空间拓扑操作 clip对几何图形对象进行裁剪空间拓扑操作 ConstructUnion高效的合并多个枚举几何对象与单个几何对象合并为单个几何对象,这对于大量几何对象的合并非常高效 ConvexHull
4、构建几何对象的凸边形 Cut切割几何对象 Difference一个几何图形减去它与另一个几何图形相交的部分 Intersect两个同维度几何对象的交集部分 Simplify使几何对象拓扑一致 SymmetricDifference对称差分将两个几何图形的并集部分减去两个几何图形交集的部分Union合并两个同维度的几何对象为单个几何对象 1. Boundary属性如图所示Polygon几何对象的Boundary是组成它的Polyline几何对象Polyline几何对象的Boundary是组成它的顶点Point几何对象而Point几何对象的Boundary是空对象,示意图如下图所示:2010-10
5、-25 15:24 上传下载附件 (20.15 KB) 2.Buffer方法:Buffer方法可以给一个高级几何对象产生一个缓冲区,无论是Polygon,Polyline,Point它们的缓冲区都是具有面积的几何对象,如下图所示:2010-10-25 15:25 上传下载附件 (11.73 KB) 3.Clip方法Clip方法可以将用一个Envelope对象对一个几何对象进行裁剪,参见结果是几何对象被Envelope 对象所包围的部分如图所示:2010-10-25 15:25 上传下载附件 (16.11 KB) 4.ConvexHull方法ConvexHull方法可以产生一个几何图形的最小的边
6、框凸多边形(没有凹面包含几何图形的最小多边形)2010-10-25 15:26 上传下载附件 (11.54 KB) 5.Cut方法Cut方法不支持GeometryBags几何对象,它可以指定一条切割曲线和一个几何图形,经过切割运算后把几何图形分为左右两部分,做,右两部分是相对曲线的方向而言。点与多点不能被切割,Polyline和Polygon只有与切割曲线相交时才能执行Cut方法,如下图:2010-10-25 15:27 上传下载附件 (10.03 KB) 6.Difference方法Difference方法用于产生两个几何对象的差集。如图所示:2010-10-25 15:27 上传下载附件
7、(10.61 KB) 7.Union方法和ConstructUnion都用于合并几何对象,所不同的是前者合并两个同维度的几何对象为单个几何对象,而后者是高效的合并多个枚举几何对象与单个几何对象合并为单个几何对象,这对于大量几何对象的合并非常高效的。2010-10-25 15:28 上传下载附件 (5.69 KB) 8.Intersect方法Intersect方法用于返回两个同维度几何对象的交集,即两个几何对象的重合部分。如下图所示:2010-10-25 15:28 上传下载附件 (8.04 KB) 9.SymetricDifference方法SymetricDifference方法用于产生两个
8、几何图形的对称差分,即两个几何的并集部分减去两个几何的交集部分,如下图所示:2010-10-25 15:29 上传下载附件 (12.38 KB) 10.IsSimple属性和Simplify方法IsSimple属性用于检测几何对象是否是拓扑正确即为简化几何对象,而Simplify方法用于简化几何对象使几何对象的拓扑正确。如下图所示:2010-10-25 15:29 上传下载附件 (50.01 KB) 简化几何对象功能开发 在开发对几何对象空间分析时,所操作的几何对象必须是简化的几何对象,以下代码片段演示了如何使一个几何对象在拓扑上一致,例如在一个PointCollection对象中移除所有的重
9、合点;对于segmentCollection移除所有重合线段,而相交的线段会变成非相交线段(即在相交处产生一个顶点);对于Polygon所有相交的环将被移除,未封闭的环将被封闭。 1. / <summary>2. / 简化几何对象3. / </summary>4. / <param name="pGeometry">几何对象</param>5. private void SimplifyGeometry(IGeometry pGeometry)6. 7. try8. 9. ITopologicalOperator pTopOp
10、erator = pGeometry as ITopologicalOperator;10. if (pTopOperator != null)11. 12. if (!(pTopOperator.IsKnownSimple)13. 14. if (!(pTopOperator.IsSimple)15. 16. pTopOperator.Simplify();17. 18. 19. 20. 21. catch (Exception Err)22. 23. MessageBox.Show(Err.Message, "提示", MessageBoxButtons.OK, Mes
11、sageBoxIcon.Information);24. 25. 复制代码6.4 IRelationalOperator接口6.4.1 IRelationalOperator接口简介几何对象之间都存在某种关联关系,如包含,相等,在内部,相交,叠加等。这些关联关系的获得都可以通过IRelationalOperator接口来获得,关系运算是在两个几何对象间进行的,通过IRelationalOperator的某一个方法返回一个布尔值来说明这两个几何对象是否有这种关系。所有支持ITopologicaloperator的几何对象的类也实现了IRelationalOperator接口,其中包括Envelo
12、pe对象,这意味着还可以对两个几何对象的Envelope进行关联关系检查。方法名称 描述Contains 检查两个几何图形几何图形1是否包含几何图形Crosses 用于检测两个几何图形是否相交Equal 用于检测两个几何图形是否相等Touches 用于检测两个几何图形是否相连Disjoint 用于检测两个几何图形是否不相交Overlaps 用于检测两个几何图形是否有重叠Relation 用于检测是否存在定义relationshipWithin 检查两个几何图形几何图形1是否被包含于几何图形6.4.2判断几何对象包含关系功能开发 以下代码片段演示如何判断几何图形A是否包含几何图形B: 1. 1.
13、 / 检测几何图形A是否包含几何图形B 2. 2. / 3. 3. / 几何图形A 4. 4. / 几何图形B 5. 5. / True为包含,False为不包含 6. 6. private bool CheckGeometryContain(IGeometry pGeometryA, IGeometry pGeometryB) 7. 7. 8. 8. IRelationalOperator pRelOperator = pGeometryA as IRelationalOperator; 9. 9. if (pRelOperator.Contains(pGeometryB) 10. 10.
14、11. 11. return true; 12. 12. 13. 13. else 14. 14. 15. 15. return false; 16. 16. 17. 17. 复制代码6.5 IProximityOperator接口6.5.1 IProximityOperator接口简介IProximityOperator接口用于获取两个几何图形的距离,以及给定一个Point,求另一个几何图形上离离给定点最近的点。IProximityOperator接口的主要方法有:QueryNearesPoint,ReturnDistance, ReturnNearestPoint ReturnDistan
15、ce方法用于返回两个几何对象间的最短距离,QueryNearesPoint方法用于查询获取几何对象上离给定输入点的最近距离的点的引用,ReturnNearestPoint方法用于创建并返回几何对象上离给定输入点的最近距离的点。6.5.2 最近点查询功能开发以下代码片段演示如何使用IProximityOperator接口获取给定点与要查询的几何图形的最近点: 1. 1./ 在pGeometry上返回一个离pInputPoint最近的point2. 3. 2. / 4. 5. 3. / 给定的点对象6. 7. 4. / 要查询的几何图形8. 9. 5. / the nearest Point10.
16、 11. 6. private IPoint NearestPoint(IPointpInputPoint, IGeometry pGeometry)12. 13. 7. 14. 15. 8. try16. 17. 9. 18. 19. 10. IProximityOperator pProximity = (IProximityOperator)pGeometry;20. 21. 11. IPoint pNearestPoint = pProximity.ReturnNearestPoint(pInputPoint, esriSegmentExtension.esriNoExtension)
17、;22. 23. 12. return pNearestPoint;24. 25. 13. 26. 27. 14. catch(Exception Err)28. 29. 15. 30. 31. 16. MessageBox.Show(Err.Message, "提示", MessageBoxButtons.OK, MessageBoxIcon.Information);32. 33. 17. return null;34. 35. 18. 36. 37. 19.复制代码以下代码片段演示如何使用IProximityOperator接口查询给定的两个几何对象的距离: 1. /
18、 获取两个几何图形的距离2. 3. 4. 1. / 5. 2. / 几何图形A 6. 3. / 几何图形B 7. 4. / 两个几何图形的距离 8. 5. private doubleGetTwoGeometryDistance(IGeometry pGeometryA, IGeometry pGeometryB) 9. 6. 10. 7. IProximityOperatorpProOperator = pGeometryA as IProximityOperator; 11. 8. if (pGeometryA!=null| pGeometryB !=null) 12. 9. 13. 10. double distance=pProOperator.ReturnDistance(pGeometryB); 14. 11. return distance; 15. 12. 16. 13. else 17. 14. 18. 15. return 0; 19. 16. 20. 17. 复制代码
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1