PIE属性表多字段的文本绘制
最近研究了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属性表多字段的文本绘制的更多相关文章
- [一]class 文件浅析 .class文件格式详解 字段方法属性常量池字段 class文件属性表 数据类型 数据结构
前言概述 本文旨在讲解class文件的整体结构信息,阅读本文后应该可以完整的了解class文件的格式以及各个部分的逻辑组成含义 class文件包含了java虚拟机指令集 和 符号表 以及若 ...
- 解析ArcGis的字段计算器(二)——有玄机的要素Geometry属性,在属性表标记重复点线面
这里所说的重复是指完成重复的,不是叠在一起的两个或多个要素,这种应该叫做“压盖”或“重叠”.重复往往是在合并多Shpfile文件时不小心重复导入造成的. 这里提供一种可能的解决办法,数据无价,请备份! ...
- jQuery Validate 表单验证插件----通过name属性来关联字段来验证,改变默认的提示信息,将校验规则写到 js 代码中
一.下载依赖包 网盘下载:https://yunpan.cn/cryvgGGAQ3DSW 访问密码 f224 二. 添加一个另外一个插件jquery.validate.messages_cn.js. ...
- 不允许修改SQLserver2008r2表中字段的属性问题
SQLserver2008r2修改表中字段的属性时弹出 点击工具->选项,取消阻止保存要求重新创建表的更改
- Yii2给数据库表添加字段后对应模型无法识别到该属性的原因和解决办法
Yii2给数据库表添加字段后对应模型无法识别到该属性的原因和解决办法 应为数据库表的结构被缓存了.删除runtime文件夹或者执行 //清理指定表结构缓存数据 Yii::$app->db-> ...
- KO ------- 表中字段名和实体类属性名不一致
-----------------------siwuxie095 KO ------- 表中字段名和实体类属性名不一致 如果数据库表中的字段名和实体类的属性名不一致,那么在查询时, 相应字段的结果就 ...
- MyBatis实体属性与表的字段不对应的解决方案
1.通过在查询的SQL语句中定义字段名的别名,让字段名的别名和实体类的属性名一致,这样就可以表的字段名和实体类的属性名一一对应上,这种方式是通过在SQL语句中定义别名来解决字段名和属性名的映射关系的. ...
- Dapper中数据表的字段(列)与实体属性不一致时,如何手动配置它们之间的映射?
NET[C#]Dapper中数据表的字段(列)与实体属性不一致时,如何手动配置它们之间的映射? 问题描述 比如有如下的数据表结构:Person: person_id int first_name va ...
- Linux下修改MySQL数据表中字段属性
一.修改某个表的字段类型及指定为空或非空 alter table 表名称 change 字段名称 字段名称 字段类型 [是否允许非空]; alter table 表名称 modify 字段名称 字段类 ...
随机推荐
- 如何访问到静态的文件,如jpg,js,css.
如果你的DispatcherServlet拦截"*.do"这样的有后缀的URL,就不存在访问不到静态资源的问题. 如果你的DispatcherServlet拦截"/&qu ...
- JS基础语法---函数练习part1---5个练习
练习1:求两个数字的和:获取任意的两个数字的和 function getSum(x, y) { return x + y; } console.log(getSum(10, 20)); 练习2:求1- ...
- CSS3 3D变形 transform---rotateX(), rotateY(), rotateZ(), 透视(perspective)
2d x y 3d x y z 左手坐标系 伸出左手,让拇指和食指成“L”形,大拇指向右,食指向上,中指指向前方.这样我们就建立了一个左手坐标系,拇指.食指和中指分别代表X.Y.Z轴的正方向.如下图 ...
- uni-app自定义导航栏按钮|uniapp仿微信顶部导航条
最近一直在学习uni-app开发,由于uniapp是基于vue.js技术开发的,只要你熟悉vue,基本上很快就能上手了. 在开发中发现uni-app原生导航栏也能实现一些顶部自定义按钮+搜索框,只需在 ...
- [转]Eclipse插件开发之基础篇(3) 插件的测试与调试
原文地址:http://www.cnblogs.com/liuzhuo/archive/2010/08/17/eclipse_plugin_1_1_2.html 1. 使用JUnit对插件进行测试 E ...
- ORACLE ORA-1652的解决方法
原创 Oracle 作者:wzq609 时间:2015-02-04 22:11:07 17183 0 前言:在检查数据库的alert日志,发现数据库报了ORA-1652: unable to exte ...
- mssql sqlserver 使用sql脚本实现相邻两条数据相减的方法分享
摘要: 下文讲述使用sql脚本实现相邻两条数据相减的方法,如下所示: 实验环境:sql server 2008 R2 实现思路: 1.使用cte表达式,对当前表进行重新编号 2.使用左连接对 表达式 ...
- Shell命令-网络操作之基础之ping、route
文件及内容处理 - ping.route 1. ping:测试主机之间网络的连通性 ping命令的功能说明 ping 命令用于检测主机.执行 ping 指令会使用 ICMP 传输协议,发出要求回应的信 ...
- mongoDB的安全相关
开启认证: 在配置文件里新增一行 auth = true 创建用户: 1.创建语法:createUser 2.{user:"<name>", pwd:"& ...
- 爬虫---爬取b站小视频
前面通过python爬虫爬取过图片,文字,今天我们一起爬取下b站的小视频,其实呢,测试过程中需要用到视频文件,找了几个网站下载,都需要会员什么的,直接写一篇爬虫爬取视频~~~ 分析b站小视频 1.进入 ...