当前位置: 移动技术网 > IT编程>开发语言>.net > PIE属性表多字段的文本绘制

PIE属性表多字段的文本绘制

2019年08月26日  | 移动技术网IT编程  | 我要评论

本人已死有事烧纸,黄山学院教务处,茅台酒介绍

  最近研究了pie sdk文本元素的绘制相关内容,因为在我们的开发中,希望可以做到在打开一个shp文件后,读取到属性表的所有字段,然后可以选择一些需要的字段,将这些字段的所有要素值的文本,绘制到shp图中相应的要素位置上。

  我主要是通过pie的官方博文(https://www.cnblogs.com/piesat/p/10172166.html)进行学习的,并在技术员姐姐的帮助下,最后成功的将文本绘制于图上。

结果如下图所示:

  先打开一张属性表字段不为空shp文件

  读取shp的属性表中的所有字段,选取需要绘制在图上的字段

  将所选的字段的值绘制到相应的要素的位置上

  开发环境:vs2013 framework4

代码如下:

  在子窗口的构造函数中,遍历当前shp文件属性表的所有字段,并设置默认好默认字体样式

 1  #region 构造函数
 2         public featuresshow(ifeaturedataset featuredataset)
 3         {
 4             initializecomponent();
 5             m_featuredataset = featuredataset;
 6             ifeature feature = m_featuredataset.getnextfeature();
 7             for (int i = 1; i < feature.getfieldcount(); i++)
 8             {
 9                 string fieldname = feature.getfieldname(i);
10                 this.listbox1.items.add(fieldname);
11             }
12             //默认字体
13             fontdlg.font = new font("calibri", 15, fontstyle.bold);
14             fontdlg.color = color.chartreuse;
15         }
16    #endregion

  点击了子窗体的确定后,返回得到已选择的字段名,和设置的字体样式,并在图上进行绘制

 1         private void 文本绘制toolstripmenuitem_click(object sender, eventargs e)
 2         {
 3             if (mapcontrol1.activeview.currentlayer == null)
 4                 return;
 5             ifeaturelayer featurelayer = mapcontrol1.activeview.currentlayer as ifeaturelayer;
 6             if (featurelayer == null)
 7                 return;
 8 
 9             //清除图上已绘制的元素
10             mapcontrol1.activeview.graphicscontainer.deleteallelements();
11             //获得要读取的数据,传入子窗体
12             ifeaturedataset featuredataset = featurelayer.featureclass.getfeaturedataset();
13             featuresshow frm = new featuresshow(featuredataset);
14             frm.showdialog();       //通过窗口来选择需要展示在图上的特征值
15             if (frm.dialogresult == dialogresult.ok)
16             {
17                 //符号设置
18                 fontdialog m_fontdlg = frm.m_fontdlg;
19                 itextsymbol textsymbol = new textsymbol();                
20                 textsymbol.color = m_fontdlg.color;
21                 textsymbol.font = m_fontdlg.font;
22                 textsymbol.size = m_fontdlg.font.size;              
23                
24                 int m_featurecount = frm.m_featurecount;
25                 string[] m_fieldname=frm.m_fieldname;
26                 int[] index = new int[m_featurecount+1];               
27                 ifields fields = featuredataset.getfields();
28                 index[0] = 0;
29                 for (int i = 1; i < m_featurecount+1;i++ )
30                 {
31                     index[i] = fields.getfieldindex(m_fieldname[i-1]);
32                 }                                        
33                 ifeature feature = featuredataset.getfeature(0);
34                 while (feature != null)
35                 {
36                     ////取左上角坐标值
37                     ipolygon polygon = new pie.geometry.polygon();
38                     polygon = feature.geometry as ipolygon;
39                     ipointcollection poly = polygon as ipointcollection;
40                     ipoint point = poly.getpoint(0);
41                     //创建文本元素实例对象
42                     itextelement textelement = new pie.carto.textelement();
43                     textelement.geometry = point as igeometry;
44                     textelement.symbol = textsymbol;
45                     
46                     for(int i=1;i<m_featurecount+1;i++)
47                     {
48                         string strvalue = "";
49                         if (feature.isvaluenull(index[i]) == false)
50                         {
51                             strvalue = m_fieldname[i-1] + ":" + feature.getvalue(index[i]).tostring() + "\r\n";                                
52                             textelement.text = textelement.text+strvalue;                                                                
53                         }                                
54                     }
55                     if(textelement.text!="")
56                     {
57                         string strid = fields.getfieldname(0) + ":" + feature.getvalue(index[0]).tostring() + "\r\n";
58                         textelement.text = strid + textelement.text;
59                         mapcontrol1.activeview.graphicscontainer.addelement(textelement);
60                     }
61                     feature = featuredataset.getnextfeature();                                      
62                 }
63                 mapcontrol1.partialrefresh(viewdrawphasetype.viewall);
64             }
65         }

有帮助的话,记得点个赞支持一下哦~
也欢迎各位评论,指点,交流

如对本文有疑问,请在下面进行留言讨论,广大热心网友会与你互动!! 点击进行留言回复

相关文章:

验证码:
移动技术网