示例#1
0
        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 = new stdole.StdFont() as stdole.IFontDisp;;  //字体
            ITextSymbol      pTextSymbol;

            pFont.Name = "黑体";
            pFont.Size = 4;
            //未指定字体颜色则默认为黑色
            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.esriViewGeography, null, null);
        }
示例#2
0
        private void AddLabel(string StrDisplayField)
        {
            pGeoFeatLayer.DisplayAnnotation = false;
            pMapControl.ActiveView.Refresh();

            pGeoFeatLayer.DisplayField = StrDisplayField;

            IAnnotateLayerPropertiesCollection pAnnoProps = null;

            pAnnoProps = pGeoFeatLayer.AnnotationProperties;

            ILineLabelPosition pPosition = null;

            pPosition          = new LineLabelPositionClass();
            pPosition.Parallel = true;
            pPosition.Above    = true;

            ILineLabelPlacementPriorities    pPlacement = new LineLabelPlacementPrioritiesClass();
            IBasicOverposterLayerProperties4 pBasic     = new BasicOverposterLayerPropertiesClass();

            pBasic.FeatureType = esriBasicOverposterFeatureType.esriOverposterPolyline;
            pBasic.LineLabelPlacementPriorities = pPlacement;
            pBasic.LineLabelPosition            = pPosition;
            pBasic.BufferRatio     = 0;
            pBasic.FeatureWeight   = esriBasicOverposterWeight.esriHighWeight;
            pBasic.NumLabelsOption = esriBasicNumLabelsOption.esriOneLabelPerPart;
            //pBasic.PlaceOnlyInsidePolygon = true;//仅在地物内部显示标注  deleted by chulili s20111018 界面上并没有这项设置,这句话应注释掉,否则像是错误

            ILabelEngineLayerProperties pLabelEngine = null;

            pLabelEngine = new LabelEngineLayerPropertiesClass();
            pLabelEngine.BasicOverposterLayerProperties = pBasic as IBasicOverposterLayerProperties;
            pLabelEngine.Expression = "[" + StrDisplayField + "]";
            ITextSymbol pTextSymbol = null;

            pTextSymbol = pLabelEngine.Symbol;
            System.Drawing.Font pFont = null;
            pFont = LabelText.Font;
            IFontDisp pFontDisp = ESRI.ArcGIS.ADF.Converter.ToStdFont(pFont);

            pTextSymbol.Font = pFontDisp;

            IRgbColor pColor = new RgbColorClass();

            pColor.Red          = Convert.ToInt32(LabelText.ForeColor.R);
            pColor.Green        = Convert.ToInt32(LabelText.ForeColor.G);
            pColor.Blue         = Convert.ToInt32(LabelText.ForeColor.B);
            pTextSymbol.Color   = pColor as IColor;
            pLabelEngine.Symbol = pTextSymbol;

            IAnnotateLayerProperties pAnnoLayerProps = null;

            pAnnoLayerProps = pLabelEngine as IAnnotateLayerProperties;
            pAnnoLayerProps.LabelWhichFeatures = esriLabelWhichFeatures.esriAllFeatures;
            pAnnoProps.Clear();

            pAnnoProps.Add(pAnnoLayerProps);
            pGeoFeatLayer.DisplayAnnotation = true;
            pMapControl.ActiveView.Refresh();
        }
示例#3
0
        /// <summary>
        /// Annotate Layer
        /// </summary>
        /// <param name="layer"></param>
        /// <param name="labelField"></param>
        /// <author>Shen Yongyuan</author>
        /// <date>20091111</date>
        public static void AnnotateLayer(ILayer layer, string labelField)
        {
            IFeatureLayer    feaLayer    = layer as IFeatureLayer;
            IGeoFeatureLayer geoFeaLayer = layer as IGeoFeatureLayer;
            IAnnotateLayerPropertiesCollection pAnnoProps = geoFeaLayer.AnnotationProperties;

            pAnnoProps.Clear();

            ITextSymbol pTextSyl = new TextSymbolClass();
            Font        fnt      = new System.Drawing.Font("宋体", 10f, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point);

            pTextSyl.Size = 10;
            //pTextSyl.Font = ESRI.ArcGIS.ADF.COMSupport.OLE.GetIFontDispFromFont(fnt) as stdole.IFontDisp;
            pTextSyl.Color = Town.ArcGIS.Color.ToEsriColor(System.Drawing.Color.Black);

            IBasicOverposterLayerProperties pBasic = new BasicOverposterLayerPropertiesClass();

            if (feaLayer.FeatureClass.ShapeType == esriGeometryType.esriGeometryPolygon)
            {
                ILineLabelPosition            pPosition      = new LineLabelPositionClass();
                ILineLabelPlacementPriorities pPlacementLine = new LineLabelPlacementPrioritiesClass();

                pBasic.FeatureType = esriBasicOverposterFeatureType.esriOverposterPolygon;
                pBasic.LineLabelPlacementPriorities = pPlacementLine;
                pBasic.LineLabelPosition            = pPosition;
            }
            else if (feaLayer.FeatureClass.ShapeType == esriGeometryType.esriGeometryPoint)
            {
                IPointPlacementPriorities pPlacementPoint = new PointPlacementPrioritiesClass();
                pBasic.FeatureType = esriBasicOverposterFeatureType.esriOverposterPoint;
                pBasic.PointPlacementPriorities = pPlacementPoint;
                pBasic.PointPlacementOnTop      = false;
                pBasic.PointPlacementMethod     = esriOverposterPointPlacementMethod.esriAroundPoint;
            }
            else if (feaLayer.FeatureClass.ShapeType == esriGeometryType.esriGeometryPolyline)
            {
                ILineLabelPosition            pPosition      = new LineLabelPositionClass();
                ILineLabelPlacementPriorities pPlacementLine = new LineLabelPlacementPrioritiesClass();

                pBasic.FeatureType = esriBasicOverposterFeatureType.esriOverposterPolyline;
                pBasic.LineLabelPlacementPriorities = pPlacementLine;
                pBasic.LineLabelPosition            = pPosition;
            }

            pBasic.LabelWeight   = esriBasicOverposterWeight.esriHighWeight;
            pBasic.FeatureWeight = esriBasicOverposterWeight.esriNoWeight;

            ILabelEngineLayerProperties pLabelEngine = new LabelEngineLayerPropertiesClass();

            pLabelEngine.Symbol = pTextSyl;
            pLabelEngine.BasicOverposterLayerProperties = pBasic;
            pLabelEngine.Expression = "[" + labelField + "]";

            IAnnotateLayerProperties pAnnoLayerProps = pLabelEngine as IAnnotateLayerProperties;

            pAnnoProps.Add(pAnnoLayerProps);
            geoFeaLayer.DisplayAnnotation = true;
        }
        public static void InitLabel(IGeoFeatureLayer pGeoFeaturelayer, string sFieldName)  //重新标注整个图层
        {
            /*IAnnotateLayerPropertiesCollection作用于一个要素图层的所有注记设置的集合,控制要素图层的一系列注记对象*/
            IAnnotateLayerPropertiesCollection pAnnoLayerPropsCollection;

            //定义标注类
            pAnnoLayerPropsCollection = pGeoFeaturelayer.AnnotationProperties;
            /*将要素图层注记集合中的所有项都移除*/
            pAnnoLayerPropsCollection.Clear();

            IBasicOverposterLayerProperties pBasicOverposterlayerProps = new BasicOverposterLayerPropertiesClass();

            switch (pGeoFeaturelayer.FeatureClass.ShapeType)
            {
            case ESRI.ArcGIS.Geometry.esriGeometryType.esriGeometryPolygon:
                pBasicOverposterlayerProps.FeatureType = esriBasicOverposterFeatureType.esriOverposterPolygon;
                break;

            case ESRI.ArcGIS.Geometry.esriGeometryType.esriGeometryPoint:
                pBasicOverposterlayerProps.FeatureType = esriBasicOverposterFeatureType.esriOverposterPoint;
                break;

            case ESRI.ArcGIS.Geometry.esriGeometryType.esriGeometryPolyline:
                pBasicOverposterlayerProps.FeatureType = esriBasicOverposterFeatureType.esriOverposterPolyline;
                break;
            }
            ITextSymbol pTextSymbol = new TextSymbolClass();

            stdole.IFontDisp pFont = (stdole.IFontDisp) new stdole.StdFont();
            IRgbColor        pRGB  = null;

            pFont.Name       = "Arial";
            pFont.Size       = 9;
            pFont.Bold       = false;
            pFont.Italic     = false;
            pFont.Underline  = false;
            pTextSymbol.Font = pFont;
            if (pRGB == null)
            {
                pRGB              = new RgbColorClass();
                pRGB.Red          = 0;
                pRGB.Green        = 0;
                pRGB.Blue         = 0;
                pTextSymbol.Color = (IColor)pRGB;
            }

            ILabelEngineLayerProperties pLabelEnginelayerProps = new LabelEngineLayerPropertiesClass();

            pLabelEnginelayerProps.Expression = "[" + sFieldName + "]";
            pLabelEnginelayerProps.Symbol     = pTextSymbol;
            pLabelEnginelayerProps.BasicOverposterLayerProperties = pBasicOverposterlayerProps;
            /*将一项标注属性(LayerEngineLayerProperties对象)增加到要素图层的注记集合当中*/
            /*IAnnotateLayerProperties接口用于获取和修改要素图层注记类的注记属性,定义要素图层动态注记(文本)的显示*/
            pAnnoLayerPropsCollection.Add((IAnnotateLayerProperties)pLabelEnginelayerProps);
        }
