添加Labels的两种方法

private void AddLabel(IFeatureLayer pLayer,string fieldname,ITextSymbol Symbol)
        {

            container.DeleteAllElements();

            IFeatureClass pClass = pLayer.FeatureClass;
            IFields pFields = pClass.Fields;
            int index =  pFields.FindField(fieldname);

            ITextElement pTextElement;
            IEnvelope pEnv = null;
            IElement pElement = null;
            //pTextElement.ScaleText = true;
            //pTextElement.Symbol = Symbol;

            IFeatureCursor pCursor = pClass.Search(null, false);
            IFeature pFeature;
            IPoint point;
            pFeature = pCursor.NextFeature();
            while (pFeature != null)
            {
                pEnv = pFeature.Extent;
                point = new PointClass();
                point.PutCoords((pEnv.XMin + pEnv.XMax) * 0.5, (pEnv.YMax + pEnv.YMin) * 0.5);

                pTextElement = new TextElementClass();
                pTextElement.Symbol = Symbol;
                pTextElement.ScaleText = true;
                pTextElement.Text = pFeature.get_Value(index).ToString();

                pElement = pTextElement as IElement;
                pElement.Geometry = point;

                container.AddElement(pElement, 0);
                pFeature = pCursor.NextFeature();
            }
            axMapControl1.Refresh();
        }
以上为第一种方法,另一种方法(利用提供的接口):
 private void Label(IFeatureLayer pLayer, string fieldname, ITextSymbol Symbol)
        {
            IGeoFeatureLayer pGeoFeaturelayer = pLayer as IGeoFeatureLayer;
            IAnnotateLayerPropertiesCollection annotLayercol = pGeoFeaturelayer.AnnotationProperties;
            annotLayercol.Clear();

            IBasicOverposterLayerProperties basicoverPost = new BasicOverposterLayerPropertiesClass();
            basicoverPost.BufferRatio = 0.2;
            switch (pLayer.FeatureClass.ShapeType)
            {
                case ESRI.ArcGIS.Geometry.esriGeometryType.esriGeometryPolygon:
                    basicoverPost.FeatureType = esriBasicOverposterFeatureType.esriOverposterPolygon;
                    break;
                case ESRI.ArcGIS.Geometry.esriGeometryType.esriGeometryPolyline:
                    basicoverPost.FeatureType = esriBasicOverposterFeatureType.esriOverposterPolyline;
                    break;
                case ESRI.ArcGIS.Geometry.esriGeometryType.esriGeometryPoint:
                    basicoverPost.FeatureType = esriBasicOverposterFeatureType.esriOverposterPoint;
                    break;

            }
            ILabelEngineLayerProperties pLabelEngine = new LabelEngineLayerPropertiesClass();
            pLabelEngine.Expression = "[" + fieldname + "]";
            pLabelEngine.Symbol = Symbol;
            pLabelEngine.BasicOverposterLayerProperties = basicoverPost;

            annotLayercol.Add((IAnnotateLayerProperties)pLabelEngine);
            pGeoFeaturelayer.DisplayAnnotation = true;
            axMapControl1.Refresh();
        }

最后调用:

  private void labelFeatureToolStripMenuItem_Click(object sender, EventArgs e)
        {
            //MessageBox.Show(PropertiesForm.FieldName);
            IFeatureLayer layer = axMapControl1.CustomProperty as IFeatureLayer;

            IGeoFeatureLayer pGeoFeaturelayer = layer as IGeoFeatureLayer;
            IAnnotateLayerPropertiesCollection annotLayercol = pGeoFeaturelayer.AnnotationProperties;

            string fieldname = PropertiesForm.FieldName;
            ITextSymbol symbol = PropertiesForm.TextSymbol;

            if (show == false)
            {

                //AddLabel(layer, "XZQMC", symbol);
                Label(layer, fieldname, symbol);
                show = true;
                MessageBox.Show("插入成功!");
            }

            else
            {
                annotLayercol.Clear();
                //container.DeleteAllElements();
                show = false;

                axMapControl1.Refresh();
            }
        }
时间: 2024-10-11 23:23:58

添加Labels的两种方法的相关文章

Android在布局中动态添加view的两种方法

