地图标注

简介:

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

  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;
        }
        /// 
        /// 使用注记
        /// 
        /// 
要注记的图层 /// 注记内容 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; } }
复制代码

 

示例代码

示例1

Maplex类型标注是AE标注的其中一种方式,现提供一简单使用例子 . 转自:LINK

复制代码
        /// 
        /// MaplexEngine标注
        /// 
        /// 
标注图层 /// 地球人都知 /// 标记字段 public void Annotation(IGeoFeatureLayer pGeoFeatLyr, IMap pMap, string annoField) { // 如果Map没有用Maplex引擎,要先设置Map使用这个引擎 // IAnnotateMap pAnnotateMap; // pAnnotateMap = new MaplexAnnotateMapClass(); // pMap.AnnotationEngine = pAnnotateMap; IAnnotateMap pAnnoMap; pAnnoMap = new MaplexAnnotateMapClass(); pMap.AnnotationEngine = pAnnoMap; IGeoFeatureLayer pGeoFeatLayer; pGeoFeatLayer = pGeoFeatLyr; IAnnotateLayerPropertiesCollection pAnnoProps; pAnnoProps = pGeoFeatLyr.AnnotationProperties; pAnnoProps.Clear(); ILabelEngineLayerProperties2 pLabelEngine2 = new MaplexLabelEngineLayerPropertiesClass(); pLabelEngine2.Expression = " [ " + annoField + " ] " ; IMaplexOverposterLayerProperties pMaplexPro = new MaplexOverposterLayerPropertiesClass(); pMaplexPro.FeatureType = esriBasicOverposterFeatureType.esriOverposterPolygon; pMaplexPro.PolygonPlacementMethod = esriMaplexPolygonPlacementMethod.esriMaplexHorizontalInPolygon; pMaplexPro.CanPlaceLabelOutsidePolygon = false ; pMaplexPro.CanRemoveOverlappingLabel = false ; pMaplexPro.RepeatLabel = false ; pLabelEngine2.OverposterLayerProperties = pMaplexPro as IOverposterLayerProperties; IMapOverposter pMapPos = axMapControl1.Map as IMapOverposter; IOverposterProperties pOP = pMapPos.OverposterProperties; IMaplexOverposterProperties pMaplexOP = pOP as IMaplexOverposterProperties; pMaplexOP.LabelLargestPolygon = false ; pAnnoProps.Add(pLabelEngine2 as IAnnotateLayerProperties); pGeoFeatLyr.DisplayAnnotation = true ; }
复制代码

 

 LINK

复制代码
        public void EnableFeatureLayerLabel(IFeatureLayer pFeaturelayer, string sLableField, IRgbColor pRGB, int size, string angleField)
        {
            //判断图层是否为空
            if (pFeaturelayer == null)
                return;
            IGeoFeatureLayer pGeoFeaturelayer = (IGeoFeatureLayer)pFeaturelayer;
            IAnnotateLayerPropertiesCollection pAnnoLayerPropsCollection;
            pAnnoLayerPropsCollection = pGeoFeaturelayer.AnnotationProperties;
            pAnnoLayerPropsCollection.Clear();

            //stdole.IFontDisp  pFont; //字体
            ITextSymbol pTextSymbol;

            //pFont.Name = "新宋体";
            //pFont.Size = 9;
            //未指定字体颜色则默认为黑色
            if (pRGB == null)
            {
                pRGB = new RgbColorClass();
                pRGB.Red = 0;
                pRGB.Green = 0;
                pRGB.Blue = 0;
            }

            pTextSymbol = new TextSymbolClass();
            pTextSymbol.Color = (IColor)pRGB;
            pTextSymbol.Size = size; //标注大小

            IBasicOverposterLayerProperties4 pBasicOverposterlayerProps4 = new BasicOverposterLayerPropertiesClass();
            switch (pFeaturelayer.FeatureClass.ShapeType)//判断图层类型
            {
                case ESRI.ArcGIS.Geometry.esriGeometryType.esriGeometryPolygon:
                    pBasicOverposterlayerProps4.FeatureType = esriBasicOverposterFeatureType.esriOverposterPolygon;
                    break;
                case ESRI.ArcGIS.Geometry.esriGeometryType.esriGeometryPoint:
                    pBasicOverposterlayerProps4.FeatureType = esriBasicOverposterFeatureType.esriOverposterPoint;
                    break;
                case ESRI.ArcGIS.Geometry.esriGeometryType.esriGeometryPolyline:
                    pBasicOverposterlayerProps4.FeatureType = esriBasicOverposterFeatureType.esriOverposterPolyline;
                    break;
            } 
            pBasicOverposterlayerProps4.PointPlacementMethod = esriOverposterPointPlacementMethod.esriRotationField;
            pBasicOverposterlayerProps4.RotationField = angleField;

            ILabelEngineLayerProperties pLabelEnginelayerProps = new LabelEngineLayerPropertiesClass(); 
            pLabelEnginelayerProps.Expression = "[" + sLableField + "]";
            pLabelEnginelayerProps.Symbol = pTextSymbol;
            pLabelEnginelayerProps.BasicOverposterLayerProperties = pBasicOverposterlayerProps4 as IBasicOverposterLayerProperties;
            pAnnoLayerPropsCollection.Add((IAnnotateLayerProperties)pLabelEnginelayerProps);
            pGeoFeaturelayer.DisplayAnnotation = true;//很重要,必须设置 
            //axMapControl1.ActiveView.PartialRefresh(esriViewDrawPhase.esriViewBackground, null, null); }
        }
