ArcGIS Engine 10 开发手册(5-9)Geometry集合接口(一)
通过前边对于具体的 Geometry 对象的介绍可知,除了 Point 对象之外,其他几何对象都是通过其他 几何对象集合构建而成。如 MultiPoint 对象是点的集合,Path 对象是 Segment 对象的集合,Polyline 对 象是 Path 对象的集合,Polygon 对象是 Ring 对象的集合,Multipatch 对象是 Triangle Strip 和 Trangle Fan, Trangle,Ring 对象的集合。
ArcGIS Engine 提供了 三 个主要的 几 何图形集 合 接口用于 对 几何对象 的 操作,分 别 是 IPointCollection,ISegmentCollection 和 IGeometryCollection,这些接口揭示出 ArcGIS Engine 的几 何模型的实质——它们是一种组合构成的模式,这种组合并不一定按照严格的层次结构组织。
在前面介绍一些几何对象的时候,也给大家演示了部分使用功能,这三个接口在程序开发中经常使 用到,接下来简单阐述以下这三个接口的使用方法。
IGeometryCollection 接口被 Polygon,Polyline, Multipoint, Multipatch, Trangle,T rangle Strip,Trangle Fan 和 GeometryBag 所实现。IGeometryCollection 接口提供的方法可以让开发者对一个 几何对象的组成元素即子对象进行添加,改变和移除。例如:
组成 Polyline 对象的子对象是 Path 对象。
组成 Polygon 对象的子对象是 Ring 对象。 组成 Multipoint 对象的子对象是 Point 对象。
组成 MultiPatch 对象的子对象是 TrangleFan TrangleStrip,Triangle 或 Ring 对象。
组成 GeometryBag 对象的是任何类型的几何体对象,实际上 GeometryBag 是一个可以容纳任何类型 几何对象的容器。
IGeometryCollection 这个接口是具有相同类型的几何对象的集合,该接口的的 Geometry 属性可以 通过一个索引值返回一个组成该几何对象的某个子对象,而 GeometryCount 返回组成该几何对象的子对象 的数目。
IGeometryCollection 的 AddGeometry 和 AddGeometries 方法都用于向一个几何对象添加子对象,它 们的区别是前者一次只能添加一个几何对象,而后者可以一次添加一个几何对象数组。除此之外, AddGeometry 方法可以将子对象添加到几何的指定索引值的位置,而 AddGeometries 方法将子对象数组添 加到集合的最后。
在使用 AddGeometry 方法添加子对象到 Polygon 对象的过程中,如果子对象即 Ring 出现覆盖现象, 那么多 边形 就 没有封 闭或 出 现了包 含关 系 ,那么 这个 Polygon 就不 是简单 Polygon ,因 此通 过 IGometryCollection 来创建一个 Polygon 时,需要使用 ITopologicalOperator 的 Simplify 方法保证其有 效性。
IGeometryCollection接口
通过 IGeometryCollection 创建一个 Polygon 对象的代码片段如下:
private IPolygon ConstructorPolygon (List <IRing> pRingList)
{
try
{
IGeometryCollection pGCollection = new PolygonClass ();
object o = Type.Missing;
for (int i = 0; i < pRingList.Count; i++)
{
//通过IGeometryCollection接口的AddGeometry方法向Polygon对象中添加Ring子对象
pGCollection.AddGeometry (pRingList[i], ref o, ref o);
}
//QI至ITopologicalOperator
ITopologicalOperator pTopological = pGCollection as ITopologicalOperator;
//执行Simplify操作 pTopological.Simplify();
IPolygon pPolygon = pGCollection as IPolygon;
//返回Polygon对象 return pPolygon;
} catch (Exception Err)
{
return null;
}
}
private IPolygon MergePolygons (IPolygon firstPolygon, IPolygon SecondPolygon)
{
try
{
//创建一个Polygon对象
IGeometryCollection pGCollection1 = new PolygonClass ();
IGeometryCollection pGCollection2 = firstPolygon as
IGeometryCollection;
IGeometryCollection pGCollection3 = SecondPolygon as IGeometryCollection;
//添加firstPolygon
pGCollection1.AddGeometryCollection(pGCollection2);
//添加SecondPolygon
pGCollection1.AddGeometryCollection(pGCollection3);
//QI至ITopologicalOperator
ITopologicalOperator pTopological = pGCollection1 as ITopologicalOperator;
//执行Simplify操作
pTopological.Simplify();
IPolygon pPolygon = pGCollection1 as IPolygon;
//返回Polygon对象
return pPolygon;
} catch (Exception Err)
{
return null;
}
}
未完待续
ArcGIS Engine 10 开发手册全集
ArcGIS Engine 10 开发手册全集: ArcGIS Engine 10 开发手册
相关阅读
声明
1.本文所分享的所有需要用户下载使用的内容(包括但不限于软件、数据、图片)来自于网络或者麻辣GIS粉丝自行分享,版权归该下载资源的合法拥有者所有,如有侵权请第一时间联系本站删除。
2.下载内容仅限个人学习使用,请切勿用作商用等其他用途,否则后果自负。