『公告』 预祝您龙年大吉,万事如意, 过节期间, 大家如需数据服务,请拨打400 或直接添加客服微信,再祝大家龙年,心想事成。
关注我们 新浪 腾讯

ArcGIS Engine 10 开发手册(5-9)Geometry集合接口(一)

ArcGIS Engine 10 开发手册(5-9)Geometry集合接口(一)
通过前边对于具体的 Geometry 对象的介绍可知,除了 Point 对象之外,其他几何对象都是通过其他 几何对象集合构建而成。

    通过前边对于具体的 Geometry 对象的介绍可知,除了 Point 对象之外,其他几何对象都是通过其他 几何对象集合构建而成。如 MultiPoint 对象是点的集合,Path 对象是 Segment 对象的集合,Polyline 象是 Path 对象的集合,Polygon 对象是 Ring 对象的集合,Multipatch 对象是 Triangle Strip Trangle Fan TrangleRing 对象的集合。


    ArcGIS Engine 提供了 个主要的 何图形集 接口用于 几何对象 操作,分 IPointCollectionISegmentCollection IGeometryCollection,这些接口揭示出 ArcGIS Engine 的几 何模型的实质——它们是一种组合构成的模式,这种组合并不一定按照严格的层次结构组织。

 

    在前面介绍一些几何对象的时候,也给大家演示了部分使用功能,这三个接口在程序开发中经常使 用到,接下来简单阐述以下这三个接口的使用方法。

 

    IGeometryCollection 接口被 PolygonPolyline Multipoint Multipatch TrangleT rangle StripTrangle Fan GeometryBag 所实现。        IGeometryCollection 接口提供的方法可以让开发者对一个 几何对象的组成元素即子对象进行添加,改变和移除。例如:

 

    组成 Polyline 对象的子对象是 Path 对象。

 

    组成 Polygon 对象的子对象是 Ring 对象。 组成 Multipoint 对象的子对象是 Point 对象。

 

    组成 MultiPatch 对象的子对象是 TrangleFan TrangleStripTriangle 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);

 

    }

 

    //QIITopologicalOperator

 

    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);

 

    //QIITopologicalOperator

 

    ITopologicalOperator pTopological = pGCollection1 as ITopologicalOperator;

 

    //执行Simplify操作

    pTopological.Simplify();

 

    IPolygon pPolygon = pGCollection1 as IPolygon;

 

    //返回Polygon对象

    return pPolygon;

 

  } catch (Exception Err)

 

  {

 

    return null;

 

  }

 

}

未完待续

      京ICP备08100627号-22 京公网安备 11010802030428号