Example #1
0
        public static void SetLayerInfoFromXml(IGeoFeatureLayer pGeaFeatureLayer)
        {
            IAnnotateLayerPropertiesCollection pAnnoLayerProperCol = pGeaFeatureLayer.AnnotationProperties;

            pAnnoLayerProperCol.Clear();

            ILabelEngineLayerProperties pLabelEngineLayerPro = new LabelEngineLayerPropertiesClass();
            IAnnotateLayerProperties    pAnnoLayerProperties = pLabelEngineLayerPro as IAnnotateLayerProperties;

            //从图层节点的XML中读取标注设置(会覆盖上面语句的设置结果)
            try
            {
                XmlNode nodeLayerXml = GetSelectNodeXml(pGeaFeatureLayer);
                if (nodeLayerXml != null)
                {
                    ReadLabelConfigFromXML(ref pAnnoLayerProperties, nodeLayerXml, pGeaFeatureLayer.FeatureClass.ShapeType.ToString());
                }
                pAnnoLayerProperCol.Add(pAnnoLayerProperties);

                //shduan 20110623 添加
                pGeaFeatureLayer.DisplayAnnotation = true;
            }
            catch
            {
            }
        }
Example #2
0
        /// <summary>
        /// 显示指定图层指定字段的标注
        /// </summary>
        /// <param name="geoLayer">要设置注标注的图层(IFeatureLayer as IGeoFeatureLayer)</param>
        /// <param name="fieldName">显示标注的字段</param>
        /// <param name="fontName">标注的字体</param>
        /// <param name="size">标注的大小</param>
        public static void ShowLabel(this IGeoFeatureLayer geoLayer, string fieldName, string fontName = "宋体", int size = 12)
        {
            //标注属性集
            IAnnotateLayerPropertiesCollection annotateLyrProColl = geoLayer.AnnotationProperties;

            annotateLyrProColl.Clear();

            //普通标准属性(另一个是Maplex标准属性)
            ILabelEngineLayerProperties labelEngine = new LabelEngineLayerPropertiesClass();

            labelEngine.Expression = $"[{fieldName}]";

            //字体
            IFontDisp fontDisp = new StdFont()
            {
                Name = fontName, Bold = false
            } as IFontDisp;

            //标注符号
            ITextSymbol textSymbol = new TextSymbolClass();

            textSymbol.Color   = ColorCreate.GetIColor(0, 0, 0);
            textSymbol.Font    = fontDisp;
            textSymbol.Size    = size;
            labelEngine.Symbol = textSymbol;

            //设置同名标注:默认为移除同名标注,应设为每个要素放置一个标注
            IBasicOverposterLayerProperties basicOverpLyrPro = labelEngine.BasicOverposterLayerProperties as IBasicOverposterLayerProperties;

            basicOverpLyrPro.NumLabelsOption = esriBasicNumLabelsOption.esriOneLabelPerShape;//每个要素放置一个标注

            annotateLyrProColl.Add(labelEngine as IAnnotateLayerProperties);
            geoLayer.DisplayAnnotation = true;
        }
Example #3
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);
        }
Example #4
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();
        }
Example #5
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;
        }
        /// <summary>
        /// 创建标注
        /// </summary>
        /// <param name="feaName"></param>
        /// <param name="featureDataset"></param>
        /// <param name="feaworkspace"></param>
        /// <param name="fsEditAnno"></param>
        /// <param name="intScale"></param>
        public void createAnnoFeatureClass(string feaName, IFeatureDataset featureDataset, IFeatureWorkspace feaworkspace, IFieldsEdit fsEditAnno, int intScale)
        {
            //创建注记的特殊字段
            try
            {
                //注记的workSpace
                IFeatureWorkspaceAnno pFWSAnno = feaworkspace as IFeatureWorkspaceAnno; //标注操作空间

                IGraphicsLayerScale pGLS = new GraphicsLayerScaleClass();               //图形比例接口
                pGLS.Units          = esriUnits.esriMeters;                             //图形比例设定
                pGLS.ReferenceScale = Convert.ToDouble(intScale);                       //创建注记必须要设置比例尺

                IFormattedTextSymbol myTextSymbol = new TextSymbolClass();              //文本格式接口
                ISymbol pSymbol = (ISymbol)myTextSymbol;                                //标记
                //Anno要素类必须有的缺省符号
                ISymbolCollection2 pSymbolColl = new SymbolCollectionClass();
                ISymbolIdentifier2 pSymID      = new SymbolIdentifierClass();
                pSymbolColl.AddSymbol(pSymbol, "Default", out pSymID);

                //Anno要素类的必要属性
                IAnnotateLayerProperties pAnnoProps = new LabelEngineLayerPropertiesClass();
                pAnnoProps.CreateUnplacedElements = true;
                pAnnoProps.CreateUnplacedElements = true;
                pAnnoProps.DisplayAnnotation      = true;
                pAnnoProps.UseOutput = true;

                ILabelEngineLayerProperties pLELayerProps = (ILabelEngineLayerProperties)pAnnoProps;
                pLELayerProps.Symbol             = pSymbol as ITextSymbol;
                pLELayerProps.SymbolID           = 0;
                pLELayerProps.IsExpressionSimple = true;
                pLELayerProps.Offset             = 0;
                pLELayerProps.SymbolID           = 0;

                IAnnotationExpressionEngine aAnnoVBScriptEngine = new AnnotationVBScriptEngineClass();
                pLELayerProps.ExpressionParser = aAnnoVBScriptEngine;
                pLELayerProps.Expression       = "[DESCRIPTION]";
                IAnnotateLayerTransformationProperties pATP = (IAnnotateLayerTransformationProperties)pAnnoProps;
                pATP.ReferenceScale = pGLS.ReferenceScale;
                pATP.ScaleRatio     = 1;

                IAnnotateLayerPropertiesCollection pAnnoPropsColl = new AnnotateLayerPropertiesCollectionClass();
                pAnnoPropsColl.Add(pAnnoProps);

                IObjectClassDescription pOCDesc = new AnnotationFeatureClassDescription();
                IFields fields = pOCDesc.RequiredFields;
                IFeatureClassDescription pFDesc = pOCDesc as IFeatureClassDescription;

                for (int j = 0; j < pOCDesc.RequiredFields.FieldCount; j++)
                {
                    fsEditAnno.AddField(pOCDesc.RequiredFields.get_Field(j));
                }
                fields = fsEditAnno as IFields;
                pFWSAnno.CreateAnnotationClass(feaName, fields, pOCDesc.InstanceCLSID, pOCDesc.ClassExtensionCLSID, pFDesc.ShapeFieldName, "", featureDataset, null, pAnnoPropsColl, pGLS, pSymbolColl, true);
            }
            catch
            {
            }
        }
Example #7
0
        private IFeatureClass method_1(IFeatureWorkspace ifeatureWorkspace_0, string string_4, double double_0,
                                       ITextSymbol itextSymbol_0, IFields ifields_0)
        {
            IObjectClassDescription  description  = new AnnotationFeatureClassDescriptionClass();
            IFeatureClassDescription description2 = description as IFeatureClassDescription;
            IClone     requiredFields             = description.RequiredFields as IClone;
            IFields    fields = requiredFields.Clone() as IFields;
            IFieldEdit edit   = null;
            int        index  = fields.FindField(description2.ShapeFieldName);

            edit = fields.get_Field(index) as IFieldEdit;
            IGeometryDefEdit      geometryDef    = edit.GeometryDef as IGeometryDefEdit;
            IFeatureWorkspaceAnno anno           = ifeatureWorkspace_0 as IFeatureWorkspaceAnno;
            IGraphicsLayerScale   referenceScale = new GraphicsLayerScaleClass
            {
                ReferenceScale = double_0,
                Units          = esriUnits.esriMeters
            };
            UID instanceCLSID                  = description.InstanceCLSID;
            UID classExtensionCLSID            = description.ClassExtensionCLSID;
            ISymbolCollection symbolCollection = new SymbolCollectionClass();

            symbolCollection.set_Symbol(0, itextSymbol_0 as ISymbol);
            IAnnotateLayerPropertiesCollection2 annoProperties = new AnnotateLayerPropertiesCollectionClass();
            IAnnotateLayerProperties            item           = new LabelEngineLayerPropertiesClass
            {
                Class         = "要素类 1",
                FeatureLinked = false,
                AddUnplacedToGraphicsContainer = false,
                CreateUnplacedElements         = true,
                DisplayAnnotation = true,
                UseOutput         = true
            };
            ILabelEngineLayerProperties properties2 = item as ILabelEngineLayerProperties;

            properties2.Offset   = 0.0;
            properties2.SymbolID = 0;
            properties2.Symbol   = itextSymbol_0;
            annoProperties.Add(item);
            for (int i = 0; i < ifields_0.FieldCount; i++)
            {
                if (fields.FindField(ifields_0.get_Field(i).Name) == -1)
                {
                    (fields as IFieldsEdit).AddField(ifields_0.get_Field(i));
                }
            }
            try
            {
                return(anno.CreateAnnotationClass(string_4, fields, instanceCLSID, classExtensionCLSID,
                                                  description2.ShapeFieldName, "", null, null, annoProperties, referenceScale, symbolCollection, false));
            }
            catch (Exception exception)
            {
                Logger.Current.Error("", exception, "");
            }
            return(null);
        }
