欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

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

程序员文章站 2023-11-23 11:34:22
最近研究了PIE SDK文本元素的绘制相关内容,因为在我们的开发中,希望可以做到在打开一个Shp文件后,读取到属性表的所有字段,然后可以选择一些需要的字段,将这些字段的所有要素值的文本,绘制到shp图中相应的要素位置上。 我主要是通过PIE的官方博文(https://www.cnblogs.com/ ......

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

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

结果如下图所示:

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

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

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

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

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

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

  开发环境: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         }

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