麻辣GIS微信平台

更多 GIS 干货

微信关注不错过

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

相关阅读

麻辣GIS-Sailor

作者:

GIS爱好者,学GIS,更爱玩GIS。

声明

1.本文所分享的所有需要用户下载使用的内容(包括但不限于软件、数据、图片)来自于网络或者麻辣GIS粉丝自行分享,版权归该下载资源的合法拥有者所有,如有侵权请第一时间联系本站删除。

2.下载内容仅限个人学习使用,请切勿用作商用等其他用途,否则后果自负。

手机阅读
公众号关注
知识星球
手机阅读
麻辣GIS微信公众号关注
最新GIS干货
关注麻辣GIS知识星球
私享圈子

留言板(小编看到第一时间回复)