Example #8
0
        private void btnNew_Click(object sender, EventArgs e)
        {
            frmInput input = new frmInput("名称:", "")
            {
                Text = "输入"
            };

            if (input.ShowDialog() == DialogResult.OK)
            {
                if (input.InputValue.Trim().Length == 0)
                {
                    MessageBox.Show("非法类名!");
                }
                else
                {
                    ISymbolIdentifier2 identifier;
                    for (int i = 0; i < this.listBoxControl1.Items.Count; i++)
                    {
                        SymbolIdentifierWrap wrap = this.listBoxControl1.Items[i] as SymbolIdentifierWrap;
                        if (wrap.AnnotateLayerProperties.Class == input.InputValue)
                        {
                            MessageBox.Show("类名必须唯一!");
                            return;
                        }
                    }
                    ITextSymbol symbol   = new TextSymbolClass();
                    int         symbolID = this.method_4(NewObjectClassHelper.m_pObjectClassHelper.m_pSymbolColl);
                    NewObjectClassHelper.m_pObjectClassHelper.m_pSymbolColl.set_Symbol(symbolID, symbol as ISymbol);
                    IAnnotateLayerProperties item = new LabelEngineLayerPropertiesClass
                    {
                        Class         = input.InputValue,
                        FeatureLinked = NewObjectClassHelper.m_pObjectClassHelper.IsRelatedFeature,
                        AddUnplacedToGraphicsContainer = false,
                        CreateUnplacedElements         = true,
                        DisplayAnnotation = true,
                        UseOutput         = true
                    };
                    ILabelEngineLayerProperties properties2 = item as ILabelEngineLayerProperties;
                    if (NewObjectClassHelper.m_pObjectClassHelper.IsRelatedFeature)
                    {
                        new AnnotationVBScriptEngineClass();
                        IFeatureClass relatedFeatureClass =
                            NewObjectClassHelper.m_pObjectClassHelper.RelatedFeatureClass;
                        properties2.Expression         = "[" + relatedFeatureClass.ObjectClassID + "]";
                        properties2.IsExpressionSimple = true;
                    }
                    properties2.Offset   = 0.0;
                    properties2.SymbolID = symbolID;
                    properties2.Symbol   = symbol;
                    NewObjectClassHelper.m_pObjectClassHelper.m_pAnnoPropertiesColn.Add(item);
                    NewObjectClassHelper.m_pObjectClassHelper.m_pSymbolColl.GetSymbolIdentifier(symbolID, out identifier);
                    this.listBoxControl1.Items.Add(new SymbolIdentifierWrap(item, identifier));
                }
            }
        }
        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);
        }
Example #10
0
        private void mnuAnnotation_Click(object sender, EventArgs e)
        {
            IGraphicsContainer pGraphicsContainer = MainMap.Map as IGraphicsContainer;
            ILayer             pLayer             = MainMap.get_Layer(0);
            IGeoFeatureLayer   pGeoFeatureLayer   = pLayer as IGeoFeatureLayer;

            // 清空当前图层标注集合
            IAnnotateLayerPropertiesCollection pAnnoProps = pGeoFeatureLayer.AnnotationProperties;

            pAnnoProps.Clear();

            // 建立标注文本符号
            stdole.IFontDisp pFont = new stdole.StdFontClass() as stdole.IFontDisp;
            pFont.Name = "宋体";
            pFont.Size = 9;

            IRgbColor pColor = new RgbColorClass();

            pColor.Red   = 250;
            pColor.Blue  = 10;
            pColor.Green = 50;

            ITextSymbol pTextSymbol = new TextSymbolClass();

            pTextSymbol.Font  = pFont;
            pTextSymbol.Color = pColor as IColor;

            // 设置标注位置
            ILineLabelPosition pPosition = new LineLabelPositionClass();

            pPosition.Parallel      = false;
            pPosition.Perpendicular = false;

            ILineLabelPlacementPriorities   pPlacement = new LineLabelPlacementPrioritiesClass();
            IBasicOverposterLayerProperties pBasic     = new BasicOverposterLayerProperties();

            pBasic.FeatureType       = esriBasicOverposterFeatureType.esriOverposterPolyline;
            pBasic.LineLabelPosition = pPosition;

            // 新建一个图层标注引擎对象
            ILabelEngineLayerProperties pLabelEngine = new LabelEngineLayerPropertiesClass();

            pLabelEngine.Symbol = pTextSymbol;
            pLabelEngine.BasicOverposterLayerProperties = pBasic;
            pLabelEngine.IsExpressionSimple             = true;
            pLabelEngine.Expression = "[ADCODE93]";
            IAnnotateLayerProperties pAnnoLayerProps = pLabelEngine as IAnnotateLayerProperties;

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

            MainMap.ActiveView.PartialRefresh(esriViewDrawPhase.esriViewGraphics, null, null);
        }
        private void btnAddClass_Click(object sender, EventArgs e)
        {
            frmInput input = new frmInput("类名称:", "");

            if (input.ShowDialog() == DialogResult.OK)
            {
                if (input.InputValue.Trim().Length == 0)
                {
                    MessageBox.Show("非法类名!");
                }
                else
                {
                    for (int i = 0; i < this.cboClass.Properties.Items.Count; i++)
                    {
                        AnnotateLayerPropertiesWrap wrap =
                            this.cboClass.Properties.Items[i] as AnnotateLayerPropertiesWrap;
                        if (wrap.AnnotateLayerProperties.Class == input.InputValue)
                        {
                            MessageBox.Show("类名必须唯一!");
                            return;
                        }
                    }
                    IAnnotateLayerProperties properties = new LabelEngineLayerPropertiesClass
                    {
                        Class         = input.InputValue,
                        FeatureLinked = this.iannotateLayerProperties_0.FeatureLinked,
                        FeatureLayer  = this.iannotateLayerProperties_0.FeatureLayer,
                        AddUnplacedToGraphicsContainer = this.iannotateLayerProperties_0.AddUnplacedToGraphicsContainer,
                        AnnotationMaximumScale         = this.iannotateLayerProperties_0.AnnotationMaximumScale,
                        AnnotationMinimumScale         = this.iannotateLayerProperties_0.AnnotationMinimumScale,
                        CreateUnplacedElements         = this.iannotateLayerProperties_0.CreateUnplacedElements,
                        DisplayAnnotation  = this.iannotateLayerProperties_0.DisplayAnnotation,
                        LabelWhichFeatures = this.iannotateLayerProperties_0.LabelWhichFeatures,
                        Priority           = this.iannotateLayerProperties_0.Priority,
                        UseOutput          = this.iannotateLayerProperties_0.UseOutput,
                        WhereClause        = this.iannotateLayerProperties_0.WhereClause
                    };
                    ILabelEngineLayerProperties properties2 = properties as ILabelEngineLayerProperties;
                    ILabelEngineLayerProperties properties3 =
                        this.iannotateLayerProperties_0 as ILabelEngineLayerProperties;
                    properties2.Expression         = properties3.Expression;
                    properties2.IsExpressionSimple = properties3.IsExpressionSimple;
                    int num2 = this.method_2();
                    properties2.SymbolID = num2;
                    properties2.Symbol   = (properties3.Symbol as IClone).Clone() as ITextSymbol;
                    this.cboClass.Properties.Items.Add(new AnnotateLayerPropertiesWrap(properties, num2, true));
                    this.bool_3 = true;
                }
            }
        }
