AE建立查询图层

在建立地理信息系统时,很多时候需要只显示指定范围的要素。例如只显示指定的行政区或分幅图的数据,其它的不显示。借助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);

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

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值