AE建立查询图层

来源:互联网 发布:查看系统端口占用 编辑:程序博客网 时间:2024/05/15 00:19
在建立地理信息系统时,很多时候需要只显示指定范围的要素。例如只显示指定的行政区或分幅图的数据,其它的不显示。借助IFeatureLayerDefinition接口有两种方式建立查询图层可以实现这类需求。

1、通过属性建立查询图层

if (filterSQL.Length == 0) return false;
IFeatureLayer pFeatureLayer = null;
IFeatureClass pFeatureClass = pWorkspace.OpenFeatureClass(layerName);
if (pFeatureClass == null) return false ;
if (pFeatureClass.FeatureType =esriFeatureType.esriFTAnnotation )
{
pFeatureLayer = new FDOGraphicsLayerClass();
}
else
{
pFeatureLayer = new FeatureLayerClass();
}
pFeatureLayer.FeatureClass = pFeatureClass;
pFeatureLayer.Name = layerName;
IFeatureLayerDefinition pFeatureLayerDef = pFeatureLayer as IFeatureLayerDefinition;
pFeatureLayerDef.DefinitionExpression = filterSQL;//只需要设置Where查询条件就可以只显示查询到的要素
_map.AddLayer((ILayer)pFeatureLayer);
return true ;

有时候跨图层查询并没有关联字段,而是通过图层间拓扑关系显示要素集,则需要以下方式。

2、通过范围建立查询图层

IFeatureLayer pFeatureLayer = null;
IFeatureClass pFeatureClass = pWorkspace.OpenFeatureClass(layerName);
if (pFeatureClass == null) return false;

if (pFeatureClass.FeatureType =esriFeatureType.esriFTAnnotation )
{

//初始化标注图层
pFeatureLayer = new FDOGraphicsLayerClass();
}
else
{
pFeatureLayer = new FeatureLayerClass();
}

pFeatureLayer.FeatureClass = pFeatureClass;
pFeatureLayer.Name = layerName;

IFeatureSelection featSelection = pFeatureLayer as IFeatureSelection;
ISpatialFilter sfilter = new SpatialFilter();
sfilter.Geometry = boundary;// boundary为显示要素的范围
sfilter.SearchOrder = esriSearchOrder.esriSearchOrderSpatial;
sfilter.SpatialRel = esriSpatialRelEnum.esriSpatialRelIntersects;//相交的要素显示
featSelection.SelectFeatures(sfilter,esriSelectionResultEnum.esriSelectionResultNew, false);

IFeatureLayerDefinition pFeatureLayerDef = pFeatureLayer as IFeatureLayerDefinition;
IFeatureLayer newLayer= pFeatureLayerDef .CreateSelectionLayer (_layerName ,true,"","");//一定要选true,用选择集创建新图层

featSelection.Clear();

//设置图层的Render或其属性

....

//
_map.AddLayer((ILayer)newLayer);

return true;

建立查询图层后,如果不仅是查看图层还要在图层上编辑修改和删除要素,会实时显示在图面上,但是新增要素,则不能反映在查询图层上,因为查询图层只是原图层的视图,需要

ISelectionSet selection= pFeatureLayerDef.DefinitionSelectionSet;

selection.Add(pFeature.OID);

加入到选择集中才会显示。

原创粉丝点击