在ArcEngine下实现图层属性过滤的两种方法

本文介绍了如何通过属性过滤实现地图图层的选择性显示。提供了两种情况下的实现方法:图层已加载时直接设置过滤条件刷新视图;图层未加载时则通过查询定义和特征类的创建过程实现。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

有时候,我们要对图层上的地物进行有选择性的显示,以此来满足实际的功能要求。

按下面介绍的方法可轻松实现图层属性过滤显示:

 

         1、当图层已经加载时

 

        private void ShowByFilter(AxMapControl sMapCtr, IFeatureLayer sFlyr, string sFilter)

        {

            ESRI.ArcGIS.Carto.IFeatureLayerDefinition pDef = (ESRI.ArcGIS.Carto.IFeatureLayerDefinition)sFlyr;

 

            pDef.DefinitionExpression = sFilter;

 

            sMapCtr.ActiveView.Refresh();

        }

 

         2、当图层尚未加载时

        private IFeatureClass GetFeatureClass(IWorkspace pWS, string sTabName, string sAttrFilter)

        {

            try

            {

                if (pWS == null || sTabName == nullreturn null;

 

                IFeatureWorkspace pFWS = pWS as IFeatureWorkspace;

                IFeatureClass pFC = null;

 

                pFC = pFWS.OpenFeatureClass(sTabName);

 

                IQueryDef pQueryDef = pFWS.CreateQueryDef();

                pQueryDef.Tables = sTabName;

                pQueryDef.WhereClause = sAttrFilter;

 

                IQueryName2 pQueryName = new FeatureQueryNameClass();

                pQueryName.PrimaryKey = pFC.OIDFieldName;

                pQueryName.QueryDef = pQueryDef;

 

                IDataset pDS = (IDataset)pFWS;

 

                IWorkspaceName pWSName = (IWorkspaceName)pDS.FullName;

                IDatasetName pDSName = (IDatasetName)pQueryName;

 

                pDSName.WorkspaceName = pWSName;

                IName pName = (IName)pQueryName;

                pFC = pName.Open() as IFeatureClass;

 

                return pFC;

            }

            catch

            {

                return null;

            }

        }

                   由属性过滤后的FeatureClass创建图层、加载到地图的过程就比较简单了


出处:http://www.gisall.com/html/72/124272-2990.html 

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值