示例#5
0
        /// <summary>
        /// 设置图层注释
        /// </summary>
        /// <param name="pFeaturelayer"></param>
        /// <param name="expression"></param>
        /// <param name="textSymbol"></param>
        public static void setLayerAnnotation(IFeatureLayer pFeaturelayer, string expression, ITextSymbol textSymbol)
        {
            //判断图层是否为空
            if (pFeaturelayer == null)
            {
                return;
            }

            IGeoFeatureLayer pGeoFeaturelayer = (IGeoFeatureLayer)pFeaturelayer;
            IAnnotateLayerPropertiesCollection pAnnoLayerPropsCollection;

            pAnnoLayerPropsCollection = pGeoFeaturelayer.AnnotationProperties;
            if (pAnnoLayerPropsCollection == null)
            {
                return;
            }
            pAnnoLayerPropsCollection.Clear();

            IBasicOverposterLayerProperties4 pBasicOverposterlayerProps = new BasicOverposterLayerPropertiesClass();

            switch (pFeaturelayer.FeatureClass.ShapeType)//判断图层类型
            {
            case ESRI.ArcGIS.Geometry.esriGeometryType.esriGeometryPolygon:
                pBasicOverposterlayerProps.FeatureType            = esriBasicOverposterFeatureType.esriOverposterPolygon;
                pBasicOverposterlayerProps.PolygonPlacementMethod = esriOverposterPolygonPlacementMethod.esriAlwaysHorizontal;
                break;

            case ESRI.ArcGIS.Geometry.esriGeometryType.esriGeometryPoint:
                pBasicOverposterlayerProps.FeatureType          = esriBasicOverposterFeatureType.esriOverposterPoint;
                pBasicOverposterlayerProps.PointPlacementMethod = esriOverposterPointPlacementMethod.esriAroundPoint;
                break;

            case ESRI.ArcGIS.Geometry.esriGeometryType.esriGeometryPolyline:
                pBasicOverposterlayerProps.FeatureType = esriBasicOverposterFeatureType.esriOverposterPolyline;
                break;
            }

            pBasicOverposterlayerProps.PlaceOnlyInsidePolygon = true;
            pBasicOverposterlayerProps.NumLabelsOption        = esriBasicNumLabelsOption.esriOneLabelPerShape;


            ILabelEngineLayerProperties pLabelEnginelayerProps = new LabelEngineLayerPropertiesClass();

            pLabelEnginelayerProps.Expression = expression;
            pLabelEnginelayerProps.Symbol     = textSymbol;
            pLabelEnginelayerProps.BasicOverposterLayerProperties = pBasicOverposterlayerProps as IBasicOverposterLayerProperties;
            pAnnoLayerPropsCollection.Add((IAnnotateLayerProperties)pLabelEnginelayerProps);
            pGeoFeaturelayer.DisplayAnnotation = true;//很重要,必须设置
        }
示例#6
0
        public static void SetLayerAnnotation(IGeoFeatureLayer geolyr, string field)
        {
            geolyr.AnnotationProperties.Clear();
            IBasicOverposterLayerProperties pBasic = new BasicOverposterLayerPropertiesClass();
            ILabelEngineLayerProperties pLableEngine = new LabelEngineLayerPropertiesClass();
            ITextSymbol textSymbol = new TextSymbolClass();

            string lable = "[" + field + "]";
            pLableEngine.Expression = lable;
            pLableEngine.IsExpressionSimple = true;
            pBasic.NumLabelsOption = esriBasicNumLabelsOption.esriOneLabelPerShape;
            pLableEngine.BasicOverposterLayerProperties = pBasic;
            pLableEngine.Symbol = textSymbol;
            geolyr.AnnotationProperties.Add(pLableEngine as IAnnotateLayerProperties);
        }
