zoukankan      html  css  js  c++  java
  • AE控制图层中要素可见状态的几种方法

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

     

    工作中常有这样的需求,一个作业图层由几个作业员来操作,我们要 控制每一个作业员只能看到他负责的区域。作业员的可见区域控制有时候是按空间区域划分,有时候是按照作业属性划分,有时候是属性和区域结合来划分,在程序中应该如何控制呢?本人总结了如下几种可用的方法,不知大家是否有更好的解决方案。

    Ø   唯一值符号法

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

    Ø   IFeatureLayerDefinition

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

     

    方法一:

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

    ILayer pLayer = axMapControl1 .get_Layer (0);

    IFeatureLayerDefinition pFlDefinition = pLayer as IFeatureLayerDefinition ;

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

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

     

    方法二:

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

     

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

    Ø   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 中,只能在程序运行时动态进行控制。

     

     

  • 相关阅读:
    多个表单如何同时验证
    vue+element 动态表单验证
    ‘Maximum call stack size exceeded’错误的解决方法
    select下拉框option的样式修改
    vue项目打包之后样式错乱问题,如何处理
    11_我拥有了属于自己的公众号了
    10_更改自己的ID
    001_Spring之xml的class的补全(eclipse)
    01_Navicat的快捷键学习
    web开发资源网站汇总
  • 原文地址:https://www.cnblogs.com/arxive/p/6262390.html
Copyright © 2011-2022 走看看