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

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

ArcGIS Engine 10 开发手册(6-2)使用ArcGIS Engine进行关系操作
GIS 中的空间对象除了拥有属性数据之外,他们之间还拥有某种关系,比如说一个点在一个面的内部, 两个对象相交,相等,包含,相接等关系。

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

 

}

      结果和前面的一样

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