Example #12
0
 public void Init()
 {
     if (NewObjectClassHelper.m_pObjectClassHelper.IsRelatedFeature)
     {
         this.panel1.Visible = false;
         this.panel2.Visible = true;
     }
     else
     {
         this.panel2.Visible = false;
         this.panel1.Visible = true;
     }
     if (NewObjectClassHelper.m_pObjectClassHelper.m_pSymbolColl.Count == 0)
     {
         ITextSymbol symbol = new TextSymbolClass();
         NewObjectClassHelper.m_pObjectClassHelper.m_pSymbolColl.set_Symbol(0, symbol as ISymbol);
         IAnnotateLayerProperties item = new LabelEngineLayerPropertiesClass
         {
             Class         = "要素类 1",
             FeatureLinked = NewObjectClassHelper.m_pObjectClassHelper.IsRelatedFeature,
             AddUnplacedToGraphicsContainer = false,
             CreateUnplacedElements         = true,
             DisplayAnnotation = true,
             UseOutput         = true
         };
         ILabelEngineLayerProperties properties2 = item as ILabelEngineLayerProperties;
         if (NewObjectClassHelper.m_pObjectClassHelper.IsRelatedFeature)
         {
             new AnnotationVBScriptEngineClass();
             IFeatureClass relatedFeatureClass = NewObjectClassHelper.m_pObjectClassHelper.RelatedFeatureClass;
             properties2.Expression         = "[" + relatedFeatureClass.ObjectClassID + "]";
             properties2.IsExpressionSimple = true;
         }
         properties2.Offset   = 0.0;
         properties2.SymbolID = 0;
         properties2.Symbol   = symbol;
         NewObjectClassHelper.m_pObjectClassHelper.m_pAnnoPropertiesColn.Add(item);
     }
     this.listBoxControl1.Items.Clear();
     for (int i = 0; i < NewObjectClassHelper.m_pObjectClassHelper.m_pAnnoPropertiesColn.Count; i++)
     {
         IAnnotateLayerProperties properties3;
         int num2;
         ISymbolIdentifier2 identifier;
         NewObjectClassHelper.m_pObjectClassHelper.m_pAnnoPropertiesColn.QueryItem(i, out properties3, out num2);
         NewObjectClassHelper.m_pObjectClassHelper.m_pSymbolColl.GetSymbolIdentifier(num2, out identifier);
         this.listBoxControl1.Items.Add(new SymbolIdentifierWrap(properties3, identifier));
     }
     this.listBoxControl1.SelectedIndex = 0;
 }
Example #13
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;//很重要,必须设置
        }
Example #14
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);
        }
Example #15
0
        private void CreateLabels()
        {
            if (Layer is IGeoFeatureLayer geoFeatureLayer)
            {
                const double TextSizePt        = 9.0;
                const double GoodLookingScale  = 500.0;
                double       referenceScale    = ArcmapUtils.GetReferenceScale(GoodLookingScale);
                string       tableName         = ArcobjWorkspaceUtils.UnqualifyTableName(ArcobjWorkspaceUtils.GetTableName(geoFeatureLayer.FeatureClass as IDataset));
                string       oidFieldName      = geoFeatureLayer.FeatureClass.OIDFieldName;
                string       globalIdFieldName = ArcobjWorkspaceUtils.GetGlobalIdFieldName(geoFeatureLayer.FeatureClass as ITable);
                string       expression        = FormatLabelExpression(tableName, oidFieldName, globalIdFieldName);

                ITextSymbol textSymbol = new TextSymbolClass();
                textSymbol.Color = ArcmapLayerUtils.DetectLayerMainColor(geoFeatureLayer);
                textSymbol.Size  = TextSizePt / referenceScale * GoodLookingScale;

                // Remove existing annotations
                geoFeatureLayer.DisplayAnnotation = false;
                geoFeatureLayer.AnnotationProperties.Clear();

                IAnnotateLayerProperties annotateLayerProperties = new LabelEngineLayerPropertiesClass();
                annotateLayerProperties.UseOutput              = true;
                annotateLayerProperties.LabelWhichFeatures     = esriLabelWhichFeatures.esriVisibleFeatures;
                annotateLayerProperties.CreateUnplacedElements = true;

                ILabelEngineLayerProperties2 labelEngineProperties = (ILabelEngineLayerProperties2)annotateLayerProperties;
                labelEngineProperties.ExpressionParser = new AnnotationVBScriptEngineClass();
                labelEngineProperties.Expression       = expression;
                labelEngineProperties.Symbol           = textSymbol;

                IBasicOverposterLayerProperties overposterProperties = labelEngineProperties.BasicOverposterLayerProperties;
                overposterProperties.GenerateUnplacedLabels = true;
                overposterProperties.NumLabelsOption        = esriBasicNumLabelsOption.esriOneLabelPerShape;
                overposterProperties.PointPlacementOnTop    = true;
                overposterProperties.PointPlacementMethod   = esriOverposterPointPlacementMethod.esriSpecifiedAngles;
                overposterProperties.PointPlacementAngles   = new[] { 30.0 };
                overposterProperties.LineLabelPosition      = CreateLineLabelPosition();

                if (labelEngineProperties.OverposterLayerProperties is IOverposterLayerProperties2 overposterProperties2)
                {
                    overposterProperties2.TagUnplaced = false; // The "place overlapping labels" option
                }
                // Show new annotation in map
                geoFeatureLayer.AnnotationProperties.Add(annotateLayerProperties);
                geoFeatureLayer.DisplayAnnotation = true;
                ArcmapUtils.InvalidateMap(ArcmapUtils.GetFocusMap());
            }
        }
Example #16
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);
        }
Example #17
0
        private void btnAdd_Click(object sender, EventArgs e)
        {
            string str = this.txtClassName.Text.Trim();

            if (str.Length != 0)
            {
                if (this.method_0(str))
                {
                    MessageBox.Show("类名已存在!");
                }
                else
                {
                    IAnnotateLayerProperties properties;
                    int num;
                    this.iannotateLayerPropertiesCollection2_0.QueryItem(0, out properties, out num);
                    IAnnotateLayerProperties properties2 = new LabelEngineLayerPropertiesClass
                    {
                        Class         = str,
                        FeatureLinked = properties.FeatureLinked,
                        FeatureLayer  = properties.FeatureLayer,
                        AddUnplacedToGraphicsContainer = properties.AddUnplacedToGraphicsContainer,
                        AnnotationMaximumScale         = properties.AnnotationMaximumScale,
                        AnnotationMinimumScale         = properties.AnnotationMinimumScale,
                        CreateUnplacedElements         = properties.CreateUnplacedElements,
                        DisplayAnnotation  = properties.DisplayAnnotation,
                        LabelWhichFeatures = properties.LabelWhichFeatures,
                        Priority           = properties.Priority,
                        UseOutput          = properties.UseOutput,
                        WhereClause        = properties.WhereClause
                    };
                    ILabelEngineLayerProperties properties3 = properties2 as ILabelEngineLayerProperties;
                    ILabelEngineLayerProperties properties4 = properties as ILabelEngineLayerProperties;
                    properties3.Expression         = properties4.Expression;
                    properties3.IsExpressionSimple = properties4.IsExpressionSimple;
                    num = this.method_1();
                    properties3.SymbolID = num;
                    properties3.Symbol   = (properties4.Symbol as IClone).Clone() as ITextSymbol;
                    TreeNode node = new TreeNode(str)
                    {
                        Checked = properties2.DisplayAnnotation,
                        Tag     = new frmLabelManager.AnnotateLayerPropertiesWrap(properties2, num, true)
                    };
                    this.treeNode_0.Nodes.Add(node);
                }
            }
        }
        /// <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;
        }
        /// <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;
        }
