using System; using System.Collections.Generic; using System.Linq; using System.Text; using ESRI.ArcGIS.esriSystem; using ESRI.ArcGIS.Geometry; namespace Kingo.RuleCheck.CheckHelper { /// /// 合并图形类 /// public class UnionGeometry { private IGeometryCollection m_pGeometryCollection = new GeometryBagClass(); public IGeometryCollection GeometryCollection { get { return m_pGeometryCollection; } } /// /// 添加图形 /// /// /// public bool AddGeometry(IGeometry pGeometry) { object missing = Type.Missing; IClone pClone = pGeometry as IClone; IGeometry pTemp = pClone.Clone() as IGeometry; m_pGeometryCollection.AddGeometry(pTemp, ref missing, ref missing); return true; } /// /// 合并图形 /// /// public IGeometry ConstructUnion() { if (m_pGeometryCollection.GeometryCount == 0) return null; if (m_pGeometryCollection.GeometryCount == 1) return m_pGeometryCollection.get_Geometry(0); if (m_pGeometryCollection.get_Geometry(0).GeometryType == esriGeometryType.esriGeometryPolygon) { ITopologicalOperator4 pTopologicalOperator4 = new PolygonClass(); pTopologicalOperator4.ConstructUnion(m_pGeometryCollection as IEnumGeometry); ITopologicalOperator2 pTopo2 = pTopologicalOperator4 as ITopologicalOperator2; pTopo2.IsKnownSimple_2 = false; pTopo2.Simplify(); return pTopo2 as IGeometry; } else if (m_pGeometryCollection.get_Geometry(0).GeometryType == esriGeometryType.esriGeometryPolyline) { ITopologicalOperator3 pTopologicalOperator3 = new PolylineClass(); pTopologicalOperator3.ConstructUnion(m_pGeometryCollection as IEnumGeometry); return pTopologicalOperator3 as IGeometry; } else if (m_pGeometryCollection.get_Geometry(0).GeometryType == esriGeometryType.esriGeometryPoint) { ITopologicalOperator2 pTopologicalOperator2 = new MultipointClass(); pTopologicalOperator2.ConstructUnion(m_pGeometryCollection as IEnumGeometry); return pTopologicalOperator2 as IGeometry; } else { return null; } } } }