有时候,我们要对图层上的地物进行有选择性的显示,以此来满足实际的功能要求。
按下面介绍的方法可轻松实现图层属性过滤显示:
1、当图层已经加载时
privatevoid ShowByFilter(AxMapControl sMapCtr, IFeatureLayer sFlyr, stringsFilter)
{
ESRI.ArcGIS.Carto.IFeatureLayerDefinition pDef = (ESRI.ArcGIS.Carto.IFeatureLayerDefinition)sFlyr;
pDef.DefinitionExpression = sFilter;
sMapCtr.ActiveView.Refresh();
}
2、当图层尚未加载时
privateIFeatureClassGetFeatureClass(IWorkspace pWS, stringsTabName, string sAttrFilter)
{
try
{
if(pWS == null || sTabName == null) returnnull;
IFeatureWorkspace pFWS = pWS asIFeatureWorkspace;
IFeatureClass pFC = null;
pFC =pFWS.OpenFeatureClass(sTabName);
IQueryDefpQueryDef = pFWS.CreateQueryDef();
pQueryDef.Tables = sTabName;
pQueryDef.WhereClause =sAttrFilter;
IQueryName2pQueryName = newFeatureQueryNameClass();
pQueryName.PrimaryKey =pFC.OIDFieldName;
pQueryName.QueryDef =pQueryDef;
IDatasetpDS = (IDataset)pFWS;
IWorkspaceName pWSName = (IWorkspaceName)pDS.FullName;
IDatasetName pDSName = (IDatasetName)pQueryName;
pDSName.WorkspaceName =pWSName;
INamepName = (IName)pQueryName;
pFC = pName.Open() asIFeatureClass;
returnpFC;
}
catch
{
returnnull;
}
}
由属性过滤后的FeatureClass创建图层、加载到地图的过程就比较简单了