Example #21
0
        //更换数据库时,重新初始化地图控件
        private void initAxMapCtrl(IWorkspace indataWS)
        {
            axMapControlR.ClearLayers();
            IFeatureWorkspace pFW = indataWS as IFeatureWorkspace;
            IFeatureClass     pFC = null;

            if ((indataWS as IWorkspace2).get_NameExists(esriDatasetType.esriDTFeatureClass, "METADATA_MAP"))
            {
                pFC = pFW.OpenFeatureClass("METADATA_MAP");
                IFeatureLayer pFL = new FeatureLayerClass();
                pFL.FeatureClass = pFC;
                pFL.Name         = pFC.AliasName;
                IGeoFeatureLayer pGFL = pFL as IGeoFeatureLayer;
                DefineUniqueValueRenderer(pGFL, "数据生产时间");
                //IAnnotationExpressionEngine pAEE = new AnnotationVBScriptEngineClass();
                //pAEE.SetExpression();
                ILabelEngineLayerProperties pLELP = new LabelEngineLayerPropertiesClass();
                pLELP.Expression = "\"数据生产单位:\" & [数据生产单位] & chr(13) & \"数据生产时间:\" & [数据生产时间] & chr(13)";//"[producedate]";
                IAnnotateLayerPropertiesCollection pALPC = pGFL.AnnotationProperties;
                pALPC.Clear();
                pALPC.Add(pLELP as IAnnotateLayerProperties);
                pGFL.DisplayAnnotation = true;

                axMapControlR.Map.AddLayer(pFL);
            }

            if ((indataWS as IWorkspace2).get_NameExists(esriDatasetType.esriDTFeatureClass, "XZQH_XIAN"))
            {
                pFC = pFW.OpenFeatureClass("XZQH_XIAN");
                IFeatureLayer pFL = new FeatureLayerClass();
                pFL.FeatureClass = pFC;
                pFL.Name         = pFC.AliasName;
                ILayerEffects pLE = pFL as ILayerEffects;
                if (pLE.SupportsTransparency)
                {
                    pLE.Transparency = 60;//设置图层透明
                }
                axMapControlR.AddLayer(pFL);
            }
        }
Example #22
0
        private void Annotation()
        {
            string           fieldname    = cbxField.SelectedItem.ToString();
            IFeatureLayer    featureLayer = getlayerbyname(cbxLayer.SelectedItem.ToString());
            IGeoFeatureLayer pGeoFeatLyr  = featureLayer as IGeoFeatureLayer;

            stdole.IFontDisp pFont = new stdole.StdFontClass() as stdole.IFontDisp;
            pFont.Name = comboBox2.SelectedItem.ToString();
            ITextSymbol pTextSymbol = new TextSymbolClass();

            pTextSymbol.Size = Convert.ToInt16(comboBox3.SelectedItem.ToString());
            pTextSymbol.Font = pFont;
            if (pRGB.NullColor)
            {
                pRGB.Red   = 255;
                pRGB.Blue  = 0;
                pRGB.Green = 0;
            }
            pTextSymbol.Color = pRGB;
            IAnnotateLayerPropertiesCollection pAnnoProps = pGeoFeatLyr.AnnotationProperties;

            pAnnoProps.Clear();
            ILabelEngineLayerProperties pLabelEngine = new LabelEngineLayerPropertiesClass();

            pLabelEngine.Symbol     = pTextSymbol;
            pLabelEngine.Expression = "[" + fieldname + "]";
            IAnnotateLayerProperties pAnnoLayerProps = pLabelEngine as IAnnotateLayerProperties;

            pAnnoLayerProps.DisplayAnnotation  = true;
            pAnnoLayerProps.LabelWhichFeatures = esriLabelWhichFeatures.esriAllFeatures;
            pAnnoProps.Add(pAnnoLayerProps);
            pGeoFeatLyr.DisplayField      = fieldname;
            pGeoFeatLyr.DisplayAnnotation = true;
            IActiveView pActiveView = pMap as IActiveView;

            pActiveView.PartialRefresh(esriViewDrawPhase.esriViewGraphics, null, null);
        }
Example #23
0
        private void btnSetLabel_Click(object sender, EventArgs e)
        {
            IList <string>   fdLst = new List <string>();
            IFeatureClass    pFC   = null;
            IGeoFeatureLayer pGFL  = null;

            for (int i = 0; i < axMapControlR.LayerCount; i++)
            {
                if (axMapControlR.get_Layer(i).Name == "元数据地图")
                {
                    pFC  = (axMapControlR.get_Layer(i) as IFeatureLayer).FeatureClass;
                    pGFL = axMapControlR.get_Layer(i) as IGeoFeatureLayer;
                }
            }
            if (pFC == null)
            {
                return;
            }
            for (int i = 0; i < pFC.Fields.FieldCount; i++)
            {
                IField pField = pFC.Fields.get_Field(i);
                fdLst.Add(pField.Name);
            }
            frmMetaMapSetLabel fmMMSL = new frmMetaMapSetLabel(fdLst);

            if (fmMMSL.ShowDialog(this) == DialogResult.OK && axMapControlR.LayerCount > 0)
            {
                ILabelEngineLayerProperties pLELP = new LabelEngineLayerPropertiesClass();
                pLELP.Expression = fmMMSL.LabelExpression;
                IAnnotateLayerPropertiesCollection pALPC = pGFL.AnnotationProperties;
                pALPC.Clear();
                pALPC.Add(pLELP as IAnnotateLayerProperties);
                pGFL.DisplayAnnotation = true;
                axMapControlR.Refresh();
            }
        }