示例#7
0
        /// <summary>
        /// 改变一个图层的标注符号和标注字段
        /// </summary>
        /// <param name="feaLayer"></param>
        private void ChangeLayerAnno(IFeatureLayer feaLayer)
        {
            IGeoFeatureLayer geoLayer = feaLayer as IGeoFeatureLayer;

            if (geoLayer == null)
            {
                return;
            }

            geoLayer.AnnotationProperties.Clear();

            RgbColorClass color = new RgbColorClass();

            color.Red   = 255;
            color.Blue  = 0;
            color.Green = 0;

            TextSymbolClass txtSymbol = new TextSymbolClass();

            stdole.StdFontClass font = new stdole.StdFontClass();
            font.Name       = "黑体";
            font.Size       = 12;
            txtSymbol.Font  = font as stdole.IFontDisp;
            txtSymbol.Color = color;

            LineLabelPositionClass linePos = new LineLabelPositionClass();

            linePos.Parallel      = false;
            linePos.Perpendicular = true;
            linePos.Above         = true;

            LineLabelPlacementPrioritiesClass   linePlac = new LineLabelPlacementPrioritiesClass();
            BasicOverposterLayerPropertiesClass basOve   = new BasicOverposterLayerPropertiesClass();

            //不屏蔽这句有些线图层的标注不显示
            //basOve.FeatureType = esriBasicOverposterFeatureType.esriOverposterPolyline;
            basOve.LineLabelPosition            = linePos;
            basOve.LineLabelPlacementPriorities = linePlac;

            LabelEngineLayerPropertiesClass labelProp = new LabelEngineLayerPropertiesClass();

            labelProp.BasicOverposterLayerProperties = basOve;
            labelProp.Symbol     = txtSymbol;
            labelProp.Expression = "[" + feaLayer.DisplayField + "]";

            geoLayer.AnnotationProperties.Add(labelProp);
        }
        /// <summary>
        /// 设置瓦斯动力现象点标注样式
        /// </summary>
        /// <param name="pFeatureLayer"></param>
        public void SettingPowerPhenomenonLabel(IFeatureLayer pFeatureLayer)
        {
            IGeoFeatureLayer pGeoFeatureLayer = pFeatureLayer as IGeoFeatureLayer;

            pGeoFeatureLayer.AnnotationProperties.Clear();//必须执行,因为里面有一个默认的
            IBasicOverposterLayerProperties pBasic       = new BasicOverposterLayerPropertiesClass();
            ILabelEngineLayerProperties     pLableEngine = new LabelEngineLayerPropertiesClass();
            //ITextSymbol pTextSymbol = new TextSymbolClass();
            //pTextSymbol = (ITextSymbol)pStyleGalleryItem.Item;
            string pLable = "\"<UND>\"+ [OUTBURST_ROCK_QUANTITY]+\"|\"+ [GUSH_GAS_QUANTITY]  + \"</UND>\"+ vbNewLine + [COORDINATE_Z]+\"|\"+ [OCCURRENCE_TIME]";

            pLableEngine.Expression                     = pLable;
            pLableEngine.IsExpressionSimple             = true;
            pBasic.NumLabelsOption                      = esriBasicNumLabelsOption.esriOneLabelPerShape;
            pLableEngine.BasicOverposterLayerProperties = pBasic;
            //pLableEngine.Symbol = pTextSymbol;
            pGeoFeatureLayer.AnnotationProperties.Add(pLableEngine as IAnnotateLayerProperties);
            pGeoFeatureLayer.DisplayAnnotation = true;
        }
        /// <summary>
        /// 设置瓦斯含量点图层标注样式
        /// </summary>
        /// <param name="pFeatureLayer"></param>
        public void SettingGasContentPointLabel(IFeatureLayer pFeatureLayer)
        {
            IGeoFeatureLayer pGeoFeatureLayer = pFeatureLayer as IGeoFeatureLayer;

            pGeoFeatureLayer.AnnotationProperties.Clear();//必须执行,因为里面有一个默认的
            IBasicOverposterLayerProperties pBasic       = new BasicOverposterLayerPropertiesClass();
            ILabelEngineLayerProperties     pLableEngine = new LabelEngineLayerPropertiesClass();
            //ITextSymbol pTextSymbol = new TextSymbolClass();
            //pTextSymbol = (ITextSymbol)pStyleGalleryItem.Item;
            string pLable = "\"<UND>\"+ [GAS_CONTENT_VALUE]  + \"</UND>\"+ vbNewLine + [COORDINATE_Z]+\"|\"+ [DEPTH]";

            pLableEngine.Expression                     = pLable;
            pLableEngine.IsExpressionSimple             = true;
            pBasic.NumLabelsOption                      = esriBasicNumLabelsOption.esriOneLabelPerShape;
            pLableEngine.BasicOverposterLayerProperties = pBasic;
            //pLableEngine.Symbol = pTextSymbol;
            pGeoFeatureLayer.AnnotationProperties.Add(pLableEngine as IAnnotateLayerProperties);
            pGeoFeatureLayer.DisplayAnnotation = true;
        }
        /// <summary>
        /// 设置回采工作面瓦斯涌出量标注样式
        /// </summary>
        /// <param name="pFeatureLayer"></param>
        public void SettingStopeWorkingFaceGasGushQuantityLabel(IFeatureLayer pFeatureLayer)
        {
            IGeoFeatureLayer pGeoFeatureLayer = pFeatureLayer as IGeoFeatureLayer;

            pGeoFeatureLayer.AnnotationProperties.Clear();//必须执行,因为里面有一个默认的
            IBasicOverposterLayerProperties pBasic       = new BasicOverposterLayerPropertiesClass();
            ILabelEngineLayerProperties     pLableEngine = new LabelEngineLayerPropertiesClass();
            //ITextSymbol pTextSymbol = new TextSymbolClass();
            //pTextSymbol = (ITextSymbol)pStyleGalleryItem.Item;
            string pLable = "\"<UND>\"+ [ABSOLUTE_GAS_GUSH_QUANTITY]+\"|\"+ [RELATIVE_GAS_GUSH_QUANTITY]  + \"</UND>\"+ vbNewLine + [WORKING_FACE_DAY_OUTPUT]+\"|\"+ [STOPE_DATE]";

            pLableEngine.Expression                     = pLable;
            pLableEngine.IsExpressionSimple             = true;
            pBasic.NumLabelsOption                      = esriBasicNumLabelsOption.esriOneLabelPerShape;
            pLableEngine.BasicOverposterLayerProperties = pBasic;
            //pLableEngine.Symbol = pTextSymbol;
            pGeoFeatureLayer.AnnotationProperties.Add(pLableEngine as IAnnotateLayerProperties);
            pGeoFeatureLayer.DisplayAnnotation = true;
        }
示例#11
0
        public void showAnnotationByScale()
        {
            IMap             pMap             = axMapControl.Map;
            IFeatureLayer    pFeaturelayer    = pMap.get_Layer(1) as IFeatureLayer;
            IGeoFeatureLayer pGeoFeatureLayer = pFeaturelayer as IGeoFeatureLayer;
            //创建标注集接口,可以对标注进行添加、删除、查询、排序等操作
            IAnnotateLayerPropertiesCollection pAnnotateLayerPropertiesCollection = new AnnotateLayerPropertiesCollectionClass();

            pAnnotateLayerPropertiesCollection = pGeoFeatureLayer.AnnotationProperties;
            pAnnotateLayerPropertiesCollection.Clear();
            //创建标注的颜色
            IRgbColor pRgbColor = new RgbColorClass();

            pRgbColor.Red   = 255;
            pRgbColor.Green = 0;
            pRgbColor.Blue  = 0;
            //创建标注的字体样式
            ITextSymbol pTextSymbol = new TextSymbolClass();

            pTextSymbol.Color     = pRgbColor;
            pTextSymbol.Size      = 12;
            pTextSymbol.Font.Name = "宋体";
            //定义 ILineLabelPosition接口,用来管理line features的标注属性,指定标注和线要素的位置关系
            ILineLabelPosition pLineLabelPosition = new LineLabelPositionClass();

            pLineLabelPosition.Parallel      = false;
            pLineLabelPosition.Perpendicular = true;
            pLineLabelPosition.InLine        = true;
            //定义 ILineLabelPlacementPriorities接口用来控制标注冲突
            ILineLabelPlacementPriorities pLineLabelPlacementPriorities = new LineLabelPlacementPrioritiesClass();

            pLineLabelPlacementPriorities.AboveStart = 5;
            pLineLabelPlacementPriorities.BelowAfter = 4;
            //定义 IBasicOverposterLayerProperties 接口实现 LineLabelPosition 和 LineLabelPlacementPriorities对象的控制
            IBasicOverposterLayerProperties pBasicOverposterLayerProperties = new BasicOverposterLayerPropertiesClass();

            pBasicOverposterLayerProperties.LineLabelPlacementPriorities = pLineLabelPlacementPriorities;
            pBasicOverposterLayerProperties.LineLabelPosition            = pLineLabelPosition;
            pBasicOverposterLayerProperties.FeatureType = esriBasicOverposterFeatureType.esriOverposterPolygon;
            //创建标注对象
            ILabelEngineLayerProperties pLabelEngineLayerProperties = new LabelEngineLayerPropertiesClass();

            //设置标注符号
            pLabelEngineLayerProperties.Symbol = pTextSymbol;
            pLabelEngineLayerProperties.BasicOverposterLayerProperties = pBasicOverposterLayerProperties;
            //声明标注的Expression是否为Simple
            pLabelEngineLayerProperties.IsExpressionSimple = true;
            //设置标注字段
            pLabelEngineLayerProperties.Expression = "[DIQU]";
            //定义IAnnotateLayerTransformationProperties 接口用来控制feature layer的display of dynamic labels
            IAnnotateLayerTransformationProperties pAnnotateLayerTransformationProperties = pLabelEngineLayerProperties as IAnnotateLayerTransformationProperties;

            //设置标注参考比例尺
            pAnnotateLayerTransformationProperties.ReferenceScale = 500000;
            //定义IAnnotateLayerProperties接口,决定FeatureLayer动态标注信息
            IAnnotateLayerProperties pAnnotateLayerProperties = pLabelEngineLayerProperties as IAnnotateLayerProperties;

            //设置显示标注最大比例尺
            pAnnotateLayerProperties.AnnotationMaximumScale = 500000;
            //设置显示标注的最小比例
            pAnnotateLayerProperties.AnnotationMinimumScale = 25000000;
            //决定要标注的要素
            pAnnotateLayerProperties.WhereClause = "DIQU<>'宿州市'";
            //将创建好的标注对象添加到标注集对象中
            pAnnotateLayerPropertiesCollection.Add(pAnnotateLayerProperties);
            //声明标注是否显示
            pGeoFeatureLayer.DisplayAnnotation = true;
            //刷新视图
            this.axMapControl.Refresh();
        }
