private void LabelHighWay(ILayer pLayer) { IGeoFeatureLayer pGeoFeatureLayer = pLayer as IGeoFeatureLayer; if (pGeoFeatureLayer != null) { IAnnotateLayerPropertiesCollection panAnnotateLayerPropertiesCollection = pGeoFeatureLayer.AnnotationProperties; panAnnotateLayerPropertiesCollection.Clear(); IRgbColor pColor = new RgbColor(); pColor.Red = 0; pColor.Blue = 0; pColor.Green = 0; IFormattedTextSymbol pTextSymbol = new TextSymbol(); //ITextSymbol pTextSymbol = new TextSymbol(); pTextSymbol.Background = CreateBalloonCallout() as ITextBackground; pTextSymbol.Color = pColor; pTextSymbol.Size = 10; pTextSymbol.Direction = esriTextDirection.esriTDHorizontal; Font font = new System.Drawing.Font("宋体", 10); pTextSymbol.Font = ESRI.ArcGIS.ADF.COMSupport.OLE.GetIFontDispFromFont(font) as stdole.IFontDisp; IBasicOverposterLayerProperties properties = new BasicOverposterLayerProperties(); IFeatureLayer pFeatureLayer = pLayer as IFeatureLayer; switch (pFeatureLayer.FeatureClass.ShapeType) { case esriGeometryType.esriGeometryPolygon: properties.FeatureType = esriBasicOverposterFeatureType.esriOverposterPolygon; break; case esriGeometryType.esriGeometryPoint: properties.FeatureType = esriBasicOverposterFeatureType.esriOverposterPoint; break; case esriGeometryType.esriGeometryPolyline: properties.FeatureType = esriBasicOverposterFeatureType.esriOverposterPolyline; break; } ILabelEngineLayerProperties2 properties2 = new LabelEngineLayerProperties() as ILabelEngineLayerProperties2; if (properties2 != null) { properties2.Expression = "[LXDM]"; properties2.Symbol = pTextSymbol; properties2.BasicOverposterLayerProperties = properties; IAnnotateLayerProperties p = properties2 as IAnnotateLayerProperties; // p.AnnotationMaximumScale = maxScale; // p.AnnotationMinimumScale = minScale; panAnnotateLayerPropertiesCollection.Add(p); } } if (pGeoFeatureLayer != null) { pGeoFeatureLayer.DisplayAnnotation = true; } _mxDocument.ActivatedView.Refresh(); }
/// <summary> /// 标注图层 /// </summary> /// <param name="pLayer">需要标注的图层</param> /// <param name="fontSize">字体大小</param> /// <param name="labelField">标注字段</param> /// <param name="minScale">显示标注的最小比例尺</param> /// <param name="maxScale">显示标注的最大比例尺</param> /// 注意:一问最后两个参数是比例尺的分母,所有minScale的值应该比maxSacle的值大 private void LabelLayer(ILayer pLayer, int fontSize, string labelField, double minScale, double maxScale) { IGeoFeatureLayer pGeoFeatureLayer = pLayer as IGeoFeatureLayer; if (pGeoFeatureLayer != null) { IAnnotateLayerPropertiesCollection panAnnotateLayerPropertiesCollection = pGeoFeatureLayer.AnnotationProperties; panAnnotateLayerPropertiesCollection.Clear(); IRgbColor pColor = new RgbColor(); pColor.Red = 0; pColor.Blue = 0; pColor.Green = 0; ITextSymbol pTextSymbol = new TextSymbol(); pTextSymbol.Color = pColor; pTextSymbol.Size = fontSize; Font font = new System.Drawing.Font("宋体", fontSize); pTextSymbol.Font = ESRI.ArcGIS.ADF.COMSupport.OLE.GetIFontDispFromFont(font) as stdole.IFontDisp; IBasicOverposterLayerProperties properties = new BasicOverposterLayerProperties(); IFeatureLayer pFeatureLayer = pLayer as IFeatureLayer; switch (pFeatureLayer.FeatureClass.ShapeType) { case esriGeometryType.esriGeometryPolygon: properties.FeatureType = esriBasicOverposterFeatureType.esriOverposterPolygon; break; case esriGeometryType.esriGeometryPoint: properties.FeatureType = esriBasicOverposterFeatureType.esriOverposterPoint; break; case esriGeometryType.esriGeometryPolyline: properties.FeatureType = esriBasicOverposterFeatureType.esriOverposterPolyline; break; } ILabelEngineLayerProperties2 properties2 = new LabelEngineLayerProperties() as ILabelEngineLayerProperties2; if (properties2 != null) { properties2.Expression = "[" + labelField + "]"; properties2.Symbol = pTextSymbol; properties2.BasicOverposterLayerProperties = properties; IAnnotateLayerProperties p = properties2 as IAnnotateLayerProperties; p.AnnotationMaximumScale = maxScale; p.AnnotationMinimumScale = minScale; panAnnotateLayerPropertiesCollection.Add(p); } } if (pGeoFeatureLayer != null) { pGeoFeatureLayer.DisplayAnnotation = true; } _mxDocument.ActiveView.Refresh(); }
private void btnLabel_Click(object sender, RoutedEventArgs e) { //The FeatureLayer for labelling IFeatureLayer labelLayer = this.m_map.Map.get_Layer(0) as IFeatureLayer; IGeoFeatureLayer gLabelLayer = labelLayer as IGeoFeatureLayer; IAnnotateLayerPropertiesCollection annoPropCol = gLabelLayer.AnnotationProperties; annoPropCol.Clear(); //ITextSymbol uasage ITextSymbol pTextSyl = new TextSymbol(); //Font fnt = new System.Drawing.Font("宋体", 10f, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point); //using stdole IFontDisp font = new StdFont() as IFontDisp; font.Size = 20; font.Italic = true; // pTextSyl.Size = 20; pTextSyl.Font = font; //IRgbColor fromColor = new RgbColor(255,0, 0); //ESRI.ArcGIS.Display.RgbColorClass() RgbColor color = new RgbColor(); color.Red = 255; color.Green = 0; color.Blue = 0; pTextSyl.Color = color; //Position IBasicOverposterLayerProperties pBasic = new BasicOverposterLayerProperties(); // if (labelLayer.FeatureClass.ShapeType == esriGeometryType.esriGeometryPoint) // { IPointPlacementPriorities pPlacementPoint = new PointPlacementPriorities(); pBasic.FeatureType = esriBasicOverposterFeatureType.esriOverposterPoint; pBasic.PointPlacementPriorities = pPlacementPoint; pBasic.PointPlacementOnTop = false; pBasic.PointPlacementMethod = esriOverposterPointPlacementMethod.esriOnTopPoint;// esriAroundPoint; // } //Point a field as a label ILabelEngineLayerProperties labelField = new LabelEngineLayerProperties() as ILabelEngineLayerProperties; labelField.Expression = "[name]"; //set postion labelField.BasicOverposterLayerProperties = pBasic; //set symbol labelField.Symbol = pTextSyl; IAnnotateLayerProperties annoProp = labelField as IAnnotateLayerProperties; annoPropCol.Add(annoProp); gLabelLayer.DisplayAnnotation = true; m_map.Refresh(); }
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 ShowLabel() { if (labelOn) { if (!this.cbxActiveMap.HasItems || !this.cbxFeatureLayer.HasItems || !this.cbxField.HasItems) { return; } if (annoPropCol != null) { annoPropCol.Clear(); } labelLayer = this.m_map.Map.get_Layer(this.cbxFeatureLayer.SelectedIndex) as IFeatureLayer; gLabelLayer = labelLayer as IGeoFeatureLayer; annoPropCol = gLabelLayer.AnnotationProperties; ITextSymbol pTextSyl = new TextSymbol(); IFontDisp font = new StdFont() as IFontDisp; font.Size = 20; font.Italic = true; pTextSyl.Font = font; RgbColor color = new RgbColor(); color.Red = LabelColor.R; color.Green = LabelColor.G; color.Blue = LabelColor.B; pTextSyl.Color = color; IBasicOverposterLayerProperties pBasic = new BasicOverposterLayerProperties(); IPointPlacementPriorities pPlacementPoint = new PointPlacementPriorities(); pBasic.FeatureType = esriBasicOverposterFeatureType.esriOverposterPoint; pBasic.PointPlacementPriorities = pPlacementPoint; pBasic.PointPlacementOnTop = false; pBasic.PointPlacementMethod = esriOverposterPointPlacementMethod.esriOnTopPoint; ILabelEngineLayerProperties labelField = new LabelEngineLayerProperties() as ILabelEngineLayerProperties; //IFeatureClass fClass = ((IFeatureLayer)labelLayer).FeatureClass; //IFields fields = fClass.Fields; //String fieldName = fields.get_Field(this.cbxField.SelectedIndex).Name; string fieldName = (string)cbxField.SelectedItem; //Console.WriteLine(fields.FindField(fieldName)); labelField.Expression = "[" + fieldName + "]"; //set postion labelField.BasicOverposterLayerProperties = pBasic; //set symbol labelField.Symbol = pTextSyl; IAnnotateLayerProperties annoProp = labelField as IAnnotateLayerProperties; annoPropCol.Add(annoProp); gLabelLayer.DisplayAnnotation = true; m_map.Refresh(); } }
private void LayerAnnotation(IGeoFeatureLayer pGeoFeatLyr, string annoField) { IGeoFeatureLayer pGeoFeatLayer; pGeoFeatLayer = pGeoFeatLyr; IAnnotateLayerPropertiesCollection pAnnoProps; pAnnoProps = pGeoFeatLyr.AnnotationProperties; pAnnoProps.Clear(); IAnnotateLayerProperties pAnnoLayerProps; ILabelEngineLayerProperties pLabelEngine; ILineLabelPosition pPosition; ILineLabelPlacementPriorities pPlacement; IBasicOverposterLayerProperties pBasic; //'定义标注的字体 ITextSymbol pTextSyl; pTextSyl = new TextSymbol(); stdole.IFontDisp pFont; pFont = new stdole.StdFont() as stdole.IFontDisp; pFont.Name = "仿宋"; pFont.Size = 12; pFont.Bold = true; pTextSyl.Font = pFont; IRgbColor pcolor = new RgbColorClass(); pcolor.Red = 255; pcolor.Green = 10; pcolor.Blue = 20; pTextSyl.Color = pcolor; pPosition = new LineLabelPosition(); pPosition.Parallel = false; pPosition.Perpendicular = true; pPlacement = new LineLabelPlacementPriorities(); pBasic = new BasicOverposterLayerProperties(); pBasic.FeatureType = esriBasicOverposterFeatureType.esriOverposterPolyline; pBasic.LineLabelPlacementPriorities = pPlacement; pBasic.LineLabelPosition = pPosition; pLabelEngine = new LabelEngineLayerProperties() as ILabelEngineLayerProperties; pLabelEngine.Symbol = pTextSyl; pLabelEngine.BasicOverposterLayerProperties = pBasic; //field的形式必须是[fieldname] pLabelEngine.Expression = annoField; pAnnoLayerProps = (IAnnotateLayerProperties)pLabelEngine; pAnnoProps.Add(pAnnoLayerProps); pGeoFeatLyr.DisplayAnnotation = true; axMapControl1.ActiveView.PartialRefresh(esriViewDrawPhase.esriViewGraphics, null, null); }
//标注图层 public void FunLabelFeatureLayer(IFeatureLayer pFeaturelayer, string sLableField, IRgbColor pRGB, ITextSymbol textSymbol) { //判断图层是否为空 if (pFeaturelayer == null) { return; } IGeoFeatureLayer pGeoFeaturelayer = (IGeoFeatureLayer)pFeaturelayer; IAnnotateLayerPropertiesCollection pAnnoLayerPropsCollection; pAnnoLayerPropsCollection = pGeoFeaturelayer.AnnotationProperties; pAnnoLayerPropsCollection.Clear(); //未指定字体颜色则默认为黑色 if (pRGB == null) { pRGB = new RgbColor(); pRGB.Red = 0; pRGB.Green = 0; pRGB.Blue = 0; } IBasicOverposterLayerProperties pBasicOverposterlayerProps = new BasicOverposterLayerProperties(); switch (pFeaturelayer.FeatureClass.ShapeType)//判断图层类型 { case esriGeometryType.esriGeometryPolygon: pBasicOverposterlayerProps.FeatureType = esriBasicOverposterFeatureType.esriOverposterPolygon; break; case esriGeometryType.esriGeometryPoint: pBasicOverposterlayerProps.FeatureType = esriBasicOverposterFeatureType.esriOverposterPoint; break; case esriGeometryType.esriGeometryPolyline: pBasicOverposterlayerProps.FeatureType = esriBasicOverposterFeatureType.esriOverposterPolyline; break; } ILabelEngineLayerProperties pLabelEnginelayerProps = new LabelEngineLayerProperties() as ILabelEngineLayerProperties; pLabelEnginelayerProps.Expression = "[" + sLableField + "]"; pLabelEnginelayerProps.Symbol = textSymbol; pLabelEnginelayerProps.BasicOverposterLayerProperties = pBasicOverposterlayerProps; pAnnoLayerPropsCollection.Add((IAnnotateLayerProperties)pLabelEnginelayerProps); pGeoFeaturelayer.DisplayAnnotation = true; }