地图标注

简介:

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

  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;
        }
    }
复制代码

 

示例代码

示例1

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

复制代码
        /// <summary>
        /// MaplexEngine标注
        /// </summary>
        /// <param name="pGeoFeatLyr">标注图层</param>
        /// <param name="pMap">地球人都知</param>
        /// <param name="annoField">标记字段</param>
         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;
        }
复制代码

 

示例2, 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 ,如需转载请自行联系原作者
相关文章
|
6月前
|
前端开发 搜索推荐 定位技术
GIS前端—地图标注
GIS前端—地图标注
137 1
|
定位技术 C# Windows
C#编程学习(05):使用webbroswer控件显示地图并标注点位坐标
C#编程学习(05):使用webbroswer控件显示地图并标注点位坐标
|
9月前
|
搜索推荐 数据可视化 JavaScript
数据可视化大屏百度地图绘制行政区域标注实战案例解析(个性化地图、标注、视频、控件、定位、检索)
数据可视化大屏百度地图绘制行政区域标注实战案例解析(个性化地图、标注、视频、控件、定位、检索)
133 1
|
9月前
|
JSON 定位技术 API
百度地图高级开发:获取某范围半径圆形区域检索覆盖物内的所有标注的解决方案(1)
百度地图高级开发:获取某范围半径圆形区域检索覆盖物内的所有标注的解决方案(1)
158 0
|
9月前
|
编解码
使用遮罩提取图像中感兴趣的区域
使用遮罩隔离感兴趣区域 (ROI) 来有效地处理被阻止的图像。 某些大图像源仅在图像的一小部分中具有有意义的数据。可以通过将处理限制为包含有意义数据的 ROI 来缩短总处理时间。使用掩码定义投资回报率。蒙版是一种逻辑图像,其中像素表示投资回报率。
81 1
|
前端开发 数据库 数据安全/隐私保护
全景图像展示标注网站项目
全景图像展示标注网站项目
88 0
全景图像展示标注网站项目
NKMapView 显示标注,并放大到标注位置
NKMapView 显示标注,并放大到标注位置
39 0
|
Web App开发 JavaScript 前端开发
51 地图标注接口(一)
1. 51map 标注接口   实现在地图上标注位置、采集位置信息等操作。说的普通点就是获得地图上某个地方的经纬度和放缩比例   使用这个接口需要引入两段js:         2. 51map 标注接口效果图      该图主要显示了标注获得经纬度的结果。
916 0

热门文章

最新文章