ArcEngine标注和注记

转自原文 ArcEngine标注和注记

标注和注记是ArcEngine中提供的两种使用文字信息标注地图要素的方式.其中标注是作为图层的属性存在的,可以动态创建,注记作为地理要素被存储.需要注意的是Shp文件不支持注记.  绘制标注的方式有两种.让我们先看第一种:

1.使用TextElment绘制标注.

这种方法的原理就是把属性表中的某个属性创建TextElment对象,然后使用IGraphicsContainer 的AddElement方法添加标注.实例代码:

        //使用TextElment绘制标注, fieldName为要绘制的属性        public static void AddLable(AxMapControl axMapControl, ILayer layer, string fieldName)        {            IRgbColor pColor = new RgbColorClass()            {                Red = 255,                Blue = 0,                Green = 0            };            IFontDisp pFont = new StdFont()            {                Name = "宋体",                Size = 5            } as IFontDisp;            
            ITextSymbol pTextSymbol = new TextSymbolClass()            {                Color = pColor,                Font = pFont,                Size = 11            };

            IGraphicsContainer pGraContainer = axMapControl.Map as IGraphicsContainer;

            //遍历要标注的要素            IFeatureLayer pFeaLayer = layer as IFeatureLayer;            IFeatureClass pFeaClass = pFeaLayer.FeatureClass;            IFeatureCursor pFeatCur = pFeaClass.Search(null, false);            IFeature pFeature = pFeatCur.NextFeature();            int index = pFeature.Fields.FindField(fieldName);//要标注的字段的索引            IEnvelope pEnv = null;            ITextElement pTextElment = null;            IElement pEle = null;            while (pFeature != null)            {                //使用地理对象的中心作为标注的位置                pEnv = pFeature.Extent;                IPoint pPoint = new PointClass();                pPoint.PutCoords(pEnv.XMin + pEnv.Width * 0.5, pEnv.YMin + pEnv.Height * 0.5);

                pTextElment = new TextElementClass()                {                    Symbol = pTextSymbol,                    ScaleText = true,                    Text = pFeature.get_Value(index).To\String()                };                pEle = pTextElment as IElement;                pEle.Geometry = pPoint;                //添加标注                pGraContainer.AddElement(pEle, 0);                pFeature = pFeatCur.NextFeature();            }            (axMapControl.Map as IActiveView).PartialRefresh(esriViewDrawPhase.esriViewGraphics, null, axMapControl.Extent);        }

     2.使用ArcEngine中的标注对象口.LabelEngineLayerProperties来标注要素

IGeoFeatureLayer中的AnnotationProperties是一个包含LabelEngineLayerProperties对象的标注集合.而 LabelEngineLayerProperties实现了:

     IAnnotateProperties,  //     IAnnotateLayerProperties, //可以控制标注的显示比例尺,过滤条件等     ILabelEngineLayerProperties,      IAnnotateLayerTransformationProperties //控制标注的参考比例尺,单位,标注边界和缩放比率等

等几个主要的接口.LabelEngineLayerProperties可以操作标注要素的多个属性和行为,如设置文本的标注位置,标注尺寸,设置脚本,文字符号等.该类实现了大量操作标注的属性和方法,对于复杂的标注非常有用,而TextElment适合简单的标注. ILabelEngineLayerProperties2是LabelEngineLayerPropertiesClass 的主接口.他的Expression和IsExpressionSimple用法如下:

IsExpressionSimple=true,Expression为简单表达式,其形式为: "["+属性字段名+"]"+其他,

IsExpressionSimple=true=false,Expression为复杂表达式,其内容也为一个字符串,但是一个完整的VBScript or JScript 函数或者表达式.

ExpressionParser属性是一个Expression解析器,它支持更复杂的JS和Vbs代码.

        //添加标注,比TextElment功能更强大        public static void AddAnnotate(ILayer layer,string fieldName)        {            IGeoFeatureLayer pGeoLayer = layer as IGeoFeatureLayer;            IAnnotateLayerPropertiesCollection IPALPColl = pGeoLayer.AnnotationProperties;            IPALPColl.Clear();

            IRgbColor pColor = GetColor(255, 0, 0, 255);            IFontDisp pFont = new StdFont()            {                Name = "宋体",                Bold = true            } as IFontDisp;

            ITextSymbol pTextSymbol = new TextSymbolClass()            {                Color = pColor,                Font = pFont,                Size = 12            };

            //用来控制标注和要素的相对位置关系            ILineLabelPosition pLineLpos = new LineLabelPositionClass()            {                Parallel = false,  //修改标注的属性                Perpendicular = true,                InLine = true            };            //用来控制标注冲突            ILineLabelPlacementPriorities pLinePlace = new LineLabelPlacementPrioritiesClass()            {                AboveStart = 5, //让above 和start的优先级为5                BelowAfter = 4            };            //用来实现对ILineLabelPosition 和 ILineLabelPlacementPriorities以及更高级属性的控制            IBasicOverposterLayerProperties pBOLP = new BasicOverposterLayerPropertiesClass()            {                FeatureType = esriBasicOverposterFeatureType.esriOverposterPolygon,                LineLabelPlacementPriorities = pLinePlace,                LineLabelPosition = pLineLpos            };

            //创建标注对象            ILabelEngineLayerProperties pLableEngine = new LabelEngineLayerPropertiesClass()            {                Symbol = pTextSymbol,                BasicOverposterLayerProperties = pBOLP,                IsExpressionSimple = true,                Expression = "["+fieldName+"]"            };

            //设置标注的参考比例尺            IAnnotateLayerTransformationProperties pAnnoLyrPros = pLableEngine as IAnnotateLayerTransformationProperties;            pAnnoLyrPros.ReferenceScale = 2500000;

            //设置标注可见的最大最小比例尺            IAnnotateLayerProperties pAnnoPros = pLableEngine as IAnnotateLayerProperties;            pAnnoPros.AnnotationMaximumScale = 2500000;            pAnnoPros.AnnotationMinimumScale = 25000000;            //pAnnoPros.WhereClause属性  设置过滤条件

            IPALPColl.Add(pAnnoPros);            pGeoLayer.DisplayAnnotation = true;        }

  

