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(); }
/// <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; }
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); }
/// <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); }
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(); }
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); }
/// <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; }
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; }
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; } }
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(); }
private void AddLabel(string StrDisplayField) { pGeoFeatLayer.DisplayAnnotation = false; pMapControl.ActiveView.Refresh(); pGeoFeatLayer.DisplayField = StrDisplayField; IAnnotateLayerPropertiesCollection pAnnoProps = null; pAnnoProps = pGeoFeatLayer.AnnotationProperties; ILineLabelPosition pPosition = null; pPosition = new LineLabelPositionClass(); pPosition.Parallel = true; pPosition.Above = true; ILineLabelPlacementPriorities pPlacement = new LineLabelPlacementPrioritiesClass(); IBasicOverposterLayerProperties4 pBasic = new BasicOverposterLayerPropertiesClass(); pBasic.FeatureType = esriBasicOverposterFeatureType.esriOverposterPolyline; pBasic.LineLabelPlacementPriorities = pPlacement; pBasic.LineLabelPosition = pPosition; pBasic.BufferRatio = 0; pBasic.FeatureWeight = esriBasicOverposterWeight.esriHighWeight; if (this.rdbPerName.Checked) { pBasic.NumLabelsOption = esriBasicNumLabelsOption.esriOneLabelPerName; //每个名称标注一次 } else if (this.rdbPerPart.Checked) { pBasic.NumLabelsOption = esriBasicNumLabelsOption.esriOneLabelPerPart; //每个部分标注一次 } else { pBasic.NumLabelsOption = esriBasicNumLabelsOption.esriOneLabelPerShape; //每个地物标注一次 } //pBasic.NumLabelsOption = esriBasicNumLabelsOption.esriNoLabelRestrictions ; //pBasic.PlaceOnlyInsidePolygon = true; //仅在地物内部显示标注 deleted by chulili s20111018 界面上并没有这项设置,这句话应注释掉,否则像是错误 ILabelEngineLayerProperties pLabelEngine = null; pLabelEngine = new LabelEngineLayerPropertiesClass(); pLabelEngine.BasicOverposterLayerProperties = pBasic as IBasicOverposterLayerProperties; pLabelEngine.Expression = "[" + StrDisplayField + "]"; ITextSymbol pTextSymbol = null; pTextSymbol = pLabelEngine.Symbol; System.Drawing.Font pFont = null; pFont = LabelText.Font; IFontDisp pFontDisp = ESRI.ArcGIS.ADF.Converter.ToStdFont(pFont); pTextSymbol.Font = pFontDisp; IRgbColor pColor = new RgbColorClass(); pColor.Red = Convert.ToInt32(LabelText.ForeColor.R); pColor.Green = Convert.ToInt32(LabelText.ForeColor.G); pColor.Blue = Convert.ToInt32(LabelText.ForeColor.B); pTextSymbol.Color = pColor as IColor; pLabelEngine.Symbol = pTextSymbol; IAnnotateLayerProperties pAnnoLayerProps = null; pAnnoLayerProps = pLabelEngine as IAnnotateLayerProperties; pAnnoLayerProps.LabelWhichFeatures = esriLabelWhichFeatures.esriAllFeatures; //最大\最小比例尺 try { if (this.txtMaxLabelScale.Text.Trim() != "") { pAnnoLayerProps.AnnotationMaximumScale = Convert.ToDouble(this.txtMaxLabelScale.Text); } if (this.txtMinLabelScale.Text.Trim() != "") { pAnnoLayerProps.AnnotationMinimumScale = Convert.ToDouble(this.txtMinLabelScale.Text); } } catch (Exception err) {} pAnnoProps.Clear(); pAnnoProps.Add(pAnnoLayerProps); pGeoFeatLayer.DisplayAnnotation = this.chkIsLabel.Checked; (pMapControl.Map as IActiveView).Refresh(); }
public void showAnnotationByScale() { IMap pMap = axMapControl.Map; IFeatureLayer pFeaturelayer = pMap.get_Layer(1) as IFeatureLayer; IGeoFeatureLayer pGeoFeatureLayer = pFeaturelayer as IGeoFeatureLayer; //创建标注集接口,可以对标注进行添加、删除、查询、排序等操作 IAnnotateLayerPropertiesCollection pAnnotateLayerPropertiesCollection = new AnnotateLayerPropertiesCollectionClass(); pAnnotateLayerPropertiesCollection = pGeoFeatureLayer.AnnotationProperties; pAnnotateLayerPropertiesCollection.Clear(); //创建标注的颜色 IRgbColor pRgbColor = new RgbColorClass(); pRgbColor.Red = 255; pRgbColor.Green = 0; pRgbColor.Blue = 0; //创建标注的字体样式 ITextSymbol pTextSymbol = new TextSymbolClass(); pTextSymbol.Color = pRgbColor; pTextSymbol.Size = 12; pTextSymbol.Font.Name = "宋体"; //定义 ILineLabelPosition接口,用来管理line features的标注属性,指定标注和线要素的位置关系 ILineLabelPosition pLineLabelPosition = new LineLabelPositionClass(); pLineLabelPosition.Parallel = false; pLineLabelPosition.Perpendicular = true; pLineLabelPosition.InLine = true; //定义 ILineLabelPlacementPriorities接口用来控制标注冲突 ILineLabelPlacementPriorities pLineLabelPlacementPriorities = new LineLabelPlacementPrioritiesClass(); pLineLabelPlacementPriorities.AboveStart = 5; pLineLabelPlacementPriorities.BelowAfter = 4; //定义 IBasicOverposterLayerProperties 接口实现 LineLabelPosition 和 LineLabelPlacementPriorities对象的控制 IBasicOverposterLayerProperties pBasicOverposterLayerProperties = new BasicOverposterLayerPropertiesClass(); pBasicOverposterLayerProperties.LineLabelPlacementPriorities = pLineLabelPlacementPriorities; pBasicOverposterLayerProperties.LineLabelPosition = pLineLabelPosition; pBasicOverposterLayerProperties.FeatureType = esriBasicOverposterFeatureType.esriOverposterPolygon; //创建标注对象 ILabelEngineLayerProperties pLabelEngineLayerProperties = new LabelEngineLayerPropertiesClass(); //设置标注符号 pLabelEngineLayerProperties.Symbol = pTextSymbol; pLabelEngineLayerProperties.BasicOverposterLayerProperties = pBasicOverposterLayerProperties; //声明标注的Expression是否为Simple pLabelEngineLayerProperties.IsExpressionSimple = true; //设置标注字段 pLabelEngineLayerProperties.Expression = "[DIQU]"; //定义IAnnotateLayerTransformationProperties 接口用来控制feature layer的display of dynamic labels IAnnotateLayerTransformationProperties pAnnotateLayerTransformationProperties = pLabelEngineLayerProperties as IAnnotateLayerTransformationProperties; //设置标注参考比例尺 pAnnotateLayerTransformationProperties.ReferenceScale = 500000; //定义IAnnotateLayerProperties接口,决定FeatureLayer动态标注信息 IAnnotateLayerProperties pAnnotateLayerProperties = pLabelEngineLayerProperties as IAnnotateLayerProperties; //设置显示标注最大比例尺 pAnnotateLayerProperties.AnnotationMaximumScale = 500000; //设置显示标注的最小比例 pAnnotateLayerProperties.AnnotationMinimumScale = 25000000; //决定要标注的要素 pAnnotateLayerProperties.WhereClause = "DIQU<>'宿州市'"; //将创建好的标注对象添加到标注集对象中 pAnnotateLayerPropertiesCollection.Add(pAnnotateLayerProperties); //声明标注是否显示 pGeoFeatureLayer.DisplayAnnotation = true; //刷新视图 this.axMapControl.Refresh(); }