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 开发手册

如您有疑问,可在文末留言,或到QQ群提问。

本站QQ群(一):291616564(满) 麻辣GIS

本站QQ群(二):166408035(新) 麻辣GIS(二)

微信公众号:malagis,扫描右边二维码直接关注。

微信捐助麻辣GIS 支付宝捐助麻辣GIS

如果本文对您有所帮助,欢迎对我们团队进行打赏捐助,让我们在传播3S的路上可以走得更远。


作者:,GIS爱好者。
分享本文,请您带上本文链接

发表评论