地图标注

摘要:
要注释的图层<备注&lt//只能使用GeoFeatureLayer来操作注释pGeoFeatureLayer=pGeoFeatureLyr//定义标注集对象集pAnnoProperties=pGeoFeatureLyr。注释属性;pAnnoProps.Clear();

地图标注:是表示制图对象的名称或数量及质量特征的文字和数字等文字语言。来说明制图对象的名称、种类、性质、和数量等具体特征。

  ArcEngine中注记分为两种:标注(Label)、注记(Annotation)。Annotation以更复杂的方法和属性对要素图层进行标注,这个过程可以是自动的,不需用户干预,而且注记内容可以保存到地图数据库中。

  AnnotationLayerPropertiesCollection对象是一个要素图层的属性,是一个标注集对象的集合。标注集是与某个要素图层相关联的,用于描述要素图层如何被标注,可以通过IGeoFeaturelayer中的AnnotationProperties属性获取。IAnnotationLayerPropertiesCollection接口提供了对保存在集合中的IAnnocationLayerProperties(LabelEngineLayerProperties、MaplexLabelEngineProperties)对象进行操作,通过该接口,开发者可以对集合中的组件进行添加、删除、排序和查询等操作。L        abelEngineLayerProperties对象维持着一个要素图层的注记实例。

  IAnnocationLayerProperties的WhereClause属性用于设置一个SQL语句,确定哪些要素可以被标注。

  AnnotationMaximunScale和AnnotationMinMunScale用于设置文字标注的最大和最小范围。

  LabelEngineLayerProperties对象也实现ILabelEngineLayerProperties接口,提供用于制作过程中的主要属性,设置文字符号、标注文字排放等,其中BasicOverposterLayerProperties用于设置标注文本如何被放置,以及处理文字之间的冲突。IBasicOverposterLayerProperties接口中的LineLabelPlacementPriorities用于设置标注文本的摆放路径的权重,LineLabelPosition用于设置标注文本的排放位置,PointPlacementPriorities用于设置一个与点相关的标注路径的权重等。

class MapMarker
    {
        private AxMapControl axMapControl;
        public MapMarker(AxMapControl _axMapControl)
        {
            axMapControl = _axMapControl;
        }
        /// <summary>
        /// 使用注记
        /// </summary>
        /// <param name="pGeoFeatureLyr">要注记的图层</param>
        /// <param name="AnnoField">注记内容</param>
        public void Annotation(IGeoFeatureLayer pGeoFeatureLyr, string AnnoField)
        {
            IGeoFeatureLayer pGeoFeatureLayer;//用 GeoFeatureLayer才能操作标注
            pGeoFeatureLayer = pGeoFeatureLyr;
            IAnnotateLayerPropertiesCollection pAnnoProps;//定义标注集对象的集合
            pAnnoProps = pGeoFeatureLyr.AnnotationProperties;
            pAnnoProps.Clear();//清除里面的集合,不知道是不是必须的
            IAnnotateLayerProperties pAnnoLayerPros;
            ILineLabelPosition pPosition;//控制Label相对位置
            ILineLabelPlacementPriorities pPlacement;//control placement position priorities for line labels
            IBasicOverposterLayerProperties pBasic;//Provides access to members that control the placement of labels relative to features using conflict detection
            ILabelEngineLayerProperties pLabelEngine;//可以控制标注的过程中的主要属性,设置文字符号,标注文字排放等

            ITextSymbol pTextSymbol;
            pTextSymbol = new TextSymbolClass();
            stdole.StdFont pFont;//定义字体吧,不知道
            pFont = new stdole.StdFontClass();
            pFont.Name = "Verdana";
            pFont.Size = 10;
            pTextSymbol.Font = pFont as stdole.IFontDisp ;
            pTextSymbol.Color = HsvColor(250,160,200);

            pPosition = new LineLabelPositionClass();
            pPosition.Parallel = false;//Label和线平行
            pPosition.Perpendicular = true;//Label和线垂直
            pPlacement = new LineLabelPlacementPrioritiesClass();
            pBasic = new BasicOverposterLayerPropertiesClass();
            pBasic.FeatureType = esriBasicOverposterFeatureType.esriOverposterPolyline;
            pBasic.LineLabelPlacementPriorities = pPlacement;
            pBasic.LineLabelPosition = pPosition;
            pLabelEngine = new LabelEngineLayerPropertiesClass();
            pLabelEngine.Symbol = pTextSymbol;
            pLabelEngine.BasicOverposterLayerProperties = pBasic;
            pLabelEngine.Expression = AnnoField;//注记的内容
            pAnnoLayerPros = pLabelEngine as IAnnotateLayerProperties;
            pAnnoProps.Add(pAnnoLayerPros);
            pGeoFeatureLayer.DisplayAnnotation = true;
            axMapControl .Refresh (esriViewDrawPhase .esriViewBackground ,null ,null );
        }
        private HsvColor HsvColor(int hue, int saturation, int val)
        {
            HsvColor hsvColor;
            hsvColor = new HsvColorClass();
            hsvColor.Hue = hue;
            hsvColor.Saturation = saturation;
            hsvColor.Value = val;
            return hsvColor;
        }
    }

