要素类的数据经常需要显示给最终用户。这时候,我们通常需要添加ArcGIS Engine中的一个名为MapControl控件。假设我们有了实例名称为theMapControl的MapControl控件,那么我们可以利用他的addLayer方法来添加图层。注意,几乎每一个地图都是按照图层来组织的,图形的存储就好像是一个堆栈结构,也就是说你最后添加的图层,他的图层编号是0,这个的确有些怪异。实际上,您有两种方式使用addLayer,他们分别是:
方法一:IMap接口的addLayer方法:
public void AddLayer (
ILayer Layer
);
方法二:IMapControl2的addLayer方法:
public void AddLayer (
ILayer Layer,
int toIndex
);
注意,方法一添加的图层,其图层序号自动为0,而方法二可以直接指定图层的序号。
以下是一段添加注记图层的示例代码:
FDOGraphicsLayer txtLayer = null;
txtLayer = new FDOGraphicsLayerClass();
IFeatureLayer pFeatureLayer = txtLayer as IFeatureLayer;
pFeatureLayer.FeatureClass = pFeatureWorkspace.OpenFeatureClass("TEST_ANNOTATION_FEATURE_CLASS_NAME");
pFeatureLayer.Name = "图层名称";
//指定过滤条件 一般不需要过滤
IFeatureLayerDefinition pFeatureLayerDef = pFeatureLayer as IFeatureLayerDefinition;
pFeatureLayerDef.DefinitionExpression = "MAPID='ID1'";
theMapControl.Map.AddLayer(pFeatureLayer);
以下是一段添加线状要素类图层的示例代码:
FeatureLayerClass fl = new FeatureLayerClass();
fl.FeatureClass = pFeatureWorkspace.OpenFeatureClass("TEST_POLYLINE_FEATURE_CLASS_NAME");
//指定过滤条件 一般不需要过滤
IFeatureLayerDefinition fd = fl as IFeatureLayerDefinition;
fd.DefinitionExpression = "DTID='ID1'";
fl.Name = "图层名称";
theMapControl.Map.AddLayer(fl);
但是,即使添加图层成功,也不一定在MapControl能够看到要素。如果是注记(Annotation)图层,那么应该能够看到一些文字。但是如果是点、线、面等图层,即使加入到MapControl也可能什么也看不到。这涉及到两个问题,一个问题是要素位置可能不在当前的可视区域内,另外一个问题是没有指定图层的渲染机制。第一个问题可以通过设置MapControl的适当的Extent属性来让要素显示在当前可见区域内,第二个问题则需要另外一节内容来讲述。