[转] AE之分级颜色专题图渲染

简介:

原文 AE之分级颜色专题图渲染 

参考代码1

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
private  void  分级渲染ToolStripMenuItem_Click( object  sender, EventArgs e)
{
 
     //值分级
 
     IBasicHistogram pBasicHis =  new  BasicTableHistogramClass();
     ITableHistogram pTabHis = (ITableHistogram)pBasicHis;
     pTabHis.Field =  "w1" ;
 
     ITable pTab = (ITable)axMapControl1.get_Layer(0);
     pTabHis.Table = pTab;
 
 
     object  doubleArrVal, longArrFreq;
     pBasicHis.GetHistogram( out  doubleArrVal,  out  longArrFreq);
 
     IClassifyGEN pClassify =  new  EqualIntervalClass();   //NaturalBreaksClass
 
     int  nDes = 5;
 
 
 
     pClassify.Classify(doubleArrVal, longArrFreq,  ref  nDes);
 
     object  classes = pClassify.ClassBreaks;
 
 
 
     System.Array pArr = (System.Array)classes;
 
 
 
     //算法梯度颜色
 
     IAlgorithmicColorRamp pAlgoColorRamp =  new  AlgorithmicColorRampClass();
     pAlgoColorRamp.Size = pArr.Length;
     IRgbColor pFromColor =  new  RgbColorClass(), pToColor =  new  RgbColorClass();
     pFromColor.Red = 0;
     pFromColor.Green = 255;
     pFromColor.Blue = 0;
     pToColor.Red = 255;
     pToColor.Green = 0;
     pToColor.Blue = 255;
 
 
 
     pAlgoColorRamp.FromColor = pFromColor;
     pAlgoColorRamp.ToColor = pToColor;
     bool  ok =  true ;
     pAlgoColorRamp.CreateRamp( out  ok);
 
     //颜色梯度结束
 
 
     IClassBreaksRenderer pRender =  new  ClassBreaksRendererClass();
     pRender.BreakCount = pArr.Length;
     pRender.Field =  "w1" ;
     ISimpleFillSymbol pSym;
 
     for  ( int  i = 0; i < pArr.Length; i++)
     {
 
         pRender.set_Break(i, ( double )pArr.GetValue(i));
 
         pSym =  new  SimpleFillSymbolClass();
 
         pSym.Color = pAlgoColorRamp.get_Color(i);
 
         pRender.set_Symbol(i, (ISymbol)pSym);
 
     }
 
     IGeoFeatureLayer pGeoLyr = (IGeoFeatureLayer)axMapControl1.get_Layer(0);
     pGeoLyr.Renderer = (IFeatureRenderer)pRender;
 
     axMapControl1.Refresh();
     axTOCControl1.Update();
 
}

 参考代码2

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
private  void  分层设色ToolStripMenuItem_Click( object  sender, EventArgs e)
{
 
             //获取当前图层 ,并把它设置成IGeoFeatureLayer的实例
             IMap pMap = axMapControl1.Map;
             ILayer pLayer = pMap.get_Layer(0)  as  IFeatureLayer;
             IFeatureLayer pFeatureLayer = pLayer  as  IFeatureLayer;
             IGeoFeatureLayer pGeoFeatureLayer = pLayer  as  IGeoFeatureLayer;
 
             //获取图层上的feature
             IFeatureClass pFeatureClass = pFeatureLayer.FeatureClass;
             IFeatureCursor pFeatureCursor = pFeatureClass.Search( null false );
             IFeature pFeature = pFeatureCursor.NextFeature();
 
             //
             IFeatureRenderer PR=pGeoFeatureLayer.Renderer;<br>
             //JoinData("县级区域", "DZGB", "sectioncode");   //join外部表
             // int DC ;
             int   desiredClasses = 5;
             string  fieldName =  "w1" ;
             int  classesCount;
             double [] classes;
             string  strOutput =  "" ;
             bool  ok;
 
             object  dataFrequency;
             object  dataValues;
             ITable pTable ;
 
             //IClassify pClassify;
             EqualIntervalClass pClassify;
 
             //IBasicHistogram pTableHistogram = new BasicTableHistogramClass();
             //IHistogram pTableHistogram = new BasicTableHistogramClass();
             ITableHistogram pTableHistogram =  new  BasicTableHistogramClass()  as  ITableHistogram;
             IBasicHistogram pHistogram;
             IClassBreaksRenderer pClassBreaksRenderer;
             IHsvColor pFromColor;
             IHsvColor pToColor;
             IAlgorithmicColorRamp pAlgorithmicColorRamp;
             IEnumColors pEnumColors;
             IColor pColor;
             ISimpleFillSymbol pSimpleFillSymbol;
 
  
 
             pLayer = (IFeatureLayer)axMapControl1.get_Layer(0);
             pGeoFeatureLayer = (IGeoFeatureLayer)pLayer;
             pTable = (ITable)pGeoFeatureLayer;
             pHistogram = (IBasicHistogram)pTableHistogram;
 
             // Get values and frequencies for the field
             pTableHistogram.Field = fieldName;
             pTableHistogram.Table = pTable;
             pHistogram.GetHistogram( out  dataValues,  out  dataFrequency);
 
             // Put values and frequencies into an Equal Interval Classify Object
             pClassify =  new  EqualIntervalClass();
 
             //pClassify = new NaturalBreaksClass();
             pClassify.SetHistogramData(dataValues, dataFrequency);
             pClassify.Classify(dataValues, dataFrequency,  ref  desiredClasses);
 
             //pClassify.Classify(ref desiredClasses);
             classes = ( double [])pClassify.ClassBreaks;
             classesCount = classes.Length;
 
  
 
             // Initialise a new Class Breaks renderer
             // Supply the number of Class Breaks and the field to perform. the class breaks on
             pClassBreaksRenderer =  new  ClassBreaksRendererClass();
             pClassBreaksRenderer.Field = fieldName;
             pClassBreaksRenderer.BreakCount = classesCount;
             pClassBreaksRenderer.SortClassesAscending =  true ;
 
             // Use algorithmic color ramp to generate an range of colors between YELLOW to RED
             // Initial color: YELLOW
             pFromColor =  new  HsvColorClass();
             pFromColor.Hue = 60;
             pFromColor.Saturation = 100;
             pFromColor.Value = 96;
 
             // Final color: RED
             pToColor =  new  HsvColorClass();
             pToColor.Hue = 0;
             pToColor.Saturation = 100;
             pToColor.Value = 96;
             // Set up HSV Color ramp to span from YELLOW to RED
             pAlgorithmicColorRamp =  new  AlgorithmicColorRampClass();
             pAlgorithmicColorRamp.Algorithm = esriColorRampAlgorithm.esriHSVAlgorithm;
             pAlgorithmicColorRamp.FromColor = pFromColor;
             pAlgorithmicColorRamp.ToColor = pToColor;
             pAlgorithmicColorRamp.Size = classesCount;
             pAlgorithmicColorRamp.CreateRamp( out  ok);
  
 
             pEnumColors = pAlgorithmicColorRamp.Colors;
             for  ( int  index = 0; index < classesCount - 1; index++)
             {
 
                 pColor = pEnumColors.Next();
                 pSimpleFillSymbol =  new  SimpleFillSymbolClass();
                 pSimpleFillSymbol.Color = pColor;
                 pSimpleFillSymbol.Style = esriSimpleFillStyle.esriSFSSolid;
                 pClassBreaksRenderer.set_Symbol(index, (ISymbol)pSimpleFillSymbol);
                 pClassBreaksRenderer.set_Break(index, classes[index + 1]);
                 // Store each break value for user output
                 strOutput +=  "-"  + classes[index + 1] +  "\n" ;
 
             }
 
             pGeoFeatureLayer.Renderer = (IFeatureRenderer)pClassBreaksRenderer;
             //this.axMapControl1.Refresh();<br>
            /////////////////////////////////////////////////////////////////////////////////////////
            //////////////////////////////////////////////////////////////////////////////////////////
           
 
             //get the custom property from which is supposed to be the layer to be saved
             object  customProperty =  null ;
             //IMapControl3 mapControl = null;
             customProperty = axMapControl1.CustomProperty;
 
           
 
             //ask the user to set a name for the new layer file
             SaveFileDialog saveFileDialog =  new  SaveFileDialog();
             saveFileDialog.Filter =  "Layer File|*.lyr|All Files|*.*" ;
             saveFileDialog.Title =  "生成专题图" ;
             saveFileDialog.RestoreDirectory =  true ;
             saveFileDialog.FileName = System.IO.Path.Combine(saveFileDialog.InitialDirectory, pGeoFeatureLayer.Name +  ".lyr" );
  
 
             //get the layer name from the user
             DialogResult dr = saveFileDialog.ShowDialog();
             if  (saveFileDialog.FileName !=  ""  && dr == DialogResult.OK)
             {
 
                 if  (System.IO.File.Exists(saveFileDialog.FileName))
                 {
 
                     //try to delete the existing file
                     System.IO.File.Delete(saveFileDialog.FileName);
 
                 }
 
  
 
                 //create a new LayerFile instance
                 ILayerFile layerFile =  new  LayerFileClass();
                 //create a new layer file
                 layerFile.New(saveFileDialog.FileName);
                 //attach the layer file with the actual layer
                 layerFile.ReplaceContents((ILayer)pGeoFeatureLayer);
                 //save the layer file
                 layerFile.Save();
 
                 //ask the user whether he'd like to add the layer to the map
                 if  (DialogResult.Yes == MessageBox.Show( "Would you like to add the layer to the map?" "Message" , MessageBoxButtons.YesNo,MessageBoxIcon.Question))
                 {
                     axMapControl1.AddLayerFromFile(saveFileDialog.FileName, 0);
                 }
             }
 
             IActiveView pActiveView = axMapControl1.Map  as  IActiveView;
             pActiveView.Refresh();
             axTOCControl1.Update();
}

 