示例#12
0
        private void btnuse_Click(object sender, EventArgs e)
        {
            try
            {
                IFontDisp pFont = new StdFontClass() as IFontDisp;
                pTextSymbol.Color   = ClsGDBDataCommon.ColorToIColor(symbolcolor.SelectedColor);
                pFont.Bold          = toolBtnBold.Checked;
                pFont.Italic        = toolBtnIntend.Checked;
                pFont.Strikethrough = toolBtnStrikethrough.Checked;
                pFont.Underline     = toolBtnUnderline.Checked;
                pFont.Name          = cmbfont.Text;
                pFont.Size          = decimal.Parse(cmbsize.Text);
                pTextSymbol.Font    = pFont;

                IGeoFeatureLayer pGeoLayer = (IGeoFeatureLayer)pLayer;
                pGeoLayer.AnnotationProperties.Clear();
                ILabelEngineLayerProperties pLabelEngine = new LabelEngineLayerPropertiesClass();
                pLabelEngine.Symbol = pTextSymbol;

                //pLabelEngine2.BasicOverposterLayerProperties = pBasicProperties as IBasicOverposterLayerProperties;

                if (cmbfields.Text.Contains("[") && cmbfields.Text.Contains("]"))
                {
                    pLabelEngine.Expression = cmbfields.Text;
                }
                else
                {
                    string Exptext = "[" + cmbfields.Text + "]";
                    pLabelEngine.Expression = Exptext;
                }

                IBasicOverposterLayerProperties4 pBasic = new BasicOverposterLayerPropertiesClass();
                //pBasic.PolygonPlacementMethod = esriOverposterPolygonPlacementMethod.esriAlwaysHorizontal;
                if (chkOverLap.Checked)
                {
                    pBasic.GenerateUnplacedLabels = true;
                }
                if (pLayer is IFeatureLayer)
                {
                    IFeatureLayer featureLayer = pLayer as FeatureLayer;
                    if (featureLayer.FeatureClass == null)
                    {
                        return;
                    }

                    if (featureLayer.FeatureClass.ShapeType == esriGeometryType.esriGeometryPoint)
                    {
                        IPointPlacementPriorities pPointPlace = new PointPlacementPrioritiesClass();
                        pBasic.PointPlacementMethod = esriOverposterPointPlacementMethod.esriAroundPoint;
                        pBasic.PointPlacementOnTop  = radioCenterTop.Checked;

                        SetPointPlacementPriorities(pPointPlace);
                        pBasic.PointPlacementPriorities = pPointPlace;
                    }
                    else if (featureLayer.FeatureClass.ShapeType == esriGeometryType.esriGeometryPolyline)
                    {
                        //更改角度
                        //= new LineLabelPositionClass();
                        IClone             pSrcClone          = pBasic.LineLabelPosition as IClone;
                        IClone             pDstClone          = pSrcClone.Clone();
                        ILineLabelPosition pLineLabelPosition = pDstClone as ILineLabelPosition;
                        if (pLineLabelPosition != null)
                        {
                            if (radioBtnHorizontal.Checked)
                            {
                                pLineLabelPosition.Horizontal    = true;
                                pLineLabelPosition.Parallel      = false;
                                pLineLabelPosition.Perpendicular = false;
                            }

                            if (radioBtnPerpendicular.Checked)
                            {
                                pLineLabelPosition.Horizontal    = false;
                                pLineLabelPosition.Parallel      = false;
                                pLineLabelPosition.Perpendicular = true;
                            }

                            if (radioBtnParallel.Checked)
                            {
                                pLineLabelPosition.Horizontal    = false;
                                pLineLabelPosition.Parallel      = true;
                                pLineLabelPosition.Perpendicular = false;
                            }
                        }

                        pBasic.LineLabelPosition = pLineLabelPosition;
                        //pBasic.PerpendicularToAngle = true;
                    }
                    else if (featureLayer.FeatureClass.ShapeType == esriGeometryType.esriGeometryPolygon)
                    {
                        pBasic.PolygonPlacementMethod = esriOverposterPolygonPlacementMethod.esriAlwaysHorizontal;
                    }
                }

                //赋给labelEngine
                pLabelEngine.BasicOverposterLayerProperties = pBasic as IBasicOverposterLayerProperties;


                IAnnotateLayerProperties pAnnoLayerP = (IAnnotateLayerProperties)pLabelEngine;
                pAnnoLayerP.DisplayAnnotation  = chklabel.Checked;
                pAnnoLayerP.FeatureLayer       = pGeoLayer;
                pAnnoLayerP.LabelWhichFeatures = esriLabelWhichFeatures.esriVisibleFeatures;
                pAnnoLayerP.WhereClause        = "";

                pGeoLayer.AnnotationProperties.Add(pAnnoLayerP);
                pGeoLayer.DisplayAnnotation = chklabel.Checked;


                pMapControl.ActiveView.Refresh();
                //if (pTocControl.Buddy == pMapControl.Object)
                //{
                //    pTocControl.SetBuddyControl(pMapControl);
                //    pMapControl.ActiveView.PartialRefresh(esriViewDrawPhase.esriViewGeography, null, null);
                //    pTocControl.ActiveView.PartialRefresh(esriViewDrawPhase.esriViewGeography, null, null);
                //}
                //else if (pTocControl.Buddy.Equals(pSceneControl.Object))
                //{
                //    pTocControl.SetBuddyControl(pSceneControl);
                //    IActiveView pActiveView = pSceneControl.Scene as IActiveView;
                //    pActiveView.PartialRefresh(esriViewDrawPhase.esriViewGeography, pLayer, null);
                //    pTocControl.ActiveView.PartialRefresh(esriViewDrawPhase.esriViewGeography, null, null);
                //}
            }
            catch (System.Exception ex)
            {
            }
        }
 /// <summary>
 /// 设置瓦斯压力点图层标注样式
 /// </summary>
 public void SettingGasPressureLabel(IFeatureLayer pFeatureLayer)
 {
     IGeoFeatureLayer pGeoFeatureLayer = pFeatureLayer as IGeoFeatureLayer;
     pGeoFeatureLayer.AnnotationProperties.Clear();//必须执行,因为里面有一个默认的
     IBasicOverposterLayerProperties pBasic = new BasicOverposterLayerPropertiesClass();
     ILabelEngineLayerProperties pLableEngine = new LabelEngineLayerPropertiesClass();
     //ITextSymbol pTextSymbol = new TextSymbolClass();
     //pTextSymbol = (ITextSymbol)pStyleGalleryItem.Item;
     string pLable = "\"<UND>\"+ [GAS_PRESSURE_VALUE]  + \"</UND>\"+ vbNewLine + [COORDINATE_Z]+\"|\"+ [DEPTH]";
     pLableEngine.Expression = pLable;
     pLableEngine.IsExpressionSimple = true;
     pBasic.NumLabelsOption = esriBasicNumLabelsOption.esriOneLabelPerShape;
     pLableEngine.BasicOverposterLayerProperties = pBasic;
     //pLableEngine.Symbol = pTextSymbol;
     pGeoFeatureLayer.AnnotationProperties.Add(pLableEngine as IAnnotateLayerProperties);
     pGeoFeatureLayer.DisplayAnnotation = true;
 }
