首页 >> 大全

基于C#的AE二次开发-地图渲染之分级设色符号化

2023-07-24 大全 33 作者:考证青年

基于C#的AE二次开发-地图渲染分级设色渲染符号

我的开发环境为 10.2与 。主地图名称为,Toc目录名为,创建一个菜单或按钮,创建一个点击事件,粘贴代码修改图层与渲染字段即可实现。(注意相关事件的添加与动态链接库的引入)!

_渲染等级_分层渲染

效果预览

渲染等级__分层渲染

实现代码:

private void 分级设色符号化ToolStripMenuItem_Click(object sender, EventArgs e)
{try{//输入分级设色符号化的图层(我这里默认第一个图层【高耦合】)IFeatureLayer pFeatLyr = axMapControl1.get_Layer(0) as IFeatureLayer;//输入分级设色符号化的字段(我这里默认FID字段【高耦合,分级设色字段需为数值型】)string sFieldName = "FID";//要素类中数值型字段的名称//输入分级设色的数量int numclasses = 3;IGeoFeatureLayer pGeoFeatureL = pFeatLyr as IGeoFeatureLayer;object dataFrequency;object dataValues;bool ok;int breakIndex;ITable pTable = pGeoFeatureL.FeatureClass as ITable;ITableHistogram pTableHistogram = new BasicTableHistogram() as ITableHistogram;IBasicHistogram pBasicHistogram = (IBasicHistogram)pTableHistogram;pTableHistogram.Field = sFieldName;pTableHistogram.Table = pTable;pBasicHistogram.GetHistogram(out dataValues, out dataFrequency);     //获取渲染字段的值及其出现的频率IClassifyGEN pClassify = new EqualInterval();try{pClassify.Classify(dataValues, dataFrequency, ref  numclasses);  //根据获取字段的值和出现的频率对其进行等级划分 }catch { }//返回一个数组double[] Classes = pClassify.ClassBreaks as double[];int ClassesCount = Classes.GetUpperBound(0);IClassBreaksRenderer pClassBreaksRenderer = new ClassBreaksRenderer();pClassBreaksRenderer.Field = sFieldName; //设置分级字段pClassBreaksRenderer.BreakCount = ClassesCount; //设置分级数目pClassBreaksRenderer.SortClassesAscending = true;//分级后的图例是否按升级顺序排列//设置分级着色所需颜色带的起止颜色IHsvColor pFromColor = new HsvColor();pFromColor.Hue = 0;//黄色pFromColor.Saturation = 50;pFromColor.Value = 96;IHsvColor pToColor = new HsvColor();pToColor.Hue = 80;pToColor.Saturation = 100;pToColor.Value = 96;//产生颜色带对象IAlgorithmicColorRamp pAlgorithmicCR = new AlgorithmicColorRamp();pAlgorithmicCR.Algorithm = esriColorRampAlgorithm.esriHSVAlgorithm;pAlgorithmicCR.FromColor = pFromColor;pAlgorithmicCR.ToColor = pToColor;pAlgorithmicCR.Size = ClassesCount;pAlgorithmicCR.CreateRamp(out ok);//获得颜色IEnumColors pEnumColors = pAlgorithmicCR.Colors;//需要注意的是分级着色对象中的symbol和break的下标都是从0开始for (breakIndex = 0; breakIndex <= ClassesCount - 1; breakIndex++){IColor pColor = pEnumColors.Next();switch (pGeoFeatureL.FeatureClass.ShapeType){case esriGeometryType.esriGeometryPolygon:{ISimpleFillSymbol pSimpleFillS = new SimpleFillSymbol();pSimpleFillS.Color = pColor;pSimpleFillS.Style = esriSimpleFillStyle.esriSFSSolid;pClassBreaksRenderer.set_Symbol(breakIndex, (ISymbol)pSimpleFillS);//设置填充符号pClassBreaksRenderer.set_Break(breakIndex, Classes[breakIndex + 1]);//设定每一分级的分级断点break;}case esriGeometryType.esriGeometryPolyline:{ISimpleLineSymbol pSimpleLineSymbol = new SimpleLineSymbol();pSimpleLineSymbol.Color = pColor;pClassBreaksRenderer.set_Symbol(breakIndex, (ISymbol)pSimpleLineSymbol);pClassBreaksRenderer.set_Break(breakIndex, Classes[breakIndex + 1]);break;}case esriGeometryType.esriGeometryPoint:{ISimpleMarkerSymbol pSimpleMarkerSymbol = new SimpleMarkerSymbol();pSimpleMarkerSymbol.Color = pColor;pClassBreaksRenderer.set_Symbol(breakIndex, (ISymbol)pSimpleMarkerSymbol);//设置填充符号pClassBreaksRenderer.set_Break(breakIndex, Classes[breakIndex + 1]);//设定每一分级的分级断点break;}}}pGeoFeatureL.Renderer = (IFeatureRenderer)pClassBreaksRenderer;axMapControl1.Refresh();axTOCControl1.Update();}catch (Exception ex){MessageBox.Show("该字段不存在或无法渲染!");}
}

关于我们

最火推荐

小编推荐

联系我们


版权声明:本站内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 88@qq.com 举报,一经查实,本站将立刻删除。备案号:桂ICP备2021009421号
Powered By Z-BlogPHP.
复制成功
微信号:
我知道了