ArcGIS Desktop和Engine中对点要素图层Graduated Symbols渲染的实现 Rotation Symbol (转)
摘要
1、ArcMap中Graduated Symbols渲染的实现
图中:A、Value表示符号大小对应的字段,Normalization(归一化)表示将Value字段进行归一化处理。B、Classification表示根据Value字段进行分级,包含分级方式(图中为NaturalBreaks)Classes为分级数量,点击右侧Classify可对Classification进行更改设置。C、Symbol Size表示符号分级的最大最小值,右方,Template点击,可对点要素的表示符号进行设置,可设置样式、颜色、大小、初始角度。D、下方的Advanced点击可选择旋转(Rotation),设置旋转的参照字段和旋转方式(Geographic为Y向起顺时针旋转,Arithmetic为X向起逆时针旋转)。渲染示例图如下:
2、ArcEngine中Graduated Symbols渲染的实现
- public static void ArrowGraduatedRendererFlow2(IFeatureLayer pFeatureLayer, string SizeField, string RotationField)
- {
- IGeoFeatureLayer pGeoFeatureLayer = pFeatureLayer as IGeoFeatureLayer;
- int classCountNum=4;
- double[] Classes = {0.0,0.5,1.0,2.0,10.0};
- try
- {
- //声明分级渲染对象
- IClassBreaksRenderer pClassBreaksRenderer = new ClassBreaksRendererClass();
- pClassBreaksRenderer.Field = SizeField;
- pClassBreaksRenderer.BreakCount = classCountNum;
- for (int breakIndex = 0; breakIndex < classCountNum; breakIndex++)
- {
- IRgbColor pColor = GetRGB(225, 80, 10);
- ISymbol SetSymbol = SetArrowMarkSymbol(breakIndex, pColor);
- pClassBreaksRenderer.set_Symbol(breakIndex, SetSymbol);
- pClassBreaksRenderer.set_Break(breakIndex, Classes[breakIndex + 1]);
- }
- //设置符号旋转的渲染方式
- IRotationRenderer pRotationRenderer = (IRotationRenderer)pClassBreaksRenderer;
- pRotationRenderer.RotationField = RotationField;//设置旋转基准字段
- //pRotationRenderer.RotationType = esriSymbolRotationType.esriRotateSymbolArithmetic;//以x轴为旋转起点
- pRotationRenderer.RotationType = esriSymbolRotationType.esriRotateSymbolGeographic;//以y轴为旋转起点
- //设置图层的渲染方式
- pGeoFeatureLayer.Renderer = (IFeatureRenderer)pClassBreaksRenderer;
- }
- catch (Exception e)
- {
- //MessageBox.Show(e.Message);
- return;
- }
- }
其中:SetArrowMarkSymbol(breakIndex, pColor)函数调用了IArrowMarkerSymbol接口,定义箭头标识。
(2)Classify分级并渲染的代码如下:
- public static void ArrowGraduatedRendererFlow(IFeatureLayer pFeatureLayer, string SizeField, string RotationField)
- {
- IGeoFeatureLayer pGeoFeatureLayer = pFeatureLayer as IGeoFeatureLayer;
- ITable pTable = (ITable)pGeoFeatureLayer;
- IQueryFilter pQueryFilter = new QueryFilterClass();
- pQueryFilter.AddField("");
- ICursor pCursor = pTable.Search(pQueryFilter, true);
- //使用统计类得到最大最小值
- IDataStatistics pDataStatistics = new DataStatisticsClass();
- pDataStatistics.Cursor = pCursor;
- //设置统计字段
- pDataStatistics.Field = SizeField;
- //得到统计结果
- IStatisticsResults pStatisticsResult = pDataStatistics.Statistics;
- if (pStatisticsResult == null)
- {
- MessageBox.Show("属性值统计失败!");
- return;
- }
- int classCountNum;
- classCountNum = (int)((pStatisticsResult.Maximum - pStatisticsResult.Minimum) / 0.5) + 1;//将(流速)值按0.5m/s分级,得到分级级数
- if (classCountNum <= 0)
- {
- classCountNum = 1;
- }
- if (classCountNum >= 32)
- {
- classCountNum = 32;
- }
- double[] Classes = GetClassBreakpoints(pGeoFeatureLayer, SizeField, classCountNum);//调用函数分级
- try
- {
- //声明分级渲染对象
- IClassBreaksRenderer pClassBreaksRenderer = new ClassBreaksRendererClass();
- pClassBreaksRenderer.Field = SizeField;
- pClassBreaksRenderer.BreakCount = classCountNum;
- for (int breakIndex = 0; breakIndex < classCountNum; breakIndex++)
- {
- IRgbColor pColor = GetRGB(225, 80, 10);
- ISymbol SetSymbol = SetArrowMarkSymbol(breakIndex, pColor);
- pClassBreaksRenderer.set_Symbol(breakIndex, SetSymbol);
- pClassBreaksRenderer.set_Break(breakIndex, Classes[breakIndex + 1]);
- }
- //设置符号旋转的渲染方式
- IRotationRenderer pRotationRenderer = (IRotationRenderer)pClassBreaksRenderer;
- pRotationRenderer.RotationField = RotationField;//设置旋转基准字段
- //pRotationRenderer.RotationType = esriSymbolRotationType.esriRotateSymbolArithmetic;//以x轴为旋转起点
- pRotationRenderer.RotationType = esriSymbolRotationType.esriRotateSymbolGeographic;//以y轴为旋转起点
- //设置图层的渲染方式
- pGeoFeatureLayer.Renderer = (IFeatureRenderer)pClassBreaksRenderer;
- }
- catch (Exception e)
- {
- //MessageBox.Show(e.Message);
- return;
- }
- }
其中,分级采用等间距分级的代码如下:
- private static double[] GetClassBreakpoints(IGeoFeatureLayer pGeoFeatureLayer, string FieldName,int ClassesCount)
- {
- double[] breakPointClasses;
- if (pGeoFeatureLayer == null)
- return null;
- ITable pTable = (ITable)pGeoFeatureLayer;//ITable pTable = (ITable)pGeoFeatureLayer.FeatureClass;
- object dataValues;
- object dataFrequency;
- //从pTable的字段中得到信息给dataValues和dataFrequency两个数组
- ITableHistogram pTableHistogram = new BasicTableHistogramClass();
- pTableHistogram.Field = FieldName;
- pTableHistogram.Table = pTable;
- IBasicHistogram pHistogram = (IBasicHistogram)pTableHistogram;
- pHistogram.GetHistogram(out dataValues, out dataFrequency);
- //下面是分级方法,用于根据获得的值计算得出符合要求的数据
- IClassifyGEN pClassify;
- //根据条件计算出IClassifyGEN
- pClassify = new EqualIntervalClass();
- int tt = ClassesCount;
- pClassify.Classify(dataValues, dataFrequency, ref tt);
- //返回数组
- breakPointClasses = (double[])pClassify.ClassBreaks;
- return breakPointClasses;
- }
最终的渲染效果如下:
ArcGIS Desktop和Engine中对点要素图层Graduated Symbols渲染的实现 Rotation Symbol (转)的更多相关文章
- Engine中如何更改矢量图层字段别名?
[解决办法]:使用IClassSchemaEdit.AlterFieldAliasName方法可以更改数据源的别名,如果想在图层的属性中更改显示的别名需要使用ITableFields.FieldInf ...
- ArcGIS Engine中如何获取Map中已经选择的要素呢(转)
ArcGIS Engine中如何获取Map中已经选择的要素呢 1.使用IEnumFeturea对象获取map中的FeatureSelection,该方法可以获取所有图层的选择要素.IMap中的Fe ...
- C#+ArcGIS Engine 获取地图中选中的要素
转自 C#+ArcGIS Engine 获取地图中选中的要素 C#+ArcGIS Engine 获取地图中选中的要素 提供一种简单遍历获取地图中选中要素的方法,代码如下: List<IFeatu ...
- ArcGIS Engine中删除要素的几种方法总结
转自原文 ArcGIS Engine中删除要素的几种方法总结 /// <summary> /// 通过IFeature.Delete方法删除要素 /// </summary> ...
- ArcGIS Engine中如何获取Map中已经选择的要素呢
1.使用IEnumFeturea对象获取map中的FeatureSelection,该方法可以获取所有图层的选择要素.IMap中的FeatureSelection可不是IFeatureSelectio ...
- ArcGIS Engine中的8种数据访问 (转)
数据是GIS的基础, 访问数据也是进行任何复杂的空间分析及空间可视化表达的前提.ArcGIS支持的数据格式比较丰富,对不同的数据格式支持的程度也有很大差异.本文主要介绍一下以下八种数据格式在ArcGI ...
- ArcGIS Engine中的数据访问
ArcGIS Engine中的数据访问 数据是GIS的基础, 访问数据也是进行任何复杂的空间分析及空间可视化表达的前提.ArcGIS支持的数据格式比较丰富,对不同的数据格式支持的程度也有很大差异.本文 ...
- ArcGIS Engine开发之旅03--ArcGIS Engine中的控件
原文:ArcGIS Engine开发之旅03--ArcGIS Engine中的控件 制图控件,如MapControl.PageLayoutControl,其中MapControl控件主要用于地理数据的 ...
- ArcGIS Engine开发之旅02--ArcGIS Engine中的类库
原文:ArcGIS Engine开发之旅02--ArcGIS Engine中的类库 System类库 System类库是ArcGIS体系结构中最底层的类库.System类库包含给构成ArcGIS的其他 ...
随机推荐
- aspupload ,在winows server 2008 下无法使用
aspupload ,在winows server 2008 下无法使用.求助解决办法 2014-01-12 13:31 goolean | 浏览 775 次 操作系统 aspupload64位,安装 ...
- 洛谷 1600 (NOIp2016) 天天爱跑步——树上差分
题目:https://www.luogu.org/problemnew/show/P1600 看TJ:https://blog.csdn.net/clove_unique/article/detail ...
- Backit轻松为您的网站创建备份
随着日益复杂,备份数据,已成为一个经验法则,为维护数据库和重要的企业信息化的大公司和企业.在一个不幸的灾难的情况下,很多企业无法恢复他们的数据,这进一步增加了在他们对所有盈利和亏损的同时,作为他们的电 ...
- 有限状态机(Finite-state machine, FSM)的C语言实现
有限状态机,也称为FSM(Finite State Machine),其在任意时刻都处于有限状态集合中的某一状态.当其获得一个输入字符时,将从当前状态转换到另一个状态,或者仍然保持在当前状态.任何一个 ...
- python开发模块基础:正则表达式
一,正则表达式 1.字符组:[0-9][a-z][A-Z] 在同一个位置可能出现的各种字符组成了一个字符组,在正则表达式中用[]表示字符分为很多类,比如数字.字母.标点等等.假如你现在要求一个位置&q ...
- Docker - Upgrade from 1.12 to 1.13
引言 历经半年,docker的更新终于来了,看着新版本中各种诱人的新特性,我们也第一时间来尝试一下. 升级 之前一直使用的是1.12,所以这次尝试的是从原来的版本升级到新版本. 1. 更新 yum p ...
- linux 下 进程和线程的区别
1.进程与线程 进程是程序执行时的一个实例,即它是程序已经执行到课中程度的数据结构的汇集.从内核的观点看,进程的目的就是担当分配系统资源(CPU时间.内存等)的基本单位. 线程是进程的一个执行流,是C ...
- USB设备驱动总结
现象:把USB设备接到PC (韦老师总结) 1. 右下角弹出"发现android phone" 2. 跳出一个对话框,提示你安装驱动程序 问1. 既然还没有" ...
- windows提权辅助工具koadic
项目地址:https://github.com/zerosum0x0/koadic ┌─[root@sch01ar]─[/sch01ar] └──╼ #git clone https://github ...
- 「小程序JAVA实战」 小程序抽离公用方法进行模块化(12)
转自:https://idig8.com/2018/08/09/xiaochengxu-chuji-12/ 小程序的模块化,把砖磊成一个墩子,用的时候把整个墩子移走.js更好的调用,应用更加公用化.源 ...