ArcEngine 分类标注
arcgis中可以在同一个图层中定义不同的标注方式。
在ArcgisEngine中实现起来如下(以按OID为条件区分为例):
/// /// 标注特定图层/// /// 要标注的图层/// 要标注的地图控件public void PUB_ShowTargetFeature(ILayer IN_Layer,AxMapControl IN_AxmapControl){//设定地图标注引擎IAnnotateMap Temp_AnnotateMap = new AnnotateMapClass();IN_AxmapControl.Map.AnnotationEngine = Temp_AnnotateMap;//获取GeoFeaturelayerIGeoFeatureLayer Temp_AnnotationLayer = IN_Layer as IGeoFeatureLayer;//标注集合IAnnotateLayerPropertiesCollection Temp_AllAnnoProps;Temp_AllAnnoProps = Temp_AnnotationLayer.AnnotationProperties;Temp_AllAnnoProps.Clear();//清理已有标注属性//定义两种标注类并添加IAnnotateLayerProperties Temp_Anno1 = PRV_SetProperties(Temp_AnnotationLayer, PRV_SetSymbol(null, 8, "Arial"), IN_AxmapControl, "DefaultClass", " OBJECTID >100 ", "[Shape_Length] & vbnewline &\"———\" &vbnewline& [Shape_Area]");Temp_AllAnnoProps.Add(Temp_Anno1);IAnnotateLayerProperties Temp_Anno2 = PRV_SetProperties(Temp_AnnotationLayer, PRV_SetSymbol(null, 8, "Arial"), IN_AxmapControl, "Class1", " OBJECTID < 100 ", "[OBJECTID]");Temp_AllAnnoProps.Add(Temp_Anno2);}
下面是该函数的辅助函数:
/// /// 设定标注/// /// 要设定标注的图层/// 标注表达式/// 显示控件/// 定义该种标注类型/// 该种筛选方式/// 标注表达式/// 标注参数 private IAnnotateLayerProperties PRV_SetProperties(IFeatureLayer IN_FeatureLayer, ITextSymbol IN_Symbol, AxMapControl IN_AxmapControl, string IN_ClassName, string IN_ClassQuery, string IN_ClassExpression){//标注表达式ILabelEngineLayerProperties Temp_LabelEngine2 = new LabelEngineLayerPropertiesClass();Temp_LabelEngine2.Expression = IN_ClassExpression;//文字符号设定Temp_LabelEngine2.Symbol = IN_Symbol;//用来控制标注和要素的相对位置关系ILineLabelPosition Temp_LineLpos = new LineLabelPositionClass();Temp_LineLpos.Parallel = false;//修改标注的属性Temp_LineLpos.Perpendicular = false;Temp_LineLpos.InLine = true;Temp_LineLpos.Above = false;//用优先级来控制标注冲突ILineLabelPlacementPriorities Temp_LinePlace = new LineLabelPlacementPrioritiesClass();Temp_LinePlace.AboveStart = 1;Temp_LinePlace.BelowAfter = 1;//用来实现对ILineLabelPosition 和 ILineLabelPlacementPriorities以及更高级属性的控制IBasicOverposterLayerProperties Temp_BasicOverPoster = new BasicOverposterLayerPropertiesClass();Temp_BasicOverPoster.FeatureType = esriBasicOverposterFeatureType.esriOverposterPolygon;Temp_BasicOverPoster.LineLabelPlacementPriorities = Temp_LinePlace;Temp_BasicOverPoster.LineLabelPosition = Temp_LineLpos;Temp_LabelEngine2.BasicOverposterLayerProperties = Temp_BasicOverPoster;//设定标注IMapOverposter Temp_MapPos = IN_AxmapControl.Map as IMapOverposter;IOverposterProperties Temp_OverPoster = Temp_MapPos.OverposterProperties;IAnnotateLayerProperties Temp_AnnoPClass = Temp_LabelEngine2 as IAnnotateLayerProperties;//设定名称与筛选方式Temp_AnnoPClass.Class = IN_ClassName;Temp_AnnoPClass.WhereClause = IN_ClassQuery;(IN_FeatureLayer as IGeoFeatureLayer).DisplayAnnotation = true;return Temp_AnnoPClass;}/// /// 设定标注符号/// /// 字体颜色/// 字体大小/// 字体名称/// private ITextSymbol PRV_SetSymbol(IRgbColor IN_TextColor,int IN_TextSize,string IN_FontName){ITextSymbol Temp_TextSymbol = new TextSymbolClass(); ;//文字颜色if (IN_TextColor == null){IN_TextColor = new RgbColorClass();IN_TextColor.Red = 0;IN_TextColor.Green = 0;IN_TextColor.Blue = 0;Temp_TextSymbol.Color = (IColor)IN_TextColor;}//文字字体与字号Temp_TextSymbol.Size = IN_TextSize;stdole.IFontDisp Temp_Font = new stdole.StdFontClass() as stdole.IFontDisp;Temp_Font.Name = IN_FontName;Temp_TextSymbol.Font = Temp_Font;return Temp_TextSymbol;}
本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!