Example #24
0
        /// <summary>
        /// 对生成的各图层进行符号、标注设置
        /// </summary>
        /// <param name="impfilepath">导入符号mxd文件路径</param>
        /// <param name="passpoint">生成的点图层</param>
        /// <param name="passline">生成的线图层</param>
        public void ImpSymbolFromFile(string impfilepath, ILayer passpoint, ILayer passline)
        {
            IMapDocument pMapDocument = new MapDocumentClass();

            pMapDocument.Open(impfilepath, null);
            IMap pMap = pMapDocument.Map[0];

            for (int i = 0; i < pMap.LayerCount; i++)
            {
                ILayer pLayerSymbol = pMap.get_Layer(i);
                if (pLayerSymbol is IFeatureLayer && pLayerSymbol.Name.Contains("point"))
                {
                    IFeatureLayer    pFLayerSymbol   = pLayerSymbol as IFeatureLayer;
                    IGeoFeatureLayer pGFLayerSymbol  = pFLayerSymbol as IGeoFeatureLayer;
                    IFeatureLayer    pFPasspointWait = passpoint as IFeatureLayer;
                    IGeoFeatureLayer pGPasspointWait = pFPasspointWait as IGeoFeatureLayer;
                    if (pGFLayerSymbol != null)
                    {
                        pGPasspointWait.Renderer = pGFLayerSymbol.Renderer;

                        IAnnotateLayerProperties pAnnoLayerP; // = new LabelEngineLayerPropertiesClass();//渲染图层的符号图层标注
                        IElementCollection       PELECOLL;    //queryitem的参数,用不到
                        IElementCollection       pelecoll;    //同上
                        pGFLayerSymbol.AnnotationProperties.QueryItem(0, out pAnnoLayerP, out PELECOLL, out pelecoll);
                        ILabelEngineLayerProperties pLabelEenLayPro = pAnnoLayerP as ILabelEngineLayerProperties;


                        IFontDisp   pFont       = new StdFontClass() as IFontDisp;
                        ITextSymbol pTextSymbol = new TextSymbolClass();
                        pTextSymbol.Color   = pLabelEenLayPro.Symbol.Color;
                        pFont.Bold          = pLabelEenLayPro.Symbol.Font.Bold;
                        pFont.Italic        = pLabelEenLayPro.Symbol.Font.Italic;
                        pFont.Strikethrough = pLabelEenLayPro.Symbol.Font.Strikethrough;
                        pFont.Underline     = pLabelEenLayPro.Symbol.Font.Underline;
                        pFont.Name          = pLabelEenLayPro.Symbol.Font.Name;
                        pFont.Size          = pLabelEenLayPro.Symbol.Font.Size;
                        pTextSymbol.Font    = pFont;

                        pGPasspointWait.AnnotationProperties.Clear();
                        ILabelEngineLayerProperties pLabelWaitLayPro = new LabelEngineLayerPropertiesClass();//设置待渲染图层的标注
                        pLabelWaitLayPro.Expression = pLabelEenLayPro.Expression;
                        pLabelWaitLayPro.Symbol     = pTextSymbol;

                        IAnnotateLayerProperties pAnnLayProWait = pLabelWaitLayPro as IAnnotateLayerProperties;//新生成的符号图层设置标注
                        pAnnLayProWait.DisplayAnnotation  = true;
                        pAnnLayProWait.FeatureLayer       = pGPasspointWait;
                        pAnnLayProWait.LabelWhichFeatures = esriLabelWhichFeatures.esriVisibleFeatures;
                        pAnnLayProWait.WhereClause        = "";
                        pGPasspointWait.AnnotationProperties.Add(pAnnLayProWait);
                        pGPasspointWait.DisplayAnnotation = true;
                    }
                }
                else if (pLayerSymbol is IFeatureLayer && pLayerSymbol.Name.Contains("line"))
                {
                    IFeatureLayer    pFLayerSymbol   = pLayerSymbol as IFeatureLayer;
                    IGeoFeatureLayer pGFLayerSymbol  = pFLayerSymbol as IGeoFeatureLayer;
                    IFeatureLayer    pFPasspointWait = passline as IFeatureLayer;
                    IGeoFeatureLayer pGPasspointWait = pFPasspointWait as IGeoFeatureLayer;
                    if (pGFLayerSymbol != null)
                    {
                        pGPasspointWait.Renderer = pGFLayerSymbol.Renderer;

                        IAnnotateLayerProperties pAnnoLayerP = new LabelEngineLayerPropertiesClass(); //符号图层标注
                        IElementCollection       PELECOLL;                                            //queryitem的参数,用不到
                        IElementCollection       pelecoll;                                            //同上
                        pGFLayerSymbol.AnnotationProperties.QueryItem(0, out pAnnoLayerP, out PELECOLL, out pelecoll);
                        ILabelEngineLayerProperties pLabelEenLayPro = pAnnoLayerP as ILabelEngineLayerProperties;

                        IFontDisp   pFont       = new StdFontClass() as IFontDisp;
                        ITextSymbol pTextSymbol = new TextSymbolClass();
                        pTextSymbol.Color   = pLabelEenLayPro.Symbol.Color;
                        pFont.Bold          = pLabelEenLayPro.Symbol.Font.Bold;
                        pFont.Italic        = pLabelEenLayPro.Symbol.Font.Italic;
                        pFont.Strikethrough = pLabelEenLayPro.Symbol.Font.Strikethrough;
                        pFont.Underline     = pLabelEenLayPro.Symbol.Font.Underline;
                        pFont.Name          = pLabelEenLayPro.Symbol.Font.Name;
                        pFont.Size          = pLabelEenLayPro.Symbol.Font.Size;
                        pTextSymbol.Font    = pFont;

                        pGPasspointWait.AnnotationProperties.Clear();
                        ILabelEngineLayerProperties pLabelWaitLayPro = new LabelEngineLayerPropertiesClass();//设置待渲染图层的标注
                        pLabelWaitLayPro.Expression = pLabelEenLayPro.Expression;
                        pLabelWaitLayPro.Symbol     = pTextSymbol;

                        IAnnotateLayerProperties pAnnLayProWait = pLabelWaitLayPro as IAnnotateLayerProperties;//新生成的符号图层设置标注
                        pAnnLayProWait.DisplayAnnotation  = true;
                        pAnnLayProWait.FeatureLayer       = pGPasspointWait;
                        pAnnLayProWait.LabelWhichFeatures = esriLabelWhichFeatures.esriVisibleFeatures;
                        pAnnLayProWait.WhereClause        = "";
                        pGPasspointWait.AnnotationProperties.Add(pAnnLayProWait);
                        pGPasspointWait.DisplayAnnotation = true;
                    }
                }
            }
            m_pTOCCtl.SetBuddyControl(m_pMapCtl);
            m_pTOCCtl.ActiveView.Refresh();
            m_pMapCtl.ActiveView.Refresh();
        }
Example #25
0
        private IFeatureClass CreateFeatureClass(IFeatureDataset featureDataset,TableStructureNode tableStructureNode, FeatureCodeNode featureCodeNode)
        {
            try
            {
                if (featureDataset != null)
                {
                    IFeatureClassDescription fcDesc = new FeatureClassDescriptionClass();
                    IObjectClassDescription ocDesc = (IObjectClassDescription)fcDesc;

                    ///�������ݱ��ֶ�
                    IFieldChecker fieldChecker = new FieldCheckerClass();
                    IEnumFieldError enumFieldError = null;
                    IFields validatedFields = CreateFileds(tableStructureNode, featureCodeNode);
                    ///�ֶ���Ϣ��֤
                    IFields fixFields = null;
                    fieldChecker.ValidateWorkspace = featureDataset.Workspace;
                    fieldChecker.Validate(validatedFields, out enumFieldError, out fixFields);

                    ////����FeatureClass
                    IFeatureClass featureClass = null;
                    if (tableStructureNode.IsGeometryTable)
                    {
                        ////������ע��FeatureClass
                        if (featureCodeNode.GeometryType != "")
                        {
                            featureClass = featureDataset.CreateFeatureClass(featureCodeNode.TableName,
                               fixFields, ocDesc.InstanceCLSID, ocDesc.ClassExtensionCLSID,
                               esriFeatureType.esriFTSimple, fcDesc.ShapeFieldName, "");
                        }
                        else
                        {
                            ///����ע��
                            IFormattedTextSymbol pTxtSymbo=new TextSymbolClass();

                            IFeatureWorkspaceAnno pFeatureWorkspaceAnno = this.m_pIDataset.Workspace as IFeatureWorkspaceAnno;

                            IGraphicsLayerScale pGraphSacle = new GraphicsLayerScaleClass();
                            pGraphSacle.Units = ESRI.ArcGIS.esriSystem.esriUnits.esriFeet;
                            //pGraphSacle.ReferenceScale=1000;

                            ISymbolCollection pSymbolCollection = new SymbolCollectionClass();

                            IAnnotateLayerProperties pAnnoLayerProp = new LabelEngineLayerPropertiesClass();
                            pAnnoLayerProp.FeatureLinked = true;
                            pAnnoLayerProp.CreateUnplacedElements = false;
                            pAnnoLayerProp.DisplayAnnotation = true;
                            pAnnoLayerProp.UseOutput = true;

                            IAnnotationExpressionEngine pAnnoExpressionEngine =new AnnotationVBScriptEngineClass();
                            ILabelEngineLayerProperties pLabelEngineLayerProperties = pAnnoLayerProp as ILabelEngineLayerProperties;
                            pLabelEngineLayerProperties.ExpressionParser = pAnnoExpressionEngine;
                            pLabelEngineLayerProperties.Expression = "[DESCRIPTION]";
                            pLabelEngineLayerProperties.IsExpressionSimple = true;
                            pLabelEngineLayerProperties.Offset = 0;
                            pLabelEngineLayerProperties.SymbolID = 0;
                            pLabelEngineLayerProperties.Symbol = pTxtSymbo;

                            IAnnotateLayerTransformationProperties pAnnoLayerTransProp = pAnnoLayerProp as IAnnotateLayerTransformationProperties;
                            pAnnoLayerTransProp.ReferenceScale=200;
                            pAnnoLayerTransProp.Units= ESRI.ArcGIS.esriSystem.esriUnits.esriFeet;
                            pAnnoLayerTransProp.ScaleRatio=1;

                            IAnnotateLayerPropertiesCollection pAnnoLayerProptyCollection =new AnnotateLayerPropertiesCollectionClass();
                           pAnnoLayerProptyCollection.Add(pAnnoLayerProp);

                           featureClass= pFeatureWorkspaceAnno.CreateAnnotationClass(featureCodeNode.TableName,fixFields,ocDesc.InstanceCLSID
                               ,ocDesc.ClassExtensionCLSID,fcDesc.ShapeFieldName,"",featureDataset,null,
                               pAnnoLayerProptyCollection, pGraphSacle, pSymbolCollection,true);
                        }
                    }
                    else
                    {
                        ///�����ǿռ�����
                    }
                    return featureClass;
                }
                return null;
            }
            catch(Exception ex)
            {
                LogAPI.WriteErrorLog(ex);
                return null;
            }
        }
Example #26
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();
 }
