[转] AE之分级颜色专题图渲染
原文 AE之分级颜色专题图渲染
参考代码1
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
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;
//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();
/////////////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////////////// //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
private void 等级专题图ToolStripMenuItem_Click(object sender, EventArgs e) { // 获取当前图层,并把它设置成IGeoFeatureLayer的实例 ILayer pLayer = axMapControl1.get_Layer(); IFeatureLayer pFeatLayer = (IFeatureLayer)pLayer; IGeoFeatureLayer pGeoFeatLayer = (IGeoFeatureLayer)pLayer; IFeatureClass pFeatClass = pFeatLayer.FeatureClass; // We're going to retrieve frequency data from a population // field and then clasify this data ITable pTable = (ITable)pFeatClass; IBasicHistogram pBasicHistogram = new BasicTableHistogramClass(); ITableHistogram pTableHistogram = (ITableHistogram)pBasicHistogram; // Get values and frequencies for the population field into a table histogram object string fieldName = "w1"; pTableHistogram.Field = fieldName; pTableHistogram.Table = pTable; object dataValues; object dataFrequency; pBasicHistogram.GetHistogram(out dataValues, out dataFrequency); IClassifyGEN pClassifyGEN = new QuantileClass(); int numClass = ; pClassifyGEN.Classify(dataValues, dataFrequency, ref numClass); double[] classes = (double[])pClassifyGEN.ClassBreaks; long classesCount = long.Parse(classes.GetUpperBound().ToString()); // Initialize a new class breaks renderer and supply the number of class breaks // and the field to perform the class breaks on IClassBreaksRenderer pClassBreaksRenderer = new ClassBreaksRendererClass(); pClassBreaksRenderer.Field = fieldName; pClassBreaksRenderer.MinimumBreak = classes[]; pClassBreaksRenderer.SortClassesAscending = true; // 设置着色对象的分级数目 pClassBreaksRenderer.BreakCount = int.Parse(classesCount.ToString()); // 创建并设置随机色谱 IAlgorithmicColorRamp pAlgorithmicColorRamp = new AlgorithmicColorRampClass(); pAlgorithmicColorRamp.Algorithm = esriColorRampAlgorithm.esriCIELabAlgorithm; IEnumColors pEnumColors; IRgbColor pColor1 = new RgbColorClass(); IRgbColor pColor2 = new RgbColorClass(); pColor1.Red = ; pColor1.Green = ; pColor1.Blue = ; pColor2.Red = ; pColor2.Green = ; pColor2.Blue = ; pAlgorithmicColorRamp.FromColor = pColor1; pAlgorithmicColorRamp.ToColor = pColor2; pAlgorithmicColorRamp.Size = numClass; bool ok = true; pAlgorithmicColorRamp.CreateRamp(out ok); pEnumColors = pAlgorithmicColorRamp.Colors; pEnumColors.Reset(); IClassBreaksUIProperties pUIProperties = (IClassBreaksUIProperties)pClassBreaksRenderer; pUIProperties.ColorRamp = "Custom"; ISimpleFillSymbol pSimpleMarkerSymbol = new SimpleFillSymbolClass(); IColor pColor; int[] colors = new int[numClass]; // be careful, indices are different for the different lists for (int breakIndex = ; breakIndex < classesCount; breakIndex++) { pClassBreaksRenderer.set_Label(breakIndex, classes[breakIndex] + "-" + classes[breakIndex + ]); pUIProperties.set_LowBreak(breakIndex, classes[breakIndex]); ISimpleFillSymbol pFillSymbol = new SimpleFillSymbolClass(); pColor = pEnumColors.Next(); pFillSymbol.Color = pColor; colors[breakIndex] = pColor.RGB; pClassBreaksRenderer.set_Symbol(breakIndex, (ISymbol)pFillSymbol); pClassBreaksRenderer.set_Break(breakIndex, classes[breakIndex + ]); } // 将等级图渲染对象与渲染图层挂钩 pGeoFeatLayer.Renderer = (IFeatureRenderer)pClassBreaksRenderer; axMapControl1.ActiveView.Refresh(); axTOCControl1.Update(); }
参考代码4
private void 等级图ToolStripMenuItem_Click(object sender, EventArgs e) { //获取当前图层 ,并把它设置成IGeoFeatureLayer的实例 IMap pMap = axMapControl1.Map; ILayer pLayer = pMap.get_Layer() 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(); ////////////////////////////////////////////////////////////////////// //定义所需的接口对象和相关变量 IClassBreaksUIProperties pUIProperties; object dataValues; object dataFrequency; //double[] cb; int breakIndex; long ClassesCount; int numClass; numClass = ; double[] Classes; ////////////////////////////////////////////////////////////////////// ITable pTable; pTable = pFeatureClass as ITable; IBasicHistogram pBasicHist = new BasicTableHistogramClass(); ITableHistogram pTableHist; pTableHist = (ITableHistogram)pBasicHist; //Get values and frequencies for the population field into a table histogram object pTableHist.Field = "w1"; pTableHist.Table = pTable; pBasicHist.GetHistogram(out dataValues, out dataFrequency); IClassifyGEN pClassifyGEN = new QuantileClass(); pClassifyGEN.Classify(dataValues, dataFrequency, ref numClass); Classes = (double[])pClassifyGEN.ClassBreaks; ClassesCount = long.Parse(Classes.GetUpperBound().ToString()); //Initialise a new class breaks renderer and supply the number of class breaks and the field to perform. the class breaks on. IClassBreaksRenderer pClassBreaksRenderer = new ClassBreaksRendererClass(); pClassBreaksRenderer.Field = "w1"; //pClassBreaksRenderer.BreakCount = ClassesCount; pClassBreaksRenderer.MinimumBreak = Classes[]; pClassBreaksRenderer.SortClassesAscending = true; //设置着色对象的分级数目 pClassBreaksRenderer.BreakCount = int.Parse(ClassesCount.ToString()); //创建并设置随机色谱 IAlgorithmicColorRamp pColorRamp = new AlgorithmicColorRampClass(); pColorRamp.Algorithm = esriColorRampAlgorithm.esriCIELabAlgorithm; IEnumColors pEnumColors; IRgbColor pColor1 = new RgbColorClass(); IRgbColor pColor2 = new RgbColorClass(); pColor1.Red = ; pColor1.Green = ; pColor1.Blue = ; pColor2.Red = ; pColor2.Green = ; pColor2.Blue = ; pColorRamp.FromColor = pColor1; pColorRamp.ToColor = pColor2; pColorRamp.Size = numClass; bool ok = true; //pColorRamp.CreateRamp(out ok); pColorRamp.CreateRamp(out ok); pEnumColors = pColorRamp.Colors; pEnumColors.Reset();// use this interface to set dialog properties pUIProperties = pClassBreaksRenderer as IClassBreaksUIProperties; pUIProperties.ColorRamp = "Custom"; ISimpleFillSymbol pSimpleMarkerSymbol = new SimpleFillSymbolClass(); IColor pColor; int[] colors = new int[numClass]; // be careful, indices are different for the diff lists for (breakIndex = ; breakIndex < ClassesCount; breakIndex++) { pClassBreaksRenderer.set_Label(breakIndex, Classes[breakIndex] + " - " + Classes[breakIndex + ]); pUIProperties.set_LowBreak(breakIndex, Classes[breakIndex]); pSimpleMarkerSymbol = new SimpleFillSymbolClass(); pColor = pEnumColors.Next(); pSimpleMarkerSymbol.Color = pColor; colors[breakIndex] = pColor.RGB; pClassBreaksRenderer.set_Symbol(breakIndex, (ISymbol)pSimpleMarkerSymbol); pClassBreaksRenderer.set_Break(breakIndex, Classes[breakIndex + ]); } //将等级图渲染对象与渲染图层挂钩 pGeoFeatureLayer.Renderer = (IFeatureRenderer)pClassBreaksRenderer; //刷新地图和TOOCotrol IActiveView pActiveView = axMapControl1.Map as IActiveView; pActiveView.Refresh(); axTOCControl1.Update(); }
[转] AE之分级颜色专题图渲染的更多相关文章
- Mapgis地图颜色配置(专题图配置)----对比Arcgis根据属性配置图斑颜色
对于大多数arcgis用户来说,根据属性配置图斑颜色对于大家来说应该并不陌生.本文将就arcgis图斑颜色设置与mapgis做出比对,为大家提供更为绚丽的地图配色. Arcgis颜色配置方案 右 ...
- ArcGIS JavaScript API 4.x中热度图渲染的使用注意事项
要使用ArcGIS JavaScript API 4.x的热度图渲染器来渲染要素图层,需要注意几点前提条件: 1.需要使用ArcGIS Server 10.6.1或更高版本发布GIS服务. 2.只支持 ...
- supermap iclient for js 标签专题图(服务端)
<!DOCTYPE><html> <head> <meta http-equiv="Content-Type" content=" ...
- arcpy.mapping实战-专题图制图自动化
arcpy.mapping实战-专题图制图自动化 by 李远祥 最初对arcpy.mapping感兴趣是因为一次大规模的专题地图调整的需要,由于某某单位利用ArcEngine编写的专题图出图系统,出现 ...
- Android Shader 颜色、图像渲染 paint.setXfermode
Shader Shader是一个基类,表示在绘制期间颜色的水平跨度 它的子类被嵌入在Paint中使用,调用paint.setShader(shader). 除Bitmap外的其他对象,使用该Paint ...
- Supermap 组合单值专题图与标签专题图演示样例
效果图例如以下:单值专题图并显示每一个区域的相关文字信息 watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvc29uZ2hmdQ==/font/5a6L5L2T ...
- ArcGIS API for Javascript之专题图的制作(四)热力图渲染(上)
一 .热力图定义 热力图(heat map)也称热图,是以特殊颜色高亮区域的形式表示密度.温度.气压.频率等分布的不易理解和表达的数据. 二.HeatmapRenderer esri/renderer ...
- cardview和Palette,ActionBar颜色随图改变
CardView是一个控件,Palette是取色工具(工具类),本文会对他们进行比较细致的介绍,相信机制的各位看完一定轻而易举地实现ActionBar随图改变的特效. 首先看一下效果图: Gradle ...
- SpringMVC DispatcherServlet-------视图渲染过程
整个spring mvc的架构如下图所示: 现在来讲解DispatcherServletDispatcherServlet的最后一步:视图渲染.视图渲染的过程是在获取到ModelAndView后的过程 ...
随机推荐
- Selenium如何使用自定义的Firefox配置文件?
一.自动保存文件 import os from selenium import webdriver fp = webdriver.FirefoxProfile() fp.set_preference( ...
- POJ2406 Power Strings KMP算法
给你一个串s,如果能找到一个子串a,连接n次变成它,就把这个串称为power string,即a^n=s,求最大的n. 用KMP来想,如果存在的话,那么我每次f[i]的时候退的步数应该是一样多的 譬 ...
- TDD 用语
OOP 封装 继承 多态 SOLID SRP 单一职责 Single Responsibility Principle OCP 开放封闭 Open/Close Principle LS ...
- TopCoder 603 div1 & div2
div2 250pts MiddleCode 题意:s串长度为奇数时,将中间字符取掉并添加到t末尾:长度为偶数时,将中间两个较小的字符取掉并添加到末尾. 分析:直接做,学习了一下substr(s, p ...
- lintcode:Add Binary 二进制求和
题目: 二进制求和 给定两个二进制字符串,返回他们的和(用二进制表示). 样例 a = 11 b = 1 返回 100 解题: 和求两个链表的和很类似 考虑进位,考虑最后一项的进位 0+0 = 0 不 ...
- IT讲师韩顺平:我为什么辞去百万年薪,自己创业?
先自我介绍一下,我叫韩顺平,是一名IT讲师.国内很多自学PHP和Java的朋友都看过我的视频课程,算是有些知名度. 15年8月从传智辞职后,很多朋友非常关心我的去向,网上也流传各种说法,有的说我和某某 ...
- Delphi 7事件的多处理机制
Delphi 7事件的多处理机制Allen Tao2007-08-19 首先解释一下这个题目.在我使用Delphi 7的过程中发现,一个对象的事件只能被一个过程处理.如果多次给这个对象的事件赋给处理事 ...
- linux命令-shopt
shopt命令 shopt命令用于显示和设置shell中的行为选项,通过这些选项以增强shell易用性.shopt命令若不带任何参数选项,则可以显示所有可以设置的shell操作选项. 开启与关闭 开启 ...
- HDU 4604 deque 最长上升子序列
枚举每个位置,求以num[i]为起点的最长不下降子序列和以num[i]为结尾的最长不递增子序列. 并且把相同值的个数统计一下,最后要减去算重复了的. 比如: 1 9 4 4 2 2 2 3 3 3 7 ...
- UINavigationController学习笔记
http://site.douban.com/129642/widget/notes/5513129/note/187701199/ 1-view controllers的关系:Each custom ...