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

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

结果如下图所示:

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

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

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

  开发环境:vs2013 framework4

代码如下:

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

  #region 构造函数
public FeaturesShow(IFeatureDataset featureDataset)
{
InitializeComponent();
m_featureDataset = featureDataset;
IFeature feature = m_featureDataset.GetNextFeature();
for (int i = ; i < feature.GetFieldCount(); i++)
{
string fieldname = feature.GetFieldName(i);
this.listBox1.Items.Add(fieldname);
}
//默认字体
FontDlg.Font = new Font("Calibri", , FontStyle.Bold);
FontDlg.Color = Color.Chartreuse;
}
#endregion

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

         private void 文本绘制ToolStripMenuItem_Click(object sender, EventArgs e)
{
if (mapControl1.ActiveView.CurrentLayer == null)
return;
IFeatureLayer featurelayer = mapControl1.ActiveView.CurrentLayer as IFeatureLayer;
if (featurelayer == null)
return; //清除图上已绘制的元素
mapControl1.ActiveView.GraphicsContainer.DeleteAllElements();
//获得要读取的数据,传入子窗体
IFeatureDataset featureDataset = featurelayer.FeatureClass.GetFeatureDataset();
FeaturesShow frm = new FeaturesShow(featureDataset);
frm.ShowDialog(); //通过窗口来选择需要展示在图上的特征值
if (frm.DialogResult == DialogResult.OK)
{
//符号设置
FontDialog m_FontDlg = frm.m_FontDlg;
ITextSymbol textSymbol = new TextSymbol();
textSymbol.Color = m_FontDlg.Color;
textSymbol.Font = m_FontDlg.Font;
textSymbol.Size = m_FontDlg.Font.Size; int m_FeatureCount = frm.m_FeatureCount;
string[] m_Fieldname=frm.m_Fieldname;
int[] index = new int[m_FeatureCount+];
IFields fields = featureDataset.GetFields();
index[] = ;
for (int i = ; i < m_FeatureCount+;i++ )
{
index[i] = fields.GetFieldIndex(m_Fieldname[i-]);
}
IFeature feature = featureDataset.GetFeature();
while (feature != null)
{
////取左上角坐标值
IPolygon polygon = new PIE.Geometry.Polygon();
polygon = feature.Geometry as IPolygon;
IPointCollection poly = polygon as IPointCollection;
IPoint point = poly.GetPoint();
//创建文本元素实例对象
ITextElement textElement = new PIE.Carto.TextElement();
textElement.Geometry = point as IGeometry;
textElement.Symbol = textSymbol; for(int i=;i<m_FeatureCount+;i++)
{
string strValue = "";
if (feature.IsValueNull(index[i]) == false)
{
strValue = m_Fieldname[i-] + ":" + feature.GetValue(index[i]).ToString() + "\r\n";
textElement.Text = textElement.Text+strValue;
}
}
if(textElement.Text!="")
{
string strID = fields.GetFieldName() + ":" + feature.GetValue(index[]).ToString() + "\r\n";
textElement.Text = strID + textElement.Text;
mapControl1.ActiveView.GraphicsContainer.AddElement(textElement);
}
feature = featureDataset.GetNextFeature();
}
mapControl1.PartialRefresh(ViewDrawPhaseType.ViewAll);
}
}

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