Example #27
0
        private IFeatureClass CreateFeatureClass(IFeatureDataset featureDataset,TableStructureNode tableStructureNode, FeatureCodeNode featureCodeNode) 
        {
            try
            {
                if (featureDataset != null)
                {
                    IFeatureClassDescription fcDesc = new FeatureClassDescriptionClass();
                    IObjectClassDescription ocDesc = (IObjectClassDescription)fcDesc;
         
                    ///创建数据表字段
                    IFieldChecker fieldChecker = new FieldCheckerClass();
                    IEnumFieldError enumFieldError = null;
                    IFields validatedFields = CreateFileds(tableStructureNode, featureCodeNode);
                    ///字段信息验证
                    IFields fixFields = null;
                    fieldChecker.ValidateWorkspace = featureDataset.Workspace;
                    fieldChecker.Validate(validatedFields, out enumFieldError, out fixFields);

                    ////创建FeatureClass
                    IFeatureClass featureClass = null;
                    if (tableStructureNode.IsGeometryTable)
                    {
                        ////创建非注记FeatureClass
                        if (featureCodeNode.GeometryType != "")
                        {
                            featureClass = featureDataset.CreateFeatureClass(featureCodeNode.TableName,
                               fixFields, ocDesc.InstanceCLSID, ocDesc.ClassExtensionCLSID,
                               esriFeatureType.esriFTSimple, fcDesc.ShapeFieldName, "");
                        }
                        else
                        {
                            ///创建注记
                            IFormattedTextSymbol pTxtSymbo=new TextSymbolClass();

                            IFeatureWorkspaceAnno pFeatureWorkspaceAnno = this.m_pIDataset.Workspace as IFeatureWorkspaceAnno;

                            IGraphicsLayerScale pGraphSacle = new GraphicsLayerScaleClass();
                            pGraphSacle.Units = ESRI.ArcGIS.esriSystem.esriUnits.esriFeet;
                            //pGraphSacle.ReferenceScale=1000;


                            ISymbolCollection pSymbolCollection = new SymbolCollectionClass();

                            IAnnotateLayerProperties pAnnoLayerProp = new LabelEngineLayerPropertiesClass();
                            pAnnoLayerProp.FeatureLinked = true;
                            pAnnoLayerProp.CreateUnplacedElements = false;
                            pAnnoLayerProp.DisplayAnnotation = true;
                            pAnnoLayerProp.UseOutput = true;

                            IAnnotationExpressionEngine pAnnoExpressionEngine =new AnnotationVBScriptEngineClass();
                            ILabelEngineLayerProperties pLabelEngineLayerProperties = pAnnoLayerProp as ILabelEngineLayerProperties;
                            pLabelEngineLayerProperties.ExpressionParser = pAnnoExpressionEngine;
                            pLabelEngineLayerProperties.Expression = "[DESCRIPTION]";
                            pLabelEngineLayerProperties.IsExpressionSimple = true;
                            pLabelEngineLayerProperties.Offset = 0;
                            pLabelEngineLayerProperties.SymbolID = 0;
                            pLabelEngineLayerProperties.Symbol = pTxtSymbo;

                            IAnnotateLayerTransformationProperties pAnnoLayerTransProp = pAnnoLayerProp as IAnnotateLayerTransformationProperties;
                            pAnnoLayerTransProp.ReferenceScale=200;
                            pAnnoLayerTransProp.Units= ESRI.ArcGIS.esriSystem.esriUnits.esriFeet;
                            pAnnoLayerTransProp.ScaleRatio=1;

                            IAnnotateLayerPropertiesCollection pAnnoLayerProptyCollection =new AnnotateLayerPropertiesCollectionClass();
                           pAnnoLayerProptyCollection.Add(pAnnoLayerProp);

                           featureClass= pFeatureWorkspaceAnno.CreateAnnotationClass(featureCodeNode.TableName,fixFields,ocDesc.InstanceCLSID
                               ,ocDesc.ClassExtensionCLSID,fcDesc.ShapeFieldName,"",featureDataset,null,
                               pAnnoLayerProptyCollection, pGraphSacle, pSymbolCollection,true);
                        }
                    }
                    else
                    {
                        ///创建非空间数据
                    }
                    return featureClass;
                }
                return null;
            }
            catch(Exception ex)
            {
                Logger.WriteErrorLog(ex);
                return null;
            }
        }
        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);
        }
Example #29
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;
            }
        }
 /// <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;
 }
Example #31
0
        public IFeatureClass CreateStandardAnnotationClass(
            IFeatureWorkspace featureWorkspace,
            IFeatureDataset featureDataset,
            String className,
            ISpatialReference spatialReference,
            double referenceScale,
            esriUnits referenceScaleUnits,
            String configKeyword
            )
        {
            // Create an annotation class and provide it with a name.
            ILabelEngineLayerProperties labelEngineLayerProperties = new
                                                                     LabelEngineLayerPropertiesClass();
            IAnnotateLayerProperties annotateLayerProperties = (IAnnotateLayerProperties)
                                                               labelEngineLayerProperties;

            annotateLayerProperties.Class = className;

            // Get the symbol from the annotation class. Make any changes to its properties
            // here.
            ITextSymbol annotationTextSymbol = labelEngineLayerProperties.Symbol;
            ISymbol     annotationSymbol     = (ISymbol)annotationTextSymbol;

            // Create a symbol collection and add the default symbol from the
            // annotation class to the collection. Assign the resulting symbol ID
            // to the annotation class.
            ISymbolCollection  symbolCollection  = new SymbolCollectionClass();
            ISymbolCollection2 symbolCollection2 = (ISymbolCollection2)symbolCollection;
            ISymbolIdentifier2 symbolIdentifier2 = null;

            symbolCollection2.AddSymbol(annotationSymbol, className, out symbolIdentifier2);
            labelEngineLayerProperties.SymbolID = symbolIdentifier2.ID;

            // Add the annotation class to a collection.
            IAnnotateLayerPropertiesCollection annotateLayerPropsCollection = new
                                                                              AnnotateLayerPropertiesCollectionClass();

            annotateLayerPropsCollection.Add(annotateLayerProperties);

            // Create a graphics layer scale object.
            IGraphicsLayerScale graphicsLayerScale = new GraphicsLayerScaleClass();

            graphicsLayerScale.ReferenceScale = referenceScale;
            graphicsLayerScale.Units          = referenceScaleUnits;

            // Create the overposter properties for the standard label engine.
            IOverposterProperties overposterProperties = new BasicOverposterPropertiesClass()
            ;

            // Instantiate a class description object.
            //IObjectClassDescription ocDescription = new
            //    AnnotationFeatureClassDescriptionClass();
            //IFeatureClassDescription fcDescription = (IFeatureClassDescription)ocDescription;

            //// Get the shape field from the class description's required fields.
            //IFields requiredFields = ocDescription.RequiredFields;
            //int shapeFieldIndex = requiredFields.FindField(fcDescription.ShapeFieldName);
            //IField shapeField = requiredFields.get_Field(shapeFieldIndex);
            IFeatureLayer    layer           = (IFeatureLayer)mLayer;
            IFields          fields          = layer.FeatureClass.Fields;
            IField           shapeField      = fields.Field[fields.FindField(mField)];
            IGeometryDef     geometryDef     = shapeField.GeometryDef;
            IGeometryDefEdit geometryDefEdit = (IGeometryDefEdit)geometryDef;

            geometryDefEdit.SpatialReference_2 = spatialReference;

            // Create the annotation layer factory.
            IAnnotationLayerFactory annotationLayerFactory = new
                                                             FDOGraphicsLayerFactoryClass();

            // Create the annotation feature class and an annotation layer for it.
            IAnnotationLayer annotationLayer = annotationLayerFactory.CreateAnnotationLayer
                                                   (featureWorkspace, featureDataset, className, geometryDef, null,
                                                   annotateLayerPropsCollection, graphicsLayerScale, symbolCollection, false,
                                                   false, false, true, overposterProperties, configKeyword);

            // Get the feature class from the feature layer.
            IFeatureLayer featureLayer = (IFeatureLayer)annotationLayer;
            IFeatureClass featureClass = featureLayer.FeatureClass;

            return(featureClass);
        }
 /// <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 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;
 }
Example #34
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;
        }
