ArcEngine 分类标注

arcgis中可以在同一个图层中定义不同的标注方式。

在ArcgisEngine中实现起来如下(以按OID为条件区分为例):

 /// <summary>
        /// 标注特定图层
        /// </summary>
        /// <param name="IN_Layer">要标注的图层</param>
        /// <param name="IN_AxmapControl">要标注的地图控件</param>
        public void PUB_ShowTargetFeature(ILayer IN_Layer,AxMapControl IN_AxmapControl)
        {
            //设定地图标注引擎
            IAnnotateMap Temp_AnnotateMap = new AnnotateMapClass();
            IN_AxmapControl.Map.AnnotationEngine = Temp_AnnotateMap;
            //获取GeoFeaturelayer
            IGeoFeatureLayer 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);
        }

下面是该函数的辅助函数:

        /// <summary>
        /// 设定标注
        /// </summary>
        /// <param name="IN_FeatureLayer">要设定标注的图层</param>
        /// <param name="IN_Symbol">标注表达式</param>
        /// <param name="IN_AxmapControl">显示控件</param>
        /// <param name="IN_ClassName">定义该种标注类型</param>
        /// <param name="IN_ClassQuery">该种筛选方式</param>
        /// <param name="IN_ClassExpression">标注表达式</param>
        /// <returns>标注参数</returns>
        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;
        }
        /// <summary>
        /// 设定标注符号
        /// </summary>
        /// <param name="IN_TextColor">字体颜色</param>
        /// <param name="IN_TextSize">字体大小</param>
        /// <param name="IN_FontName">字体名称</param>
        /// <returns></returns>
        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;
        }
时间: 2024-10-05 04:07:34

ArcEngine 分类标注的相关文章

ArcEngine 图层标注 (根据字段、角度)

转自chanyinhelv原文 ArcEngine 图层标注 (根据字段.角度) 今天做了一个用AE来控制图层是否显示标注,以及已哪一个字段作为标注的字段,以哪一个字段作为标注的角度,现将代码写下来,以备以后差用. public void EnableFeatureLayerLabel(IFeatureLayer pFeaturelayer, string sLableField, IRgbColor pRGB, int size, string angleField) { //判断图层是否为空

arcEngine添加标注(上)

arcEngine添加标注有3个技术点:1,获得图层的属性字段:2,初始化符号显示控件:3,添加标注. 获得图层的属性字段: //每个图层都是一个表的图形化显示,ILayer跟ITale可以互相转换 ITable pTable = pLayer as ITable; IField pField = null; for (int i = 0; i < pTable.Fields.FieldCount; i++) { pField = pTable.Fields.get_Field(i); //下面

arcmap分类标注问题

在给图层标注的时候,经常出现冲突后有些标注出不来,需要将某些个别的点要素进行标注位置调整,如下图: 处理步骤如下, (1)打开Maplex标注引擎.从ToolBars中打开Labeling工具,勾选Use Maplex Label Enginge. (2)打开图层属性: (3)设定默认标注 (4)添加新标注css1,将“莱山区”放到点要素符号的正下方. (5)按照上述步骤,添加css2标注样式,可以把“福山区”.“罘山区”标注到点要素的正上方.

ArcGIS中标注(label)的使用技巧

标注是显示在地图上的文字信息,它是出图中不可或缺的重要元素.标注的样式丰富,并且放置位置灵活,因此带来了对标注控制的难度.例如地质图里的上下标,或是一些分式的标注,就必须使用代码编程来实现.这篇文章就主要结合几个实例来讨论一下标注的使用技巧,以及在ArcGIS软件中的实现. 一.上下标 在地质图中经常会使用到上下标的文字,在ArcGIS帮助中可以查看到上下标的写法如下所示: 上标:"" & [上标字段] & "" 下标:"" &a

标注案例分享:道路病害图片数据标注项目丨曼孚科技

无论是水泥路面还是沥青路面,在通车使用一段时间之后,都会出现各种损坏.变形及其它缺陷,这些统称为道路病害. 常见的病害类型有:龟裂.坑槽.车辙.松散.沉陷.桥头涵顶跳车.表面破损等等,这些道路病害的存在不仅会影响到道路的正常使用,还会增加潜在的交通隐患,影响行车安全. 因此,及时发现并处理道路病害是一件非常现实的需求.以往,发现道路病害主要依赖于人力巡检,随着人工智能计算机视觉技术的发展,目前已经实现通过机器自动检测识别各种道路病害. 不过机器本身是并不具备识别各种道路病害的能力,前期机器学习依

c# 进行AE开发时,如何在地图上定位出一个点

参考文章 1. GIS二次开发(C#+AE) 2. ArcEnbine开发之添加标 3. GIS(一)——在js版搜索地图上添加Marker标记 GIS ArcEngine字段标注显示代码 & 可以同时显示多个标注 离线GoogleMapAPIV3加载本地谷歌地图并添加标注 ArcGIS_Engine+C#实例开发教程+添加标注 GIS的学习(二十一)在osmdroid 地图中添加marker 并添加事件 arcEngine添加气泡提示框(标注,文本) arcEngine经典代码-添加气泡提示框

机器学习:逻辑回归

************************************** 注:本系列博客是博主学习Stanford大学 Andrew Ng 教授的<机器学习>课程笔记.博主深感学过课程后,不进行总结很容易遗忘,根据课程加上自己对不明白问题的补充遂有此系列博客.本系列博客包括线性回归.逻辑回归.神经网络.机器学习的应用和系统设计.支持向量机.聚类.将维.异常检测.推荐系统及大规模机器学习等内容. ************************************** 逻辑回归 分类(C

libSVM 参数选择

libSVM 参数选择 [预测标签,准确率,决策值]=svmpredict(测试标签,测试数据,训练的模型); 原文参考:http://blog.csdn.net/carson2005/article/details/6539192 关于SVM参数c&g选取的总结帖[matlab-libsvm]:http://www.ilovematlab.cn/thread-47819-1-1.html  原文见下方 需要提醒的是,libSVM支持多类分类问题,当有k个待分类问题时,libSVM构建k*(k-

CALTECH 101(加利福尼亚理工学院101类图像数据库)

Caltech 101(加利福尼亚理工学院101类图像数据库) 数据摘要: Pictures of objects belonging to 101 categories. About 40 to 800 images per category. Most categories have about 50 images. Collected in September 2003 by Fei-Fei Li, Marco Andreetto, and Marc 'Aurelio Ranzato. T