zoukankan      html  css  js  c++  java
  • ArcGIS AO中控制图层中要素可见状态的总结

     

    一、DefinitionExpression

    实现新建查询图层,查询结果要素为选中状态

    该接口可以通过两种方法来控制要素的可见状态。

    思路1

    通过该接口的 DefinitionExpression 方法,可以给图层设置一个查询条件,只有符合该查询条件的图层才会显示。例如:我们只想显示图层中 Name 属性为 ’ 北京 ’ 的要素,那么代码如下:

    ILayer pLayer = axMapControl1 .get_Layer (0);

    IFeatureLayerDefinition pFlDefinition = pLayer as IFeatureLayerDefinition ;

    pFlDefinition .DefinitionExpression = "Name = ' 北京'" ;

    该方适使用于按照作业属性控制要素的可见状态。

    思路2

    通过 CreateSelectionLayer 方法,可以将当前图层中选中的要素生成一个新的图层,生成的新图层中只有原图层的选中要素是可见的。这种方法可以用于控制只显示某一空间范围内的要素。其缺点就是如果我们对在该空间范围内增加了要素之后,新增加的要素是不显示的。

    该方适使用于按照作业空间范围控制要素的可见状态。


    案例

    新建IFeatureSelection接口,选中图层要素,利用IQueryFilter创建过滤器,设置查询条件,IFeatureLayerDefinition创建查询图层,最后添加到map中去
    引用

    using ESRI.ArcGIS.Carto; using ESRI.ArcGIS.Controls; using
    ESRI.ArcGIS.Geodatabase; using ESRI.ArcGIS.Geometry; using
    ESRI.ArcGIS.SystemUI; using System; using System.IO;
    usingSystem.Windows.Forms;

    主要实现代码:

    ILayer pLayer = (ILayer)axMapControl1.Map.get_Layer(0);
    IFeatureLayer pFeatureLayer = pLayer as IFeatureLayer;
    //QI到FeatureSelection
    IFeatureSelection pFeatureSelection = pFeatureLayer as IFeatureSelection;
    //创建过滤器
    IQueryFilter pQueryFilter = new QueryFilterClass();
    //设置过滤器对象的查询条件
    pQueryFilter.WhereClause = "FID > 20";
    //根据查询条件选择要素
    pFeatureSelection.SelectFeatures(pQueryFilter, esriSelectionResultEnum.esriSelectionResultNew, false);
    IFeatureLayerDefinition pFDefinition = pFeatureLayer as IFeatureLayerDefinition;
    //创建新图层
    IFeatureLayer pNewFeatureLayer = pFDefinition.CreateSelectionLayer(pFeatureLayer.Name, false, null, null);//若为true,则未选中要素不显示
    pNewFeatureLayer.Name = "查询结果城市";
    axMapControl1.AddLayer(pNewFeatureLayer as ILayer);
    axMapControl1.ActiveView.Refresh();         

    二、IGeoFeatureLayer

    通过 IGeoFeatureLayer 接口的 ExclusionSet 可以排除图层中的一些要素不可见。 ExclusionSet 属性通过 IFeatureIDSet 接口来控制要排除显示的要素,例如我们要控制 FID 为 2 、 5 、 8 的要素不显示。可以用如下代码实现:

    ILayer pLayer = axMapControl1 .get_Layer (0);
    IGeoFeatureLayer pGeoFl = pLayer as IGeoFeatureLayer ;
    IFeatureIDSet pIdSet = new FeatureIDSetClass ();
    pIdSet .Add (2);
    pIdSet .Add (5);
    pIdSet .Add (8);
    pGeoFl .ExclusionSet = pIdSet ;

    该方法较为灵活,可以用于精确控制可见要素,缺点是无法保存到MXD 中,只能在程序运行时动态进行控制。

    三、 唯一值符号法

    该方法比较简单,就是通过给图层设置一个唯一值符号渲染,把不想显示的要素符号设置为空。虽然简单,这种方法有这很大的局限性,如果我们要控制某一个区域的要素可见状态,该方法无法实现。该方法只适用于按照作业属性控制要素的可见状态。

    参考

    IFeatureLayerDefinition接口查询要素图层方法汇总

    AE控制图层中要素可见状态的几种方法

  • 相关阅读:
    Putty远程登录VMware虚拟机Linux(Ubuntu12.04)
    boost库在工作(39)网络UDP异步服务端之九
    UVA 1401 Remember the Word
    Windbg调试命令详解(1)
    数学之路(3)-机器学习(3)-机器学习算法-余弦相似度(1)
    2012-2013年度总结
    重建二叉树---根据前序和中序遍历结果重建二叉树
    Windbg调试命令详解(2)
    时间操作(JavaScript版)—最简单比較两个时间格式数据的大小
    WO+开放平台:API调用开发手记(话费计费接口2.0)
  • 原文地址:https://www.cnblogs.com/arxive/p/7569262.html
Copyright © 2011-2022 走看看