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

Ø DefinationExpression的语法

    pFlDefinition.DefinitionExpression = "XZQMC = '绥远镇' OR XZQMC = '刘和镇'";//并集

    pFlDefinition.DefinitionExpression = "XZQMC = ''";  //选择集为空

    pFlDefinition.DefinitionExpression = null; //显示全部

    pFlDefinition.DefinitionExpression = "XZQMC" <> '绥远镇' AND "XZQMC" <> '红河镇'"; //交集

 

转自:http://blog.csdn.net/qinyilang/article/details/6575539

您可以使用 ArcObjects 来获取图层要素的属性并更新属性表。下面是一些示例代码: 1. 获取要素属性: ```csharp // Open the feature class IFeatureClass featureClass = workspace.OpenFeatureClass("yourFeatureClassName"); // Create a query filter to select features IQueryFilter queryFilter = new QueryFilter(); queryFilter.WhereClause = "yourWhereClause"; // Use a cursor to retrieve the features IFeatureCursor featureCursor = featureClass.Search(queryFilter, false); // Loop through the features and retrieve the attribute values IFeature feature = featureCursor.NextFeature(); while (feature != null) { // Get the attribute values object attributeValue = feature.get_Value(feature.Fields.FindField("yourFieldName")); // Do something with the attribute value feature = featureCursor.NextFeature(); } // Clean up System.Runtime.InteropServices.Marshal.ReleaseComObject(featureCursor); ``` 2. 更新属性表: ```csharp // Open the feature class IFeatureClass featureClass = workspace.OpenFeatureClass("yourFeatureClassName"); // Create a query filter to select features IQueryFilter queryFilter = new QueryFilter(); queryFilter.WhereClause = "yourWhereClause"; // Use a cursor to retrieve the features IFeatureCursor featureCursor = featureClass.Update(queryFilter, false); // Loop through the features and update the attribute values IFeature feature = featureCursor.NextFeature(); while (feature != null) { // Set the new attribute value feature.set_Value(feature.Fields.FindField("yourFieldName"), "yourNewValue"); // Update the feature featureCursor.UpdateFeature(feature); feature = featureCursor.NextFeature(); } // Clean up System.Runtime.InteropServices.Marshal.ReleaseComObject(featureCursor); ``` 请注意,上述代码的“workspace”可以是您的工作空间,例如,一个文件地理数据库或一个SDE连接。此外,您需要替换“yourFeatureClassName”和“yourFieldName”为实际的要素类和字段名称。最后,您需要提供一个有效的“where”子句来选择要处理的要素
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值