Example #35
0
        /// <summary>
        /// 创建注记层
        /// </summary>
        /// <param name="strFeaClsName">注记层名称</param>
        /// <param name="destDataset">待创建的注记层所在的featuredataset</param>
        /// <param name="ipInputFields">注记层字段</param>
        public static IFeatureClass CreateAnnotation(IFeatureClass pInputCls, IFeatureDataset destDataset, IFields ipInputFields)
        {
            try
            {
                //要素类标识信息
                IObjectClassDescription ipObjectClassDesc = new AnnotationFeatureClassDescription();
                IFeatureClassDescription ipFeatClassDesc = (IFeatureClassDescription)ipObjectClassDesc;

                IAnnoClass pAnnoClass = pInputCls.Extension as IAnnoClass;
                double scale = pAnnoClass.ReferenceScale;

                IUID ipCLSID = ipObjectClassDesc.InstanceCLSID;
                ipCLSID.Value = "esriCore.AnnotationFeature";

                IUID ipExtCLSID = ipObjectClassDesc.ClassExtensionCLSID;
                ipExtCLSID.Value = "esriCore.AnnotationFeatureClassExtension";

                //IField ipField;
                IFields ipFields = ipObjectClassDesc.RequiredFields;
                IFieldsEdit ipFieldsEdit = (IFieldsEdit)ipFields;
                int numFields = ipInputFields.FieldCount;

                esriFieldType type;
                for (int i = 0; i < numFields; i++)
                {
                    IField ipField = ipInputFields.get_Field(i);
                    type = ipField.Type;
                    if (type != esriFieldType.esriFieldTypeOID && type != esriFieldType.esriFieldTypeGeometry)
                    {
                        string fldName = ipField.Name;
                        int fldIndex = ipFields.FindField(fldName);

                        if (fldIndex == -1)
                            ipFieldsEdit.AddField(ipField);
                    }
                }

                //工作空间
                IWorkspace ipWorkspace = destDataset.Workspace;
                IFeatureWorkspaceAnno ipFeatureWorkspaceAnno = (IFeatureWorkspaceAnno)ipWorkspace;

                //显示比例
                IGraphicsLayerScale ipGraphicsLayerScale = new GraphicsLayerScaleClass();
                ipGraphicsLayerScale.ReferenceScale = scale;
                ipGraphicsLayerScale.Units = pAnnoClass.ReferenceScaleUnits;

                //符号信息
                //' set up symbol collection
                ISymbolCollection pSymbolColl = new SymbolCollectionClass();

                ITextSymbol myTxtSym = new TextSymbolClass();
                //Set the font for myTxtSym
                stdole.IFontDisp myFont = new stdole.StdFontClass() as stdole.IFontDisp;
                IFont pFt = (IFont)myFont;
                pFt.Name = "Courier New";

                myTxtSym.Font = myFont;

                // Set the Color for myTxtSym to be Dark Red
                IRgbColor myColor = new RgbColorClass();
                myColor.Red = 150;
                myColor.Green = 0;
                myColor.Blue = 0;
                myTxtSym.Color = myColor;

                // Set other properties for myTxtSym
                myTxtSym.Angle = 0;
                myTxtSym.RightToLeft = false;
                myTxtSym.VerticalAlignment = esriTextVerticalAlignment.esriTVABaseline;
                myTxtSym.HorizontalAlignment = esriTextHorizontalAlignment.esriTHAFull;
                myTxtSym.Size = 9;

                ISymbol pSymbol = (ISymbol)myTxtSym;
                pSymbolColl.set_Symbol(0, pSymbol);

                //set up the annotation labeling properties including the expression
                IAnnotateLayerProperties pAnnoProps = new LabelEngineLayerPropertiesClass();
                pAnnoProps.FeatureLinked = true;
                pAnnoProps.AddUnplacedToGraphicsContainer = false;
                pAnnoProps.CreateUnplacedElements = true;
                pAnnoProps.DisplayAnnotation = true;
                pAnnoProps.UseOutput = true;

                ILabelEngineLayerProperties pLELayerProps = (ILabelEngineLayerProperties)pAnnoProps;
                IAnnotationExpressionEngine aAnnoVBScriptEngine = new AnnotationVBScriptEngineClass();
                pLELayerProps.ExpressionParser = aAnnoVBScriptEngine;
                pLELayerProps.Expression = "[DESCRIPTION]";
                pLELayerProps.IsExpressionSimple = true;
                pLELayerProps.Offset = 0;
                pLELayerProps.SymbolID = 0;
                pLELayerProps.Symbol = myTxtSym;

                IAnnotateLayerTransformationProperties pATP = (IAnnotateLayerTransformationProperties)pAnnoProps;
                double dRefScale = ipGraphicsLayerScale.ReferenceScale;
                pATP.ReferenceScale = dRefScale;
                pATP.Units = esriUnits.esriMeters;
                pATP.ScaleRatio = 1;

                IAnnotateLayerPropertiesCollection pAnnoPropsColl = new AnnotateLayerPropertiesCollectionClass();
                pAnnoPropsColl.Add(pAnnoProps);

                //' use the AnnotationFeatureClassDescription co - class to get the list of required fields and the default name of the shape field
                IObjectClassDescription pOCDesc = new AnnotationFeatureClassDescriptionClass();
                IFeatureClassDescription pFDesc = (IFeatureClassDescription)pOCDesc;

                IFields pReqFields = pOCDesc.RequiredFields;
                IUID pInstCLSID = pOCDesc.InstanceCLSID;
                IUID pExtCLSID = pOCDesc.ClassExtensionCLSID;
                string bsShapeFieldName = pFDesc.ShapeFieldName;

                IDataset pDs = (IDataset)pInputCls;

                //创建
                string bstName = ipFeatClassDesc.ShapeFieldName;
                IFeatureClass pOutFcls =
                    ipFeatureWorkspaceAnno.CreateAnnotationClass(pDs.Name, ipFields, pOCDesc.InstanceCLSID,
                                                                 pOCDesc.ClassExtensionCLSID, pInputCls.ShapeFieldName, "", destDataset, null, pAnnoPropsColl,
                                                                 ipGraphicsLayerScale, pSymbolColl, true);
                return pOutFcls;
            }
            catch(Exception exp)
            {
                Hy.Common.Utility.Log.OperationalLogManager.AppendMessage(exp.ToString());

                return null;
            }
            return null;
        }
