ArcGIS Engine 10 开发手册(6-2)使用ArcGIS Engine进行关系操作

本文目录
  • 正文

GIS 中的空间对象除了拥有属性数据之外,他们之间还拥有某种关系,比如说一个点在一个面的内部, 两个对象相交,相等,包含,相接等关系。关系运算符(Relational Operators)比较两个几何体,并返回 一个 boolean 来说明所要的关系是否存在,这些关系都是通过 IRelationalOperator 接口实现的。 IRelationalOperatior 接口的方法如下:

IRelationalOperator 接口被面,线等几何要素实现,IRelationalOperator 接口中的方法的参数也非 常类似,参数往往是一个几何对象,以 IRelationalOperator.Contains 方法为例说明:

示例利用IRelationalOperator实现空间包含统计

IFeatureClass pPolygonFClass = GetFeatureClass (@"D:\空间查询\分析用的空间数据","三级成矿区带");

IFeatureClass pPointFClass = GetFeatureClass (@"D:\空间查询\分析用的空间 数据","探矿权点");

ITable pTable = CreateTable (@"D:\空间查询\分析用的空间数据", "Res3");

IFeatureCursor pPolyCursor = pPolygonFClass.Search (null, false);
IFeature pPolyFeature = pPolyCursor.NextFeature ();

while (pPolyFeature != null)

{

  IGeometry pPolGeo = pPolyFeature.Shape;
  IRelationalOperator pRel = pPolGeo as IRelationalOperator;
  int Count = 0;

  IFeatureCursor pPointCur = pPointFClass.Search (null, false);
  IFeature pPointFeature = pPointCur.NextFeature ();

  while (pPointFeature != null)

  {

    IGeometry pPointGeo = pPointFeature.Shape;

    if (pRel.Contains (pPointGeo))

    {

      Count++;

    }

    pPointFeature = pPointCur.NextFeature ();

  }

  if (Count != 0)

  {

    IRow pRow = pTable.CreateRow ();
    pRow.set_Value (1, pPolyFeature.get_Value (0));
    pRow.set_Value (2, Count);

    pRow.Store ();

  }

  pPolyFeature = pPolyCursor.NextFeature ();

}

结果和前面的一样

ArcGIS Engine 10 开发手册全集

ArcGIS Engine 10 开发手册全集: ArcGIS Engine 10 开发手册

如果本文对你有所帮助,欢迎对我们团队进行打赏捐助,让我们在传播3S的路上可以走得更远。
赞赏支持
微信捐助麻辣GIS 支付宝捐助麻辣GIS

麻辣GIS-Sailor
作者:
GIS爱好者,学GIS,更爱玩GIS。

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

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

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

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

发表评论