一.说明 添加视图文件的时候有两种方式:1.通过在xml文件定义layout:2.java代码编写 二.前言说明 1.构造xml文件 2.LayoutInflater 提到addview,首先要了解一下LayoutInflater类.这个类最主要的功能就是实现将xml表述的layout转化为View的功能.为了便于理解,我们可以将它与findViewById()作一比较,二者都是实例化某一对象,不同的是findViewById()是找xml布局文件下的具体widget控件实例化,而LayoutI

关于MySQL中添加数据的两种方法

下面介绍两种执行SQL命令的方法,并作出相应地总结,第一种介绍一种常规用法,下面进行做简要地分析,首先我们需要执行打开数据库操作首先创建一个MySqlConnection对象,在其构造函数中传入一个连接字符串,然后执行Open操作打开数据库,在正确打开数据库之后我们才能进行相关的动作,在ExecuteSQL这个函数中, 我们执行MySqlCommand myCmd = new MySqlCommand(CmdString, conn),从而创建MySqlCommand对象,其中传入的两个参数分别

MySQL 添加用户设置两种方法

在mysql中root 最高的用户权限,权限分别为 SELECT,INSERT,UPDATE,DELETE,CREATE,DROP,下面简单说说是如何分别用户的. 1,为添加用户的的实例,用户名为dc3688,密码为123456,并授权用户可进行 SELECT, INSERT 和 UPDATE操作权限 [email protected]# mysql -u root -p Enter password:******* mysql> use mysql; Database changed INSE

view添加毛玻璃效果两种方法

第一种方法: UIBlurEffect *effect = [UIBlurEffect effectWithStyle:UIBlurEffectStyleLight]; UIVisualEffectView *effectView = [[UIVisualEffectView alloc] initWithEffect:effect]; effectView.alpha = 0.9; effectView.frame = CGRectMake(0, 0, bgImageView.frame.si

Android中动态添加View的两种方法

一.使用xml的方式: 1.LayoutInflater: 这个类可以把xml表述的Layout解析为View,从而可以使addView()方法添加View. 2.LayoutInflater与findViewById的区别: 两者都是实例化某一个对象,不同的是findViewById是通过找xml布局文件下的一个具体的widget控件进行实例化,而LayoutInflater是找res/layout 下的xml布局文件来实例化的. 3.使用方法: LayoutInflater inflater

给文本框添加边框的两种方法

1.使用文本框的边框属性 //利用文本框的边框属性给文本框添加边框 UITextField *field = [[UITextField alloc] init]; field.borderStyle = UITextBorderStyleBezel; /* 系统系统的边框风格种类 UITextBorderStyleNone, //无边框模式 UITextBorderStyleLine, //线 UITextBorderStyleBezel, //贝塞尔曲线 UITextBorderStyleR

zabbix使用自己编写脚本模板和zabbix自带模板两种方法添加对指定进程和端口的监控

zabbix使用自己编写脚本模板和zabbix自带模板两种方法添加对指定进程和端口的监控 1.自带监控模板进行os的监控 进入/usr/local/zabbix/etc/zabbix_agentd.conf 配置文件修改 LogRemoteCommands=1     ###开启脚本功能 Server=192.168.5.129     ##修改zabbix指向的服务器: 重启zabbix_agentd.zabbix_server服务 在配置-->主机-->添加主机--> 配置主机信息主

飞塔100D添加地址保留的两种方法

在一些情况下需要对mac地址分配一个固定的ip地址,比如某台服务器或者某台打印机,让其每次获取相同的ip地址,便于大家的访问,DP的dhcp服务器大都是放在防火墙上面的,下面就用两种方法来操作下,对某个mac地址分配固定的ip地址. 1.通过web页面进行添加 定位到系统管理--网络–dhcp服务器 2.通过ssh连接到防火墙进行添加 3.两种方式,通过手机端进行"忽略此网络"后重新连接均可以实现获取同一个ip地址.  

WebGL中添加天空盒的两种方法

天空盒 的添加可以让模型所在的场景非常漂亮,而其原理也是非常简单的,相信看完下面代码就可以明白了. 说到天空盒的两种方法,倒不如说是两种写法,分别用了纹理加载的两个方法:loadTexture和loadTextureCube. 特别注意:图片的顺序 [方法一] var imagePrefix = "images/"; var directions = ["posx", "negx", "posy", "negy&qu