Example #36
0
        /// <summary>
        /// 创建注记层
        /// </summary>
        /// <param name="strFeaClsName">注记层名称</param>
        /// <param name="destDataset">待创建的注记层所在的featuredataset</param>
        /// <param name="ipInputFields">注记层字段</param>
        public static IFeatureClass CreateAnnotation(IFeatureClass pInputCls, IFeatureDataset destDataset, IFields ipInputFields)
        {
            try
            {
                //要素类标识信息
                IObjectClassDescription  ipObjectClassDesc = new AnnotationFeatureClassDescription();
                IFeatureClassDescription ipFeatClassDesc   = (IFeatureClassDescription)ipObjectClassDesc;


                IAnnoClass pAnnoClass = pInputCls.Extension as IAnnoClass;
                double     scale      = pAnnoClass.ReferenceScale;


                IUID ipCLSID = ipObjectClassDesc.InstanceCLSID;
                ipCLSID.Value = "esriCore.AnnotationFeature";


                IUID ipExtCLSID = ipObjectClassDesc.ClassExtensionCLSID;
                ipExtCLSID.Value = "esriCore.AnnotationFeatureClassExtension";

                //IField ipField;
                IFields     ipFields     = ipObjectClassDesc.RequiredFields;
                IFieldsEdit ipFieldsEdit = (IFieldsEdit)ipFields;
                int         numFields    = ipInputFields.FieldCount;

                esriFieldType type;
                for (int i = 0; i < numFields; i++)
                {
                    IField ipField = ipInputFields.get_Field(i);
                    type = ipField.Type;
                    if (type != esriFieldType.esriFieldTypeOID && type != esriFieldType.esriFieldTypeGeometry)
                    {
                        string fldName  = ipField.Name;
                        int    fldIndex = ipFields.FindField(fldName);

                        if (fldIndex == -1)
                        {
                            ipFieldsEdit.AddField(ipField);
                        }
                    }
                }

                //工作空间
                IWorkspace            ipWorkspace            = destDataset.Workspace;
                IFeatureWorkspaceAnno ipFeatureWorkspaceAnno = (IFeatureWorkspaceAnno)ipWorkspace;


                //显示比例
                IGraphicsLayerScale ipGraphicsLayerScale = new GraphicsLayerScaleClass();
                ipGraphicsLayerScale.ReferenceScale = scale;
                ipGraphicsLayerScale.Units          = pAnnoClass.ReferenceScaleUnits;

                //符号信息
                //' set up symbol collection
                ISymbolCollection pSymbolColl = new SymbolCollectionClass();

                ITextSymbol myTxtSym = new TextSymbolClass();
                //Set the font for myTxtSym
                stdole.IFontDisp myFont = new stdole.StdFontClass() as stdole.IFontDisp;
                IFont            pFt    = (IFont)myFont;
                pFt.Name = "Courier New";

                myTxtSym.Font = myFont;

                // Set the Color for myTxtSym to be Dark Red
                IRgbColor myColor = new RgbColorClass();
                myColor.Red    = 150;
                myColor.Green  = 0;
                myColor.Blue   = 0;
                myTxtSym.Color = myColor;

                // Set other properties for myTxtSym
                myTxtSym.Angle               = 0;
                myTxtSym.RightToLeft         = false;
                myTxtSym.VerticalAlignment   = esriTextVerticalAlignment.esriTVABaseline;
                myTxtSym.HorizontalAlignment = esriTextHorizontalAlignment.esriTHAFull;
                myTxtSym.Size = 9;

                ISymbol pSymbol = (ISymbol)myTxtSym;
                pSymbolColl.set_Symbol(0, pSymbol);


                //set up the annotation labeling properties including the expression
                IAnnotateLayerProperties pAnnoProps = new LabelEngineLayerPropertiesClass();
                pAnnoProps.FeatureLinked = true;
                pAnnoProps.AddUnplacedToGraphicsContainer = false;
                pAnnoProps.CreateUnplacedElements         = true;
                pAnnoProps.DisplayAnnotation = true;
                pAnnoProps.UseOutput         = true;

                ILabelEngineLayerProperties pLELayerProps       = (ILabelEngineLayerProperties)pAnnoProps;
                IAnnotationExpressionEngine aAnnoVBScriptEngine = new AnnotationVBScriptEngineClass();
                pLELayerProps.ExpressionParser   = aAnnoVBScriptEngine;
                pLELayerProps.Expression         = "[DESCRIPTION]";
                pLELayerProps.IsExpressionSimple = true;
                pLELayerProps.Offset             = 0;
                pLELayerProps.SymbolID           = 0;
                pLELayerProps.Symbol             = myTxtSym;

                IAnnotateLayerTransformationProperties pATP = (IAnnotateLayerTransformationProperties)pAnnoProps;
                double dRefScale = ipGraphicsLayerScale.ReferenceScale;
                pATP.ReferenceScale = dRefScale;
                pATP.Units          = esriUnits.esriMeters;
                pATP.ScaleRatio     = 1;

                IAnnotateLayerPropertiesCollection pAnnoPropsColl = new AnnotateLayerPropertiesCollectionClass();
                pAnnoPropsColl.Add(pAnnoProps);

                //' use the AnnotationFeatureClassDescription co - class to get the list of required fields and the default name of the shape field
                IObjectClassDescription  pOCDesc = new AnnotationFeatureClassDescriptionClass();
                IFeatureClassDescription pFDesc  = (IFeatureClassDescription)pOCDesc;

                IFields pReqFields       = pOCDesc.RequiredFields;
                IUID    pInstCLSID       = pOCDesc.InstanceCLSID;
                IUID    pExtCLSID        = pOCDesc.ClassExtensionCLSID;
                string  bsShapeFieldName = pFDesc.ShapeFieldName;

                IDataset pDs = (IDataset)pInputCls;

                //创建
                string        bstName  = ipFeatClassDesc.ShapeFieldName;
                IFeatureClass pOutFcls =
                    ipFeatureWorkspaceAnno.CreateAnnotationClass(pDs.Name, ipFields, pOCDesc.InstanceCLSID,
                                                                 pOCDesc.ClassExtensionCLSID, pInputCls.ShapeFieldName, "", destDataset, null, pAnnoPropsColl,
                                                                 ipGraphicsLayerScale, pSymbolColl, true);
                return(pOutFcls);
            }
            catch (Exception exp)
            {
                Hy.Common.Utility.Log.OperationalLogManager.AppendMessage(exp.ToString());

                return(null);
            }
            return(null);
        }
Example #37
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();
        }
Example #38
0
        public void CreateAnnoFeatureClass(IFeatureDataset featureDs, string strObjNum)
        {
            //更换注记字体 用两个重要的属性
            //IAnnotateLayerPropertiesCollection,ISymbolCollection
            IFeatureWorkspace pFeatureWs = pAccessWorkSpace;

            IFeatureWorkspaceAnno pFeatureWorkspaceAnno;

            pFeatureWorkspaceAnno = (IFeatureWorkspaceAnno)pFeatureWs;

            //说明:要控制图层中的字体必须在图层建立的时候定义好字体
            ITextSymbol pTextSymbol, tTextSymbol;

            pTextSymbol = PublicFun.makeTextSymbol("Arial", 16);
            tTextSymbol = PublicFun.makeTextSymbol("宋体", 50);
            /////textsymbol

            IGraphicsLayerScale pGLS;

            pGLS                = new GraphicsLayerScaleClass();
            pGLS.Units          = esriUnits.esriMeters;
            pGLS.ReferenceScale = 500;

            IAnnotateLayerProperties pAnnoProps = new LabelEngineLayerPropertiesClass();

            pAnnoProps.FeatureLinked = true;
            pAnnoProps.AddUnplacedToGraphicsContainer = false;
            pAnnoProps.CreateUnplacedElements         = false;
            pAnnoProps.DisplayAnnotation = true;
            pAnnoProps.UseOutput         = true;

            IAnnotationExpressionEngine aAnnoVBScriptEngine;

            aAnnoVBScriptEngine = new AnnotationVBScriptEngineClass();

            ILabelEngineLayerProperties pLELayerProps;

            pLELayerProps = (ILabelEngineLayerProperties)pAnnoProps;
            pLELayerProps.ExpressionParser = aAnnoVBScriptEngine;
            pLELayerProps.Expression       = "[DESCRIPTION]";

            pLELayerProps.IsExpressionSimple = true;
            pLELayerProps.Offset             = 0;
            pLELayerProps.SymbolID           = 0;
            pLELayerProps.Symbol             = pTextSymbol;

            IAnnotateLayerTransformationProperties pATP;

            pATP = (IAnnotateLayerTransformationProperties)pAnnoProps;
            pATP.ReferenceScale = pGLS.ReferenceScale;
            pATP.Units          = esriUnits.esriMeters;
            pATP.ScaleRatio     = 300;

            IAnnotateLayerPropertiesCollection pAnnoPropsColl;

            pAnnoPropsColl = new AnnotateLayerPropertiesCollectionClass();
            pAnnoPropsColl.Add(pAnnoProps);

            IObjectClassDescription pOCDesc;

            pOCDesc = new AnnotationFeatureClassDescriptionClass();

            IFeatureClassDescription pFDesc;

            pFDesc = (IFeatureClassDescription)pOCDesc;

            ISymbolCollection pSymbolColl;

            pSymbolColl = new SymbolCollectionClass();
            pSymbolColl.set_Symbol(0, (ISymbol)pTextSymbol);
            pSymbolColl.set_Symbol(2, (ISymbol)tTextSymbol);

            IFields pFields = pOCDesc.RequiredFields;

            //添加注记类的附加字段
            this.addAnnoField(ref pFields, strObjNum);

            string          featureName = TableName;                    //注记要素集的名字
            IFeatureDataset pFeatureDataset;

            if (featureDs == null)
            {
                pFeatureDataset = pFeatureWs.CreateFeatureDataset(featureName + "_Anno", sPR);
            }
            else
            {
                pFeatureDataset = featureDs;
            }

            pFeatureWorkspaceAnno.CreateAnnotationClass(featureName, pFields, pOCDesc.InstanceCLSID,
                                                        pOCDesc.ClassExtensionCLSID, pFDesc.ShapeFieldName, "",
                                                        pFeatureDataset, null, pAnnoPropsColl, pGLS, pSymbolColl, 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;
        }