ArcEngine 根据要素选择集,创建新图层

转自根据要素选择集,创建新图层

IFeatureLayer featureLayer = new FeatureLayerClass();
featureLayer.FeatureClass = featureClass;
IFeatureSelection featureSelection = featureLayer as IFeatureSelection;
IQueryFilter queryFilter1 = new QueryFilterClass();
queryFilter1.WhereClause = "XZQDM like '" + xz_xzqdm + "%'";
featureSelection.SelectFeatures(queryFilter1, esriSelectionResultEnum.esriSelectionResultNew, false);

ISelectionSet selectionSet = featureSelection.SelectionSet;
IFeatureLayer newFeatureLayer = null;
if (selectionSet.Count > 0)
{
	IFeatureLayerDefinition featureLayerDefinition = featureLayer as IFeatureLayerDefinition;
	newFeatureLayer = featureLayerDefinition.CreateSelectionLayer(featureClass.AliasName, true, null, null);
}

思路:
使用了 IFeatureLayerDefinition 对象的 CreateSelectionLayer 方法
IFeatureLayerDefinition 是一个自定义要素层接口,需要首先将所要自定义的要素图层赋给它
其方法 CreateSelectionLayer() 用来以当前图层的选择集创建一个图层,是直接将数据赋给新图层,因此原图层上出现变化并不会反映到新建的图层上
同时 IFeatureLayerDefinitionDefinitionExpression 属性可以设置一个查询字符串,通过将查询字符串传递给__DefinitionExpression__ 属性可以将满足该字符串条件的要素显示出来。
例如 pFeatureLayerDefinition.DefinitionExpression = "name = ‘a’ " ; 将所有满足name属性值为a的要素显示出来,其余均被遮住。
在这里插入图片描述

  • 0
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
您可以使用ArcObjects中的IFeatureDataset和IFeatureClassDescription接口来创建要素数据要素类。下面是一个基本的代码示例: ``` // 获取工作空间 IWorkspaceFactory workspaceFactory = new FileGDBWorkspaceFactory(); IWorkspace workspace = workspaceFactory.OpenFromFile("C:\data.gdb", 0); // 获取要素描述 UID featureDatasetUID = new UIDClass(); featureDatasetUID.Value = "esriGeoDatabase.FeatureDataset"; IFeatureDatasetDescription featureDatasetDescription = new FeatureDatasetDescriptionClass(); IFeatureClassDescription featureClassDescription = new FeatureClassDescriptionClass(); IObjectClassDescription objectClassDescription = (IObjectClassDescription)featureClassDescription; // 创建要素 IFeatureDataset featureDataset = ((IFeatureWorkspace)workspace).CreateFeatureDataset("myFeatureDataset", featureDatasetDescription); // 创建要素类 UID featureClassUID = new UIDClass(); featureClassUID.Value = "esriGeoDatabase.FeatureClass"; IObjectClassDescription objectClassDescription = (IObjectClassDescription)featureClassDescription; IFields fields = objectClassDescription.RequiredFields; fields.AddField(CreateField("ID", esriFieldType.esriFieldTypeOID)); fields.AddField(CreateField("Name", esriFieldType.esriFieldTypeString)); IFeatureClass featureClass = featureDataset.CreateFeatureClass("myFeatureClass", fields, featureClassDescription.InstanceCLSID, featureClassDescription.ClassExtensionCLSID, esriFeatureType.esriFTSimple, "Shape", ""); // 创建图层 IMap map = new MapClass(); IFeatureLayer featureLayer = new FeatureLayerClass(); featureLayer.FeatureClass = featureClass; featureLayer.Name = "myFeatureLayer"; map.AddLayer(featureLayer); ``` 其中CreateField方法用于创建字段,示例代码如下: ``` private IField CreateField(string name, esriFieldType fieldType) { IField field = new FieldClass(); IFieldEdit fieldEdit = (IFieldEdit)field; fieldEdit.Name_2 = name; fieldEdit.Type_2 = fieldType; return field; } ```

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值