示例#14
0
 public void showAnnotationByScale()
 {
     IMap pMap = axMapControl.Map;
     IFeatureLayer pFeaturelayer = pMap.get_Layer(0) as IFeatureLayer;
     IGeoFeatureLayer pGeoFeatureLayer = pFeaturelayer as IGeoFeatureLayer;
     //创建标注集接口,可以对标注进行添加、删除、查询、排序等操作
     IAnnotateLayerPropertiesCollection pAnnotateLayerPropertiesCollection = new AnnotateLayerPropertiesCollectionClass();
     pAnnotateLayerPropertiesCollection = pGeoFeatureLayer.AnnotationProperties;
     pAnnotateLayerPropertiesCollection.Clear();
     //创建标注的颜色
     IRgbColor pRgbColor = new RgbColorClass();
     pRgbColor.Red = 255;
     pRgbColor.Green = 0;
     pRgbColor.Blue = 0;
     //创建标注的字体样式
     ITextSymbol pTextSymbol = new TextSymbolClass();
     pTextSymbol.Color = pRgbColor;
     pTextSymbol.Size = 12;
     pTextSymbol.Font.Name = "宋体";
     //定义 ILineLabelPosition接口,用来管理line features的标注属性,指定标注和线要素的位置关系
     ILineLabelPosition pLineLabelPosition = new LineLabelPositionClass();
     pLineLabelPosition.Parallel = false;
     pLineLabelPosition.Perpendicular = true;
     pLineLabelPosition.InLine = true;
     //定义 ILineLabelPlacementPriorities接口用来控制标注冲突
     ILineLabelPlacementPriorities pLineLabelPlacementPriorities = new LineLabelPlacementPrioritiesClass();
     pLineLabelPlacementPriorities.AboveStart = 5;
     pLineLabelPlacementPriorities.BelowAfter = 4;
     //定义 IBasicOverposterLayerProperties 接口实现 LineLabelPosition 和 LineLabelPlacementPriorities对象的控制
     IBasicOverposterLayerProperties pBasicOverposterLayerProperties = new BasicOverposterLayerPropertiesClass();
     pBasicOverposterLayerProperties.LineLabelPlacementPriorities = pLineLabelPlacementPriorities;
     pBasicOverposterLayerProperties.LineLabelPosition = pLineLabelPosition;
     pBasicOverposterLayerProperties.FeatureType = esriBasicOverposterFeatureType.esriOverposterPolygon;
     //创建标注对象
     ILabelEngineLayerProperties pLabelEngineLayerProperties = new LabelEngineLayerPropertiesClass();
     //设置标注符号
     pLabelEngineLayerProperties.Symbol = pTextSymbol;
     pLabelEngineLayerProperties.BasicOverposterLayerProperties = pBasicOverposterLayerProperties;
     //声明标注的Expression是否为Simple
     pLabelEngineLayerProperties.IsExpressionSimple = true;
     //设置标注字段
     pLabelEngineLayerProperties.Expression = "[DIQU]";
     //定义IAnnotateLayerTransformationProperties 接口用来控制feature layer的display of dynamic labels
     IAnnotateLayerTransformationProperties pAnnotateLayerTransformationProperties = pLabelEngineLayerProperties as IAnnotateLayerTransformationProperties;
     //设置标注参考比例尺
     pAnnotateLayerTransformationProperties.ReferenceScale = 500000;
     //定义IAnnotateLayerProperties接口,决定FeatureLayer动态标注信息
     IAnnotateLayerProperties pAnnotateLayerProperties = pLabelEngineLayerProperties as IAnnotateLayerProperties;
     //设置显示标注最大比例尺
     pAnnotateLayerProperties.AnnotationMaximumScale = 500000;
     //设置显示标注的最小比例
     pAnnotateLayerProperties.AnnotationMinimumScale = 25000000;
     //决定要标注的要素
     pAnnotateLayerProperties.WhereClause = "DIQU<>'宿州市'";
     //将创建好的标注对象添加到标注集对象中
     pAnnotateLayerPropertiesCollection.Add(pAnnotateLayerProperties);
     //声明标注是否显示
     pGeoFeatureLayer.DisplayAnnotation = true;
     //刷新视图
     this.axMapControl.Refresh();
 }
 /// <summary>
 /// 设置瓦斯动力现象点标注样式
 /// </summary>
 /// <param name="pFeatureLayer"></param>
 public void SettingPowerPhenomenonLabel(IFeatureLayer pFeatureLayer)
 {
     IGeoFeatureLayer pGeoFeatureLayer = pFeatureLayer as IGeoFeatureLayer;
        pGeoFeatureLayer.AnnotationProperties.Clear();//必须执行,因为里面有一个默认的
        IBasicOverposterLayerProperties pBasic = new BasicOverposterLayerPropertiesClass();
        ILabelEngineLayerProperties pLableEngine = new LabelEngineLayerPropertiesClass();
        //ITextSymbol pTextSymbol = new TextSymbolClass();
        //pTextSymbol = (ITextSymbol)pStyleGalleryItem.Item;
        string pLable = "\"<UND>\"+ [OUTBURST_ROCK_QUANTITY]+\"|\"+ [GUSH_GAS_QUANTITY]  + \"</UND>\"+ vbNewLine + [COORDINATE_Z]+\"|\"+ [OCCURRENCE_TIME]";
        pLableEngine.Expression = pLable;
        pLableEngine.IsExpressionSimple = true;
        pBasic.NumLabelsOption = esriBasicNumLabelsOption.esriOneLabelPerShape;
        pLableEngine.BasicOverposterLayerProperties = pBasic;
        //pLableEngine.Symbol = pTextSymbol;
        pGeoFeatureLayer.AnnotationProperties.Add(pLableEngine as IAnnotateLayerProperties);
        pGeoFeatureLayer.DisplayAnnotation = true;
 }
        private void btn_OK_Click(object sender, EventArgs e)
        {
            IGeoFeatureLayer pGeoFeatureLayer = (IGeoFeatureLayer)m_FeatureLayer;

            //清除原有注记
            pGeoFeatureLayer.DisplayAnnotation = false;
            m_MapControl.Refresh(esriViewDrawPhase.esriViewBackground, null, null);


            //得到图层的标注属性集合对象
            IAnnotateLayerPropertiesCollection pAnnoProps = pGeoFeatureLayer.AnnotationProperties;

            //清空这个集合内的对象
            pAnnoProps.Clear();

            IAnnotateLayerProperties        pAnnoLayerProps;
            ILineLabelPlacementPriorities   pPlacement;
            ILineLabelPosition              pPosition;
            IBasicOverposterLayerProperties pBasic;
            ILabelEngineLayerProperties     pLabelEngine;


            //设置文本属性
            stdole.IFontDisp pFont;
            pFont = new stdole.StdFontClass() as stdole.IFontDisp;

            pFont.Name          = lbl_PreviewFont.Font.Name;
            pFont.Italic        = lbl_PreviewFont.Font.Italic;
            pFont.Underline     = lbl_PreviewFont.Font.Underline;
            pFont.Bold          = lbl_PreviewFont.Font.Bold;
            pFont.Size          = (decimal)lbl_PreviewFont.Font.Size;
            pFont.Strikethrough = lbl_PreviewFont.Font.Strikeout;

            IRgbColor pRGB = new RgbColorClass();

            pRGB.Red   = (int)lbl_PreviewFont.ForeColor.R;
            pRGB.Green = (int)lbl_PreviewFont.ForeColor.G;
            pRGB.Blue  = (int)lbl_PreviewFont.ForeColor.B;

            ITextSymbol pTextSymbol = new TextSymbolClass();

            pTextSymbol.Size  = lbl_PreviewFont.Font.Size;
            pTextSymbol.Font  = pFont;
            pTextSymbol.Color = pRGB;

            //设置注记文本的位置
            pPosition               = new LineLabelPositionClass();
            pPosition.Parallel      = false;
            pPosition.Perpendicular = true;

            pPlacement = new LineLabelPlacementPrioritiesClass();

            pBasic                   = new BasicOverposterLayerPropertiesClass();
            pBasic.FeatureType       = esriBasicOverposterFeatureType.esriOverposterPolyline;
            pBasic.LineLabelPosition = pPosition;

            //新建一个图层注记引擎对象,并设置它的属性
            pLabelEngine        = new LabelEngineLayerPropertiesClass();
            pLabelEngine.Symbol = pTextSymbol;
            pLabelEngine.BasicOverposterLayerProperties = pBasic;

            //设置注记字段
            pLabelEngine.Expression = "[" + cbx_Field.SelectedItem.ToString() + "]";

            pAnnoLayerProps = (IAnnotateLayerProperties)pLabelEngine;
            pAnnoProps.Add(pAnnoLayerProps);
            pGeoFeatureLayer.DisplayAnnotation = true;

            m_MapControl.Refresh(esriViewDrawPhase.esriViewBackground, null, null);
        }