复制代码

 

 

 

 

 

 

参考文章

ArcGIS Engine标注(Label)

 

没有整理与归纳的知识,一文不值!高度概括与梳理的知识,才是自己真正的知识与技能。 永远不要让自己的自由、好奇、充满创造力的想法被现实的框架所束缚,让创造力自由成长吧! 多花时间,关心他(她)人,正如别人所关心你的。理想的腾飞与实现,没有别人的支持与帮助,是万万不能的。




    本文转自wenglabs博客园博客,原文链接:http://www.cnblogs.com/arxive/p/5903623.html ,如需转载请自行联系原作者
相关文章
|
前端开发 搜索推荐 定位技术
GIS前端—地图标注
GIS前端—地图标注
453 1
|
NoSQL 网络协议 Linux
OpenOCD(二):Jim-Tcl&运行&OpenOCD项目设置
OpenOCD(二):Jim-Tcl&运行&OpenOCD项目设置
594 1
|
5月前
|
人工智能 JSON 开发工具
解决提示词痛点:用AI智能体自动检测矛盾、优化格式的完整方案
本文介绍了一种基于用户意图的提示词优化系统,利用多智能体架构实现自动化优化,提升少样本学习场景下的提示词质量与模型匹配度。系统通过专用智能体协同工作,识别并修复逻辑矛盾、格式不清及示例不一致等问题,结合Pydantic结构化数据模型与OpenAI评估框架,实现高效、可扩展的提示词优化流程。该方案显著减少了人工干预,增强了系统效率与输出一致性,适用于复杂研究任务与深度AI应用。
652 0
解决提示词痛点:用AI智能体自动检测矛盾、优化格式的完整方案
|
Java Python Windows
软件安装(四):Pycharm安装详细教程
本文提供了一个详细的PyCharm安装教程,包括下载、安装和使用步骤,特别强调了在Windows环境下安装时不要选择关联.py文件的选项,并说明了如何配置系统环境变量Path以及激活账号密码。
392 1
软件安装(四):Pycharm安装详细教程
|
监控 Linux 网络安全
Zabbix Agent使用介绍
Zabbix Agent使用介绍
580 10
|
数据采集 监控 安全
网络爬虫是什么,它有什么作用?
网络爬虫是自动化工具,用于从网站中提取信息,通过追踪超链接和分析网页内容,实现互联网数据的自动搜集与整理。其工作流程包括选择起始URL、下载网页、解析HTML、跟踪链接、提取和存储数据及定期更新。主要用途涵盖数据挖掘、内容聚合、搜索引擎索引、价格比较、网站监控、学术研究及安全合规性等方面。然而,使用时需注意隐私、版权等法律问题。使用动态IP可避免触发网站反爬机制,如选用优质海外代理IP服务提高效率。
|
关系型数据库 MySQL 数据库
精通MySQL:数据库管理、性能优化与最佳实践
h3> 一、引言 MySQL是一个功能强大的开源关系型数据库管理系统,广泛应用于各种Web应用、企业级应用和数据分析等领域
1516 0
|
安全 Go 开发者
掌握 Go 语言的依赖关系管理
【8月更文挑战第31天】
273 0
|
机器学习/深度学习 人工智能 监控
AI行为分析
**AI行为分析融合视觉技术,自动监测与理解人类及动物行为。在教育中,它监控课堂行为,提升教学质量;在安防领域,确保公共安全,预警异常事件;科研中,助力动物行为研究,推动神经科学探索。技术进步正拓宽其应用边界,强化安全管理与决策支持。**
626 6
|
网络协议 Shell Perl
根据web访问日志,封禁请求量异常的IP,如IP在半小时后恢复正常,则解除封禁
根据web访问日志,封禁请求量异常的IP,如IP在半小时后恢复正常,则解除封禁
266 1