• ArcEngine设置有牵引线的标注


    来自:https://blog.csdn.net/u011609113/article/details/51372827/

    在ArcGIs中很容易就能设置带有牵引线的标注。

     
    在ArcEngine中实现方法也很简单。如下:
            /// <summary>
            /// 设置有引线的标注
            /// </summary>
            /// <param name="IN_FeatureLayer">要标注的图层</param>
            /// <param name="IN_Axmapcontrol">显示控件</param>
            private void PRV_SetLabelWithCallout(IFeatureLayer IN_FeatureLayer,AxMapControl IN_Axmapcontrol)
            {
                //设定地图标注引擎
                IAnnotateMap Temp_AnnotateMap = new AnnotateMapClass();
                IN_Axmapcontrol.Map.AnnotationEngine = Temp_AnnotateMap;
                //标注集合
                IGeoFeatureLayer Temp_AnnotationLayer = IN_FeatureLayer as IGeoFeatureLayer;
                IAnnotateLayerPropertiesCollection Temp_AllAnnoProps;
                Temp_AllAnnoProps = Temp_AnnotationLayer.AnnotationProperties;
                Temp_AllAnnoProps.Clear();//清理已有标注属性
                IAnnotateLayerProperties Temp_Anno = PRV_SetPropertiesWithCallout(IN_FeatureLayer, "[OBJECTID]", IN_Axmapcontrol);
                Temp_AllAnnoProps.Add(Temp_Anno);
                IN_Axmapcontrol.AddLayer(IN_FeatureLayer as ILayer);
            }
    用到的函数:
            /// <summary>
            /// 设有引线的标注参数
            /// </summary>
            /// <param name="IN_FeatureLayer">要标注的图层</param>
            /// <param name="IN_ClassExpression">标注表达式</param>
            /// <param name="IN_Axmapcontrol">显示控件</param>
            /// <returns>标注参数</returns>
            private IAnnotateLayerProperties PRV_SetPropertiesWithCallout(IFeatureLayer IN_FeatureLayer, string IN_ClassExpression,AxMapControl IN_Axmapcontrol)
            {
                //标注引擎
                ILabelEngineLayerProperties2 Temp_LabelEngine2 = new LabelEngineLayerPropertiesClass();
                IBasicOverposterLayerProperties4 Temp_BasicOverPoster = new BasicOverposterLayerPropertiesClass();
                //表达式
                Temp_LabelEngine2.Expression = IN_ClassExpression;
                //引线
                ILineCallout Temp_Callout = new LineCalloutClass();
                //引线样式
                Temp_Callout.Style = esriLineCalloutStyle.esriLCSMidpoint;
                Temp_Callout.LeaderTolerance = 1;
                //将外框都设为null,这样就只有引线了
                Temp_Callout.Border = null;
                Temp_Callout.AccentBar = null;
                Temp_Callout.Gap = 10;
                //引线类型,这里为点状线
                ISimpleLineSymbol Temp_LineSymbol = new SimpleLineSymbolClass();
                Temp_LineSymbol.Style = esriSimpleLineStyle.esriSLSDot;
                Temp_Callout.LeaderLine = Temp_LineSymbol;
                //文字符号设定
                IFormattedTextSymbol Temp_TextSymbol = new TextSymbolClass();
                //文字颜色
                IRgbColor Temp_RGB = new RgbColorClass();
                Temp_RGB.Red = 0;
                Temp_RGB.Green = 0;
                Temp_RGB.Blue = 0;
                //文字字体与字号
                Temp_TextSymbol = new TextSymbolClass();
                Temp_TextSymbol.Color = (IColor)Temp_RGB;
                Temp_TextSymbol.Size = 18;
                //需要引用stdole.dll
                stdole.IFontDisp Temp_Font = new stdole.StdFontClass() as stdole.IFontDisp;
                Temp_Font.Name = "Arial";
                Temp_TextSymbol.Background = Temp_Callout as ITextBackground;
                Temp_TextSymbol.Font = Temp_Font;
                Temp_LabelEngine2.Symbol = Temp_TextSymbol as ITextSymbol;
                //标注放置方式
                switch (IN_FeatureLayer.FeatureClass.ShapeType)//判断图层类型
                {
                    case ESRI.ArcGIS.Geometry.esriGeometryType.esriGeometryPolygon:
                        Temp_BasicOverPoster.FeatureType = esriBasicOverposterFeatureType.esriOverposterPolygon;
                        Temp_BasicOverPoster.PolygonPlacementMethod = esriOverposterPolygonPlacementMethod.esriAlwaysHorizontal;
                        break;
                    case ESRI.ArcGIS.Geometry.esriGeometryType.esriGeometryPoint:
                        Temp_BasicOverPoster.FeatureType = esriBasicOverposterFeatureType.esriOverposterPoint;
                        Temp_BasicOverPoster.PointPlacementMethod = esriOverposterPointPlacementMethod.esriAroundPoint;
                        break;
                    case ESRI.ArcGIS.Geometry.esriGeometryType.esriGeometryPolyline:
                        Temp_BasicOverPoster.FeatureType = esriBasicOverposterFeatureType.esriOverposterPolyline;
                        break;
                }
                Temp_LabelEngine2.BasicOverposterLayerProperties = Temp_BasicOverPoster as IBasicOverposterLayerProperties;
                //设定标注
                IMapOverposter Temp_MapPos = IN_Axmapcontrol.Map as IMapOverposter;
                IOverposterProperties Temp_OverPoster = Temp_MapPos.OverposterProperties;
                IAnnotateLayerProperties Temp_AnnoPClass = Temp_LabelEngine2 as IAnnotateLayerProperties;
                (IN_FeatureLayer as IGeoFeatureLayer).DisplayAnnotation = true;
                return Temp_AnnoPClass;
            }
    效果如图:
  • 相关阅读:
    单链表的实现
    WCF 客户端 BasicHttpBinding 兼容 HTTPS 和 HTTP
    Spring MVC 通过 @PropertySource和@Value 来读取配置文件
    Spring MVC 零配置 / Spring MVC JavaConfig
    .NET/ASP.NET/C#/WCF/SQL Server/My SQL/Java/JSP/JDBC/Spring/Spring MVC/PHP/Python/Ruby/Shell/Agile/CSS/HTML/HTTP/Unix/Linux大量PDF书籍/电子书籍下载, Effective Java 下载
    org.apache.commons.lang.exception包的ExceptionUtils工具类获取getFullStackTrace
    写了一个简单的Linux Shell用来下载文件
    Jackson序列化日期类型的属性
    jackson 中JsonFormat date类型字段的使用
    Java获取本机IP
  • 原文地址:https://www.cnblogs.com/gisoracle/p/9147025.html
Copyright © 2020-2023  润新知