示例#17
0
        /// <summary>
        /// Adds the layer lable.
        /// </summary>
        /// <param name="pMap">The p map.</param>
        /// <param name="layer">The layer.</param>
        /// <param name="fieldName">Name of the field.</param>
        /// <param name="pTextSymbol">The p text symbol.</param>
        /// <param name="dRefScale">The d reference scale.</param>
        public static void AddLayerLable(IMap pMap, ILayer layer, string fieldName, ITextSymbol pTextSymbol, double dRefScale)
        {
            IGeoFeatureLayer geoFeatureLayer = layer as IGeoFeatureLayer;
            IAnnotateLayerPropertiesCollection annotationProperties = geoFeatureLayer.AnnotationProperties;

            annotationProperties.Clear();
            ILineLabelPosition lineLabelPosition = new LineLabelPositionClass
            {
                Parallel      = false,
                Perpendicular = false,
                InLine        = true,
                OnTop         = true,
                Above         = false,
                Horizontal    = true
            };
            LineLabelPlacementPrioritiesClass lineLabelPlacementPrioritiesClass = new LineLabelPlacementPrioritiesClass();

            lineLabelPlacementPrioritiesClass.AboveStart = 5;
            lineLabelPlacementPrioritiesClass.BelowAfter = 4;
            IBasicOverposterLayerProperties basicOverposterLayerProperties = new BasicOverposterLayerPropertiesClass
            {
                LineLabelPosition = lineLabelPosition
            };
            ILabelEngineLayerProperties labelEngineLayerProperties;

            if (pMap.AnnotationEngine.Name.Equals("Esri Maplex Label Engine", System.StringComparison.CurrentCultureIgnoreCase))
            {
                labelEngineLayerProperties = new MaplexLabelEngineLayerPropertiesClass();
                IMaplexOverposterLayerProperties maplexOverposterLayerProperties = new MaplexOverposterLayerPropertiesClass();
                IFeatureLayer featureLayer = layer as IFeatureLayer;
                switch (featureLayer.FeatureClass.ShapeType)
                {
                case esriGeometryType.esriGeometryPoint:
                    maplexOverposterLayerProperties.FeatureType          = esriBasicOverposterFeatureType.esriOverposterPoint;
                    maplexOverposterLayerProperties.PointPlacementMethod = esriMaplexPointPlacementMethod.esriMaplexAroundPoint;
                    break;

                case esriGeometryType.esriGeometryPolyline:
                    maplexOverposterLayerProperties.FeatureType         = esriBasicOverposterFeatureType.esriOverposterPolyline;
                    maplexOverposterLayerProperties.LinePlacementMethod = esriMaplexLinePlacementMethod.esriMaplexCenteredStraightOnLine;
                    break;

                case esriGeometryType.esriGeometryPolygon:
                    maplexOverposterLayerProperties.FeatureType            = esriBasicOverposterFeatureType.esriOverposterPolygon;
                    maplexOverposterLayerProperties.PolygonPlacementMethod = esriMaplexPolygonPlacementMethod.esriMaplexHorizontalInPolygon;
                    break;
                }
                maplexOverposterLayerProperties.CanRemoveOverlappingLabel = false;
                maplexOverposterLayerProperties.RepeatLabel = false;
                (labelEngineLayerProperties as ILabelEngineLayerProperties2).OverposterLayerProperties = (maplexOverposterLayerProperties as IOverposterLayerProperties);
                IMapOverposter              mapOverposter              = pMap as IMapOverposter;
                IOverposterProperties       overposterProperties       = mapOverposter.OverposterProperties;
                IMaplexOverposterProperties maplexOverposterProperties = overposterProperties as IMaplexOverposterProperties;
                maplexOverposterProperties.LabelLargestPolygon = false;
            }
            else
            {
                labelEngineLayerProperties = new LabelEngineLayerPropertiesClass();
                labelEngineLayerProperties.BasicOverposterLayerProperties = basicOverposterLayerProperties;
            }
            labelEngineLayerProperties.Symbol             = pTextSymbol;
            labelEngineLayerProperties.IsExpressionSimple = true;
            labelEngineLayerProperties.Expression         = "[" + fieldName + "]";
            IAnnotateLayerProperties item = labelEngineLayerProperties as IAnnotateLayerProperties;

            if (dRefScale != -1.0)
            {
                IAnnotateLayerTransformationProperties annotateLayerTransformationProperties = labelEngineLayerProperties as IAnnotateLayerTransformationProperties;
                annotateLayerTransformationProperties.ReferenceScale = dRefScale;
            }
            annotationProperties.Add(item);
            geoFeatureLayer.DisplayAnnotation = true;
        }
 /// <summary>
 /// 设置回采工作面瓦斯涌出量标注样式
 /// </summary>
 /// <param name="pFeatureLayer"></param>
 public void SettingStopeWorkingFaceGasGushQuantityLabel(IFeatureLayer pFeatureLayer)
 {
     IGeoFeatureLayer pGeoFeatureLayer = pFeatureLayer as IGeoFeatureLayer;
        pGeoFeatureLayer.AnnotationProperties.Clear();//必须执行,因为里面有一个默认的
        IBasicOverposterLayerProperties pBasic = new BasicOverposterLayerPropertiesClass();
        ILabelEngineLayerProperties pLableEngine = new LabelEngineLayerPropertiesClass();
        //ITextSymbol pTextSymbol = new TextSymbolClass();
        //pTextSymbol = (ITextSymbol)pStyleGalleryItem.Item;
        string pLable = "\"<UND>\"+ [ABSOLUTE_GAS_GUSH_QUANTITY]+\"|\"+ [RELATIVE_GAS_GUSH_QUANTITY]  + \"</UND>\"+ vbNewLine + [WORKING_FACE_DAY_OUTPUT]+\"|\"+ [STOPE_DATE]";
        pLableEngine.Expression = pLable;
        pLableEngine.IsExpressionSimple = true;
        pBasic.NumLabelsOption = esriBasicNumLabelsOption.esriOneLabelPerShape;
        pLableEngine.BasicOverposterLayerProperties = pBasic;
        //pLableEngine.Symbol = pTextSymbol;
        pGeoFeatureLayer.AnnotationProperties.Add(pLableEngine as IAnnotateLayerProperties);
        pGeoFeatureLayer.DisplayAnnotation = true;
 }
        public static void AddAnnotate(ILayer layer, string fieldName)
        {
            var pGeoLayer = layer as IGeoFeatureLayer;
            if (pGeoLayer != null)
            {
                var ipalpColl = pGeoLayer.AnnotationProperties;
                ipalpColl.Clear();
                IColor fontColor = new RgbColor();
                fontColor.RGB = 255; //字体颜色
                var font = new Font("宋体", 10, FontStyle.Bold);
                var dispFont = (IFontDisp)OLE.GetIFontDispFromFont(font);

                ITextSymbol pTextSymbol = new TextSymbolClass
                {
                    Color = fontColor,
                    Font = dispFont,
                    Size = 12
                };
                ////用来控制标注和要素的相对位置关系

                ILineLabelPosition pLineLpos = new LineLabelPositionClass
                {
                    Parallel = true, //修改标注的属性
                    //Perpendicular = false,
                    Below = true,
                    InLine = false,
                    Above = false
                };

                //用来控制标注冲突
                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 + "]"
                };
                //设置标注的参考比例尺
                var pAnnoLyrPros = (IAnnotateLayerTransformationProperties)pLableEngine;
                pAnnoLyrPros.ReferenceScale = 2500000;
                //设置标注可见的最大最小比例尺
                var pAnnoPros = pLableEngine as IAnnotateLayerProperties;
                //pAnnoPros.AnnotationMaximumScale = 2500000;
                //pAnnoPros.AnnotationMinimumScale = 25000000;
                //pAnnoPros.WhereClause属性  设置过滤条件
                ipalpColl.Add(pAnnoPros);
            }
            if (pGeoLayer != null) pGeoLayer.DisplayAnnotation = true;
        }