免责声明:文章转载自《地图标注》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇使用正则表达式限制swing (JTextField等) 的输入net4.0 task 超时任务代码 用Thread.sleep方式实现下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

C++你不知道的那些事儿—C++语言的15个晦涩特性

这个列表收集了 C++ 语言的一些晦涩(Obscure)特性,是我经年累月研究这门语言的各个方面收集起来的。C++非常庞大,我总是能学到一些新知识。即使你对C++已了如指掌,也希望你能从列表中学到一些东西。下面列举的特性,根据晦涩程度由浅入深进行排序。 1. 方括号的真正含义 2. 最烦人的解析 3.替代运算标记符 4. 重定义关键字 5. Placem...

自动化运维工具puppet详解(一)

一、puppet 介绍   1、puppet是什么   puppet是一个IT基础设施自动化管理工具,它能够帮助系统管理员管理基础设施的整个生命周期: 供应(provisioning)、配置(configuration)、联动(orchestration)及报告(reporting)。  基于puppet ,可实现自动化重复任务、快速部署关键性应用以及在本...

PS绘制飘逸彩色丝带教程

  一、新建一个大小适当的图像,点击工具栏上的钢笔工具,使用形状图层来绘制出下图的形状。 二、把形状所在层的填充设为0%,填充设成0是不会影响到图层的,不像不透明度那样会影响图层样式的效果。 三、双击丝带所在图层,打开其图层样式,勾选内发光,把结构下的不透明度设为83%,杂色为0,颜色为深橙色;图素的阻塞为7%,大小为51像素。 大家想要绘制出不同...

QT显示如何减轻闪屏(双缓冲和NoErase)

很多同志在些QT 程序后会遇见闪屏的问题, 有时速度非常快,但毕竟影响了显示效果,如何做到减轻屏幕抖动或闪屏呢?我曾试过如下的办法:1.使用双缓冲。 比如我们在一个Widget里面绘多个图的话, 先创建一个QPixmap对象 然后用QPainter在这个QPixmap对象上绘图,最用后BitBlt 将数据copy到active painterDev上就可以...

C#基本面试题

重写和重载 重写: 要求:(三大同)参数相同,方法名相同,返回值相同 关键字:基类函数用virtual修饰,派生类用override修饰 注意:不能重写非虚方法或静态方法 重载: 要求:在同一作用域,可以存在相同的函数名,不同参数列表的函数,这组函数称为重载函数 其他 WebAPI和MVC的区别 1、MVC主要用于建站,WebAPI主要用于构建http...

浅析vue数据绑定

前言:最近团队需要做一个分享,脚进脑子,不知如何分享。最后想着之前一直想研究一下 vue 源码,今天刚好 “借此机会” 研究一下。 网上研究vue数据绑定的文章已经非常多了,但是自己写一遍,敲一遍demo和看别人的文章是完全不同的,so……搬运工来了 目前数据绑定主要有以下三种实现方式: 1.   脏值检查(angular.js)    轮询检测数据变化...