参考代码3

  View Code

 

参考代码4

  View Code

 

没有整理与归纳的知识,一文不值!高度概括与梳理的知识,才是自己真正的知识与技能。 永远不要让自己的自由、好奇、充满创造力的想法被现实的框架所束缚,让创造力自由成长吧! 多花时间,关心他(她)人,正如别人所关心你的。理想的腾飞与实现,没有别人的支持与帮助,是万万不能的。


    本文转自wenglabs博客园博客,原文链接:http://www.cnblogs.com/arxive/p/5903535.html,如需转载请自行联系原作者


相关实践学习
基于Hologres轻量实时的高性能OLAP分析
本教程基于GitHub Archive公开数据集,通过DataWorks将GitHub中的项⽬、行为等20多种事件类型数据实时采集至Hologres进行分析,同时使用DataV内置模板,快速搭建实时可视化数据大屏,从开发者、项⽬、编程语⾔等多个维度了解GitHub实时数据变化情况。
阿里云实时数仓实战 - 用户行为数仓搭建
课程简介 1)学习搭建一个数据仓库的过程,理解数据在整个数仓架构的从采集、存储、计算、输出、展示的整个业务流程。 2)整个数仓体系完全搭建在阿里云架构上,理解并学会运用各个服务组件,了解各个组件之间如何配合联动。 3&nbsp;)前置知识要求:熟练掌握 SQL 语法熟悉 Linux 命令,对 Hadoop 大数据体系有一定的了解 &nbsp; 课程大纲 第一章&nbsp;了解数据仓库概念 初步了解数据仓库是干什么的 第二章&nbsp;按照企业开发的标准去搭建一个数据仓库 数据仓库的需求是什么 架构 怎么选型怎么购买服务器 第三章&nbsp;数据生成模块 用户形成数据的一个准备 按照企业的标准,准备了十一张用户行为表 方便使用 第四章&nbsp;采集模块的搭建 购买阿里云服务器 安装 JDK 安装 Flume 第五章&nbsp;用户行为数据仓库 严格按照企业的标准开发 第六章&nbsp;搭建业务数仓理论基础和对表的分类同步 第七章&nbsp;业务数仓的搭建&nbsp; 业务行为数仓效果图&nbsp;&nbsp;
相关文章
|
JavaScript jenkins 持续交付
自动化部署与持续集成:使用Jenkins和Docker优化开发流程
【8月更文挑战第31天】在软件开发的世界里,时间就是一切。本文将引导你通过Jenkins和Docker的强大组合,实现自动化部署和持续集成,让你的开发流程如丝般顺滑。我们将从基础设置开始,逐步深入到构建管道,最终实现一键部署的梦想。准备好让你的开发效率飞跃,一起探索这个令人兴奋的旅程吧!
|
机器学习/深度学习 人工智能 安全
一文搞懂隐私计算
一文搞懂隐私计算
5658 0
|
4天前
|
人工智能 JSON 自然语言处理
让教学更智慧:用阿里云百炼工作流,自动生成中小学教材内容#小有可为#有温度的AI
通过可视化工作流编排,将大模型推理能力转化为标准化的教学内容生成引擎。教师只需输入教材标题和适用学段,即可自动获得结构完整、符合课程标准的章节内容,大幅降低备课门槛,助力教育资源均衡化。
447 122
|
6天前
|
人工智能 定位技术 SEO
我学 GEO 第 15 天:终于知道AI GEO该如何做?
我是暴走的莉莉酱,边旅行边研究AI GEO的数字游民。专注普通人如何提升“AI可见度”——让AI在回答用户问题时准确识别、理解并推荐你。不讲玄学,只做可测、可调、可持续的GEO实践。
430 125
|
9天前
|
机器学习/深度学习 人工智能 调度
🐴 HappyHorse 1.1 现已上线阿里云百炼!快来查收模型使用指南,现在调用享 6 折~
HappyHorse 1.1 是新一代视频生成大模型,全面升级动态表现力、角色一致性、指令遵循、视觉质感与音画协同能力。支持I2V/T2V/R2V三类生成,适配短剧、电商广告、品牌营销等场景,提供高质、流畅、可控的AI视频生产力。
725 5
🐴 HappyHorse 1.1 现已上线阿里云百炼!快来查收模型使用指南,现在调用享 6 折~
|
6天前
|
缓存 人工智能 运维
阿里云618百炼大模型Qwen3.7-Max功能、免费试用、订阅计费、配置接入详解
Qwen3.7-MAX是阿里云百炼平台推出的通义千问3.7系列旗舰大语言模型,专为智能体时代复杂任务打造,依托阿里云全域算力与自研技术,在逻辑推理、长文本处理、代码工程、长周期自主执行等领域达到行业顶尖水平。2026年618期间,该模型推出多重免费试用权益、按量计费5折、订阅套餐优惠等专属福利,覆盖个人开发者、团队与企业全场景需求,以下从核心功能、免费试用、订阅计费、配置接入四方面展开详细解析。
430 123
|
4天前
|
人工智能 自然语言处理 API
阿里云Token Plan团队版解析:功能、三档套餐与省钱订阅指南
阿里云百炼平台推出的Token Plan团队版,是面向企业与团队的AI大模型订阅服务,以Credits为统一计量单位,整合文本与图像生成模型,提供团队管理、数据安全、多工具兼容等核心能力,解决团队零散订阅AI服务的管理混乱、成本失控、数据安全等痛点。本文将从核心定位、套餐详情、计费规则、团队管理、工具兼容、便宜订阅技巧等方面,全面解析Token Plan团队版,帮助企业与团队高效、低成本地使用AI服务。
320 108
|
14天前
|
Linux 程序员 数据格式
【2026最新】Notepad++下载、安装和使用一篇搞定(附中文版安装包)
Notepad++ 是一款免费开源、轻量高效的 Windows 文本编辑器,支持 C/Python/HTML 等 80+ 语言语法高亮、代码折叠、正则替换、编码转换及插件扩展,专为程序员与文本处理用户打造,完美替代系统记事本。(239字)