示例#20
0
        private void ConvertAnnotation(IMap map, ILayer featureLayer, string annotationFeatureClassName, double scale,
                                       IWorkspace workspace, ILineLabelPosition lineLabelPosition,
                                       IPointPlacementPriorities pointPlacementPriorities,
                                       esriBasicOverposterWeight labelWeight, esriBasicOverposterWeight featureWeight, bool tagUnplaced,
                                       string fontName, double fontSize, IRgbColor rgbColor, string expression, bool featureLinked,
                                       esriLabelWhichFeatures labelWhichFeatures)
        {
            if (workspace.Type != esriWorkspaceType.esriFileSystemWorkspace && featureLayer is IGeoFeatureLayer)
            {
                IGeoFeatureLayer geoFeatureLayer = featureLayer as IGeoFeatureLayer;
                IAnnotateLayerPropertiesCollection annotateLayerPropertiesCollectionClass =
                    geoFeatureLayer.AnnotationProperties;
                annotateLayerPropertiesCollectionClass.Clear();
                ILabelEngineLayerProperties     labelEngineLayerProperties     = new LabelEngineLayerPropertiesClass();
                IBasicOverposterLayerProperties basicOverposterLayerProperties =
                    new BasicOverposterLayerPropertiesClass();
                if (lineLabelPosition != null)
                {
                    basicOverposterLayerProperties.LineLabelPosition = lineLabelPosition;
                }
                else if (pointPlacementPriorities != null)
                {
                    basicOverposterLayerProperties.PointPlacementPriorities = pointPlacementPriorities;
                }
                basicOverposterLayerProperties.LabelWeight   = labelWeight;
                basicOverposterLayerProperties.FeatureWeight = featureWeight;

                IOverposterLayerProperties2 overposterLayerProperties2 =
                    basicOverposterLayerProperties as IOverposterLayerProperties2;
                overposterLayerProperties2.TagUnplaced = tagUnplaced;

                labelEngineLayerProperties.BasicOverposterLayerProperties = basicOverposterLayerProperties;
                stdole.IFontDisp pFont = new stdole.StdFontClass() as stdole.IFontDisp;
                pFont.Name = fontName;
                ITextSymbol pTextSymbol = new TextSymbolClass();
                pTextSymbol.Size  = fontSize;
                pTextSymbol.Font  = pFont;
                pTextSymbol.Color = rgbColor;
                labelEngineLayerProperties.Symbol     = pTextSymbol;
                labelEngineLayerProperties.Expression = expression;

                IAnnotateLayerProperties annotateLayerProperties =
                    labelEngineLayerProperties as IAnnotateLayerProperties;
                annotateLayerProperties.DisplayAnnotation = true;

                IAnnotationLayer annotationLayer =
                    CommonHelper.GetLayerByFeatureClassName(_context.FocusMap, annotationFeatureClassName) as
                    IAnnotationLayer;
                CommonHelper.SetReferenceScale(annotationLayer, scale);
                annotateLayerProperties.FeatureLayer      = geoFeatureLayer;
                annotateLayerProperties.GraphicsContainer = annotationLayer as IGraphicsContainer;
                annotateLayerProperties.AddUnplacedToGraphicsContainer = true;
                annotateLayerProperties.CreateUnplacedElements         = true;
                annotateLayerProperties.DisplayAnnotation  = true;
                annotateLayerProperties.FeatureLinked      = featureLinked;
                annotateLayerProperties.LabelWhichFeatures = labelWhichFeatures;
                annotateLayerProperties.UseOutput          = true;
                annotateLayerPropertiesCollectionClass.Add(annotateLayerProperties);

                annotateLayerPropertiesCollectionClass.Sort();
                IAnnotateMapProperties annotateMapPropertiesClass = new AnnotateMapPropertiesClass()
                {
                    AnnotateLayerPropertiesCollection = annotateLayerPropertiesCollectionClass
                };
                ITrackCancel          cancelTrackerClass   = new CancelTrackerClass();
                IAnnotateMap2         annotateMap2         = map.AnnotationEngine as IAnnotateMap2;
                IOverposterProperties overposterProperties = (map as IMapOverposter).OverposterProperties;
                annotateMap2.Label(overposterProperties, annotateMapPropertiesClass, map, cancelTrackerClass);
                map.AddLayer(annotationLayer as ILayer);
                geoFeatureLayer.DisplayAnnotation = false;
                map.ReferenceScale = scale;
                map.MapScale       = scale;
                IActiveView activeView = map as IActiveView;
                activeView.Refresh();
            }
        }