时间: 2024-10-06 17:08:21

ArcEngine标注和注记的相关文章

CAD2GIS:arcengine注记添加

在做CAD注记转GIS注记,坎坷,百度了几乎所有可能的资料. 主要参照这里的方法(c++).我使用C#重写了,均测试通过. http://www.cnblogs.com/junyuz/archive/2011/09/01/2162625.html 重要提示:        必须创建好注记图层,设置好比例尺和坐标系.困在这里两天没通过. 方法一 通过IFDOGraphicsLayer添加Elements的方式实现 /// <summary> /// 添加到注记图层 /// </summar

创建文本注记TextElement

1.创建一个字体 /// <summary> /// 字体设置 /// </summary> /// <param name="size">The size.</param> /// <param name="fontname">The fontname.</param> /// <returns> /// IFontDisp /// </returns> public 

ArcGIS连带文字注记导出为CAD格式

可以使用ArcGIS的"Export To CAD"工具将点.线.面等要素直接导出为CAD格式.如果要连带将ArcGIS中的文字标注导出为CAD格式要稍麻烦一点,下面是一个例子. 一.将SHP文件导入到GDB或者MDB数据库中(这里以MDB数据库为例): 新建MDB数据库: 将路网线状要素导入数据库 二.标注转注记 加载数据库中的数据并全屏显示 设置地图.显示单位为米,设置比例尺为当前比例尺 显示标记 标记转注记(这一步很关键) 这一步后就将文字注记单独作为一个要素图层添加到线状路网要

如何在ArcGIS中恢复注记文字

文字标注是地图上一种特殊的视觉元素,可通过文字表达图形符号难以说明的地图内容,它与图形符号结合在一起存在于地图上,是关乎地图构图美的关键因素之一. MapGIS软件下子图对象和注释对象统统保存在点文件中,Map2Shp软件针对两类对象具有区别转换能力,将除注释对象外的其他点状对象保存为同名Shape文件,该文件保持了MapGIS点文件中原始的属性信息,而将注释对象专门输出为单独Shape文件(默认情况下为源文件名+"A.shp"),其属性结构中存储了注释文字及其属性,如字体类型.大小.

WebGIS中自定义互联网地图局部注记的一种方案

1.    前言 实际项目中我们经常会遇到这样一种场景:地图底图可能是互联网地图(百度.高德.天地图)等等,同时我们自己又有某个区域单独的一套POI数据,我们需要将互联网地图中这个区域的原有POI数据进行遮罩然后只显示我们自己的POI数据. 针对这样的需求,我们首先想到的是能否我们只使用不包含注记的底图瓦片,然后再叠加上我们的POI数据.事实上,实际需求中还需要考虑一点,我们只有部分区域的POI数据,却没有其他区域的POI数据. 所以这个需求真正的核心是:除这个不规则多边形的指定区域外,地图均是

AE指定字段转成注记

转自原文 ae指定字段转成注记 ArcMap中有一个功能是Label Features,就是可以将图层内指定字段值显示以Label形式显示在主窗口上,在Label Features后,用右键点击图层,发现可以出现一个原来灰色的功能名,ConvertLabelsToAnnotation.这个功能在AE中提供,可是自己找不到设定字段值的位置,无可奈何,只有另辟蹊径. 就是先创建一个注记层,然后按照图层里指定字段的值来生成注记.就是一个一个Feature点转换.可能会比AE提供的接口效率低,没有办法,

C++的const关键词的一些注记

在c++中,const关键词出现在很多地方,有诸多的用途,也有很多的限制. 这里简单的列举一下const声明和定义的注意事项:(const对象定义时必须初始化,下面的例子只是说明一下const位置的含义) const出现在声明或者定义变量的类型的前面的时候,const修饰的是变量本身 如:const char *value; //指针a指向const char类型,是指指针所指的变量不能改变,而指针本身的值可以改变 其它情况的const修饰其左边的符号: char *const value;//

X3DOM 1.6.1 发布注记

X3DOM 1.6.1 主要包含了一些新的功能特性.bug修复,是1.6的维护性更新版本. 特性 ClipPlane 支持 实例 here 及文档 here TwoSidedMaterial 支持 实例 here 及文档 here SphereSensor 支持 文档 here 问题修复与改进增强 改进了GeoOrigin 的支持 TURNTABLE导航模式支持多点触摸 修复从Appearance移除的Shader特性 带雾(fog)应用移动到正确的位置 修复 ElevationGrid set

创建线注记LineElement

1.根据2点创建一条线 /// <summary> /// 创建线 /// </summary> /// <param name="pnt1">The PNT1.</param> /// <param name="pnt2">The PNT2.</param> public static void CreateLine( IPoint pnt1, IPoint pnt2) { IPolyline