PIE属性表多字段的文本绘制的更多相关文章

  1. [一]class 文件浅析 .class文件格式详解 字段方法属性常量池字段 class文件属性表 数据类型 数据结构

    前言概述  本文旨在讲解class文件的整体结构信息,阅读本文后应该可以完整的了解class文件的格式以及各个部分的逻辑组成含义   class文件包含了java虚拟机指令集 和  符号表   以及若 ...

  2. 解析ArcGis的字段计算器(二)——有玄机的要素Geometry属性,在属性表标记重复点线面

    这里所说的重复是指完成重复的,不是叠在一起的两个或多个要素,这种应该叫做“压盖”或“重叠”.重复往往是在合并多Shpfile文件时不小心重复导入造成的. 这里提供一种可能的解决办法,数据无价,请备份! ...

  3. jQuery Validate 表单验证插件----通过name属性来关联字段来验证,改变默认的提示信息,将校验规则写到 js 代码中

    一.下载依赖包 网盘下载:https://yunpan.cn/cryvgGGAQ3DSW  访问密码 f224 二. 添加一个另外一个插件jquery.validate.messages_cn.js. ...

  4. 不允许修改SQLserver2008r2表中字段的属性问题

    SQLserver2008r2修改表中字段的属性时弹出 点击工具->选项,取消阻止保存要求重新创建表的更改

  5. Yii2给数据库表添加字段后对应模型无法识别到该属性的原因和解决办法

    Yii2给数据库表添加字段后对应模型无法识别到该属性的原因和解决办法 应为数据库表的结构被缓存了.删除runtime文件夹或者执行 //清理指定表结构缓存数据 Yii::$app->db-> ...

  6. KO ------- 表中字段名和实体类属性名不一致

    -----------------------siwuxie095 KO ------- 表中字段名和实体类属性名不一致 如果数据库表中的字段名和实体类的属性名不一致,那么在查询时, 相应字段的结果就 ...

  7. MyBatis实体属性与表的字段不对应的解决方案

    1.通过在查询的SQL语句中定义字段名的别名,让字段名的别名和实体类的属性名一致,这样就可以表的字段名和实体类的属性名一一对应上,这种方式是通过在SQL语句中定义别名来解决字段名和属性名的映射关系的. ...

  8. Dapper中数据表的字段(列)与实体属性不一致时,如何手动配置它们之间的映射?

    NET[C#]Dapper中数据表的字段(列)与实体属性不一致时,如何手动配置它们之间的映射? 问题描述 比如有如下的数据表结构:Person: person_id int first_name va ...

  9. Linux下修改MySQL数据表中字段属性

    一.修改某个表的字段类型及指定为空或非空 alter table 表名称 change 字段名称 字段名称 字段类型 [是否允许非空]; alter table 表名称 modify 字段名称 字段类 ...

随机推荐

  1. c#图片相关常用的方法及处理

    总结一下图片相关,常用的几个操作   一 创建Image对象 1. 手头上有一些图片文件,希望转换成 c# 中 Image对象,然后加以使用. public static System.Drawing ...

  2. C#中巧用Lambda表达式实现对象list进行截取

    场景 有一个对象的list,每个对象有唯一的属性Id,并且是从1递增,现在要根据此Id属性进行截取. 其中DataTreeNode 实现 Global.Instance.PrepareCompareD ...

  3. C#中对文件File常用操作方法的工具类

    场景 C#中File类的常用读取与写入文件方法的使用: https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article/details/99693983 注: 博客 ...

  4. 敏捷软件开发_设计原则<三>

    敏捷软件开发_设计原则 单一职责原则(single responsibilities principle,SRP) 原理:一个类应该只有一个变化 分离职责:如果不耦合的职责那么很简单,如果两个职责耦合 ...

  5. 【Gradle】Gradle入门

    Gradle入门 配置Gradle环境 安装之前确保已经安装配置好Java环境,要求JDK6以上,并且在环境变量里配置了JAVA_HOME,查看Java版本可以在终端输入如下命令: java -ver ...

  6. 【JavaWeb】JSTL标签库

    JSTL标签库 JSTL标准标签库: JSTL用于简化JSP开发,提高代码的可读性与可维护性: JSTL由SUN(Oracle)定义规范,由Apache Tomcat团队实现: 引用JSTL核心库 核 ...

  7. 030.[转] sql事务特性

    sql事务特性简介 pphh发布于2018年10月5日 Sql事务有原子性.一致性.隔离性.持久性四个基本特性,要实现完全的ACID事务,是以牺牲事务的吞吐性能作为代价的.在有些应用场景中,通过分析业 ...

  8. [20190510]快速建立执行脚本.txt

    [20190510]快速建立执行脚本.txt --//上午在测试建立表空间备份时,浪费一点点时间.脚本如下:$ cat d10.sqldrop tablespace t01 including con ...

  9. Monkey小白入门篇

    一.monkey简介 中文名:猴子 职业:压力测试小工具 用途:对待测Android应用程序进行压力测试,测试app是否会crash Android官方描述: The Monkey is a prog ...

  10. 【转】理解并设计rest/restful风格接口

    网络应用程序,分为前端和后端两个部分.当前的发展趋势,就是前端设备层出不穷(手机.平板.桌面电脑.其他专用设备......). 因此,必须有一种统一的机制,方便不同的前端设备与后端进行通信.这导致AP ...