示例#21
0
        public static void AddAnnotate(ILayer layer, string fieldName)
        {
            var pGeoLayer = layer as IGeoFeatureLayer;

            if (pGeoLayer != null)
            {
                var ipalpColl = pGeoLayer.AnnotationProperties;
                ipalpColl.Clear();
                IColor fontColor = new RgbColor();
                fontColor.RGB = 255; //字体颜色
                var font     = new Font("宋体", 10, FontStyle.Bold);
                var dispFont = (IFontDisp)OLE.GetIFontDispFromFont(font);

                ITextSymbol pTextSymbol = new TextSymbolClass
                {
                    Color = fontColor,
                    Font  = dispFont,
                    Size  = 12
                };
                ////用来控制标注和要素的相对位置关系

                ILineLabelPosition pLineLpos = new LineLabelPositionClass
                {
                    Parallel = true, //修改标注的属性
                    //Perpendicular = false,
                    Below  = true,
                    InLine = false,
                    Above  = false
                };

                //用来控制标注冲突
                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 + "]"
                };
                //设置标注的参考比例尺
                var pAnnoLyrPros = (IAnnotateLayerTransformationProperties)pLableEngine;
                pAnnoLyrPros.ReferenceScale = 2500000;
                //设置标注可见的最大最小比例尺
                var pAnnoPros = pLableEngine as IAnnotateLayerProperties;
                //pAnnoPros.AnnotationMaximumScale = 2500000;
                //pAnnoPros.AnnotationMinimumScale = 25000000;
                //pAnnoPros.WhereClause属性  设置过滤条件
                ipalpColl.Add(pAnnoPros);
            }
            if (pGeoLayer != null)
            {
                pGeoLayer.DisplayAnnotation = true;
            }
        }
示例#22
0
        private void AddLabel(string StrDisplayField)
        {
            pGeoFeatLayer.DisplayAnnotation = false;
            pMapControl.ActiveView.Refresh();

            pGeoFeatLayer.DisplayField = StrDisplayField;

            IAnnotateLayerPropertiesCollection pAnnoProps = null;

            pAnnoProps = pGeoFeatLayer.AnnotationProperties;

            ILineLabelPosition pPosition = null;

            pPosition          = new LineLabelPositionClass();
            pPosition.Parallel = true;
            pPosition.Above    = true;

            ILineLabelPlacementPriorities    pPlacement = new LineLabelPlacementPrioritiesClass();
            IBasicOverposterLayerProperties4 pBasic     = new BasicOverposterLayerPropertiesClass();

            pBasic.FeatureType = esriBasicOverposterFeatureType.esriOverposterPolyline;
            pBasic.LineLabelPlacementPriorities = pPlacement;
            pBasic.LineLabelPosition            = pPosition;
            pBasic.BufferRatio   = 0;
            pBasic.FeatureWeight = esriBasicOverposterWeight.esriHighWeight;
            if (this.rdbPerName.Checked)
            {
                pBasic.NumLabelsOption = esriBasicNumLabelsOption.esriOneLabelPerName;  //每个名称标注一次
            }
            else if (this.rdbPerPart.Checked)
            {
                pBasic.NumLabelsOption = esriBasicNumLabelsOption.esriOneLabelPerPart;  //每个部分标注一次
            }
            else
            {
                pBasic.NumLabelsOption = esriBasicNumLabelsOption.esriOneLabelPerShape;  //每个地物标注一次
            }
            //pBasic.NumLabelsOption = esriBasicNumLabelsOption.esriNoLabelRestrictions ;
            //pBasic.PlaceOnlyInsidePolygon = true;  //仅在地物内部显示标注  deleted by chulili s20111018 界面上并没有这项设置,这句话应注释掉,否则像是错误

            ILabelEngineLayerProperties pLabelEngine = null;

            pLabelEngine = new LabelEngineLayerPropertiesClass();
            pLabelEngine.BasicOverposterLayerProperties = pBasic as IBasicOverposterLayerProperties;
            pLabelEngine.Expression = "[" + StrDisplayField + "]";
            ITextSymbol pTextSymbol = null;

            pTextSymbol = pLabelEngine.Symbol;
            System.Drawing.Font pFont = null;
            pFont = LabelText.Font;
            IFontDisp pFontDisp = ESRI.ArcGIS.ADF.Converter.ToStdFont(pFont);

            pTextSymbol.Font = pFontDisp;

            IRgbColor pColor = new RgbColorClass();

            pColor.Red          = Convert.ToInt32(LabelText.ForeColor.R);
            pColor.Green        = Convert.ToInt32(LabelText.ForeColor.G);
            pColor.Blue         = Convert.ToInt32(LabelText.ForeColor.B);
            pTextSymbol.Color   = pColor as IColor;
            pLabelEngine.Symbol = pTextSymbol;

            IAnnotateLayerProperties pAnnoLayerProps = null;

            pAnnoLayerProps = pLabelEngine as IAnnotateLayerProperties;
            pAnnoLayerProps.LabelWhichFeatures = esriLabelWhichFeatures.esriAllFeatures;
            //最大\最小比例尺
            try
            {
                if (this.txtMaxLabelScale.Text.Trim() != "")
                {
                    pAnnoLayerProps.AnnotationMaximumScale = Convert.ToDouble(this.txtMaxLabelScale.Text);
                }
                if (this.txtMinLabelScale.Text.Trim() != "")
                {
                    pAnnoLayerProps.AnnotationMinimumScale = Convert.ToDouble(this.txtMinLabelScale.Text);
                }
            }
            catch (Exception err)
            {}
            pAnnoProps.Clear();

            pAnnoProps.Add(pAnnoLayerProps);
            pGeoFeatLayer.DisplayAnnotation = this.chkIsLabel.Checked;
            (pMapControl.Map as IActiveView).Refresh();
        }
示例#23
0
        private void btnAnno_Click(object sender, EventArgs e)
        {
            IGeoFeatureLayer pGeoFeatLyr = this.mainMapControl.get_Layer(0) as IGeoFeatureLayer;
            //获得AnnotateLayerPropertiesCollection
            IAnnotateLayerPropertiesCollection pAnnoLyrProCollection = pGeoFeatLyr.AnnotationProperties;
            pAnnoLyrProCollection.Clear();
            //创建并设置TextSymbol
            ITextSymbol pTextSymbol = new TextSymbolClass();
            System.Drawing.Font pFont = new System.Drawing.Font("Castellar", 15.0F);
            //pTextSymbol.Font = ESRI.ArcGIS.Utility.COMSupport.OLE.GetIFontDispFromFont(pFont) as stdole.IFontDisp;//转换.NET的Font
            pTextSymbol.Color = getRGBColor(255, 0, 0);
            //创建LineLabelPosition
            ILineLabelPosition pLineLabelPosition = new LineLabelPositionClass();
            pLineLabelPosition.Parallel = false;
            pLineLabelPosition.Perpendicular = true;
            //创建LineLabelPlacementPriorities
            ILineLabelPlacementPriorities pLineLablePlacementPriorities = new LineLabelPlacementPrioritiesClass();
            //创建BasicOverposterLayerProperties
            IBasicOverposterLayerProperties pBasicOverposterLayerProperties = new BasicOverposterLayerPropertiesClass();
            pBasicOverposterLayerProperties.FeatureType = esriBasicOverposterFeatureType.esriOverposterPolyline;
            pBasicOverposterLayerProperties.LineLabelPlacementPriorities = pLineLablePlacementPriorities;
            pBasicOverposterLayerProperties.LineLabelPosition = pLineLabelPosition;
            //创建LabelEngineLayerProperties
            ILabelEngineLayerProperties pLabelEnginLayerProperties = new LabelEngineLayerPropertiesClass();
            pLabelEnginLayerProperties.Symbol = pTextSymbol;
            pLabelEnginLayerProperties.BasicOverposterLayerProperties = pBasicOverposterLayerProperties;
            pLabelEnginLayerProperties.Expression = "[NAME]";

            IAnnotateLayerProperties pAnnoLyrPro = pLabelEnginLayerProperties as IAnnotateLayerProperties;
            pAnnoLyrProCollection.Add(pAnnoLyrPro);//添加,关键
            pGeoFeatLyr.DisplayAnnotation = true;//确定显示

            this.mainMapControl.Refresh();
        }