专题图制作(点密度图、分层设色图/等级图、单值图、柱状图、饼状图)

ArcEngine 专题图制作(C#)
点密度图、分层设色图/等级图、单值图、柱状图、饼状图的实现代码 C#

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();

///

///
//定义点密度图渲染组件
IDotDensityRenderer DotDensityRenderer = new DotDensityRendererClass();

//定义点密度图渲染组件对象的渲染字段对象
IRendererFields flds = (IRendererFields)DotDensityRenderer;
flds.AddField("FID", "FID");
//flds.AddField("Shape", "Shape");

//定义点密度图渲染得符号对象
IDotDensityFillSymbol ddSym = new DotDensityFillSymbolClass();
IRgbColor BackColor = new RgbColorClass();
BackColor.Red = 234;
BackColor.Blue = 128;
BackColor.Green = 220;
IRgbColor SymbolColor = new RgbColorClass();
SymbolColor.Red = 234;
SymbolColor.Blue = 128;
SymbolColor.Green = 220;
点密度图渲染背景颜色
//ddSym.BackgroundColor = BackColor;
ddSym.DotSize =8;
ddSym.FixedPlacement = true;
//ddSym.Color = SymbolColor;
ILineSymbol pLineSymbol=new CartographicLineSymbolClass();
ddSym.Outline = pLineSymbol;

//定义符号数组
ISymbolArray symArray = (ISymbolArray)ddSym;
//添加点密度图渲染的点符号到符号数组中去
ISimpleMarkerSymbol pMarkerSymbol = new SimpleMarkerSymbolClass();
pMarkerSymbol.Style. = esriSimpleMarkerStyle.esriSMSCircle;
pMarkerSymbol.Size = 2;
pMarkerSymbol.Color = SymbolColor;;


symArray.AddSymbol(pMarkerSymbol as ISymbol );

//设置点密度图渲染的点符号
//DotDensityRenderer.DotDensitySymbol =symArray;
DotDensityRenderer.DotDensitySymbol = ddSym;
//确定一个点代表多少值
DotDensityRenderer .DotValue=0.2;
//点密度渲染采用的颜色模式
DotDensityRenderer.ColorScheme = "Custom";
//创建点密度图渲染图例
DotDensityRenderer.CreateLegend();
//设置符号大小是否固定
DotDensityRenderer.MaintainSize = true;
//将点密度图渲染对象与渲染图层挂钩
pGeoFeatureLayer.Renderer = (IFeatureRenderer)DotDensityRenderer;
//刷新地图和TOOCotrol
IActiveView pActiveView = axMapControl1.Map as IActiveView;
pActiveView.Refresh();
axTOCControl1.Update();

}
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 = "AREA";
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);
}
}

}

private void 单值图ToolStripMenuItem1_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);

//定义单值图渲染组件
IUniqueValueRenderer pUniqueValueRenderer = new UniqueValueRendererClass();
//设置渲染字段对象
pUniqueValueRenderer.FieldCount = 1;
pUniqueValueRenderer.set_Field(0, "ID");
//创建填充符号
ISimpleFillSymbol PFillSymbol = new SimpleFillSymbolClass();
pUniqueValueRenderer.DefaultSymbol = (ISymbol)PFillSymbol;
pUniqueValueRenderer.UseDefaultSymbol = false;

//QI the table from the geoFeatureLayer and get the field number of
ITable pTable;
int fieldNumber;
pTable = pGeoFeatureLayer as ITable ;
fieldNumber = pTable.FindField("ID");
if (fieldNumber == -1)
{
MessageBox.Show("Can't find field called ", "Message", MessageBoxButtons.OK, MessageBoxIcon.Information);

}

//创建并设置随机色谱
IRandomColorRamp pColorRamp = new RandomColorRampClass();
pColorRamp.StartHue = 0;
pColorRamp.MinValue = 99;
pColorRamp.MinSaturation = 15;
pColorRamp.EndHue = 360;
pColorRamp.MaxValue = 100;
pColorRamp.MaxSaturation = 30;
pColorRamp.Size = 100;
//pColorRamp.Size = pUniqueValueRenderer.ValueCount;
bool k = true;
pColorRamp.CreateRamp(out ok);
IEnumColors pEnumRamp;
pEnumRamp = pColorRamp.Colors;

//为每个值设置一个符号
int n = pFeatureClass.FeatureCount(null);
for (int i = 0; i < n; i++)
{
IFeature pFeature = pFeatureCursor.NextFeature();
IClone pSourceClone = PFillSymbol as IClone;
ISimpleFillSymbol pSimpleFillSymbol = pSourceClone.Clone() as ISimpleFillSymbol ;
string pFeatureValue = pFeature.get_Value(pFeature.Fields.FindField("ID")).ToString();
pUniqueValueRenderer.AddValue(pFeatureValue, "烈度", (ISymbol)pSimpleFillSymbol);
}
//为每个符号设置颜色
for (int i = 0; i <= pUniqueValueRenderer.ValueCount - 1; i++)
{
string xv = pUniqueValueRenderer.get_Value(i);
if (xv != "")
{
ISimpleFillSymbol pNextSymbol = (ISimpleFillSymbol)pUniqueValueRenderer.get_Symbol(xv);
pNextSymbol.Color = pEnumRamp.Next();
pUniqueValueRenderer.set_Symbol(xv, (ISymbol)pNextSymbol);

}
}
//将单值图渲染对象与渲染图层挂钩
pGeoFeatureLayer.Renderer = (IFeatureRenderer)pUniqueValueRenderer;
pGeoFeatureLayer.DisplayField = "ID";
//刷新地图和TOOCotrol
IActiveView pActiveView = axMapControl1.Map as IActiveView;
pActiveView.Refresh();
axTOCControl1.Update();

}
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();
//

//定义所需的接口对象和相关变量

IClassBreaksUIProperties pUIProperties;
object dataValues;
object dataFrequency;
//double[] cb;


int breakIndex;
long ClassesCount;
int numClass;
numClass = 10;
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 = "AREA";
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(0).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 = "AREA";
//pClassBreaksRenderer.BreakCount = ClassesCount;
pClassBreaksRenderer.MinimumBreak = Classes[0];
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 = 255;
pColor1.Green = 210;
pColor1.Blue = 210;
pColor2.Red = 190;
pColor2.Green = 0;
pColor2.Blue = 170;
pColorRamp.FromColor = pColor1;
pColorRamp.ToColor = pColor2;
pColorRamp.Size = numClass;
bool k = true;
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 = 0; breakIndex < ClassesCount; breakIndex++)
{

pClassBreaksRenderer.set_Label (breakIndex,Classes[breakIndex] + " - " + Classes[breakIndex + 1]);
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 + 1]);
}

//将等级图渲染对象与渲染图层挂钩
pGeoFeatureLayer.Renderer = (IFeatureRenderer)pClassBreaksRenderer;
//刷新地图和TOOCotrol
IActiveView pActiveView = axMapControl1.Map as IActiveView;
pActiveView.Refresh();
axTOCControl1.Update();
}


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;

//定义柱状图渲染组建对象
IChartRenderer pChartRenderer = new ChartRendererClass();
//定义渲染字段对象并给字段对象实例化为pChartRenderer
IRendererFields pRendererFields;
pRendererFields = (IRendererFields)pChartRenderer;
//向渲染字段对象中添加字段--- 待补充自定义添加
pRendererFields.AddField("AREA", "AREA");
pRendererFields.AddField("ID", "ID");

// 通过查找features的所用字段的值,计算出数据字段的最大值,作为设置柱状图的比例大小的依据
ITable pTable;
int fieldNumber;
pTable = pGeoFeatureLayer as ITable;
// 查找出geoFeatureLayer的属性表中的字段个数
fieldNumber = pTable.FindField("AREA");
if (fieldNumber == -1)
{
MessageBox.Show("Can't find field called ", "Message", MessageBoxButtons.OK, MessageBoxIcon.Information);

}

const int numFields = 2;// 设置bars的个数
int[] fieldIndecies = new int[2];
//long fieldIndex;
double maxValue;
bool firstValue;
//double[] fieldValue=new double[5];
double fieldValue;
fieldIndecies[0] = pTable.FindField("AREA");
fieldIndecies[1] = pTable.FindField("ID");
firstValue = true;
maxValue = 0;
int n = pFeatureClass.FeatureCount(null);
for (int i = 0; i < numFields; i++)
{
IFeatureCursor pFeatureCursor = pFeatureClass.Search(null, false);
for (int j = 0; j < n; j++)
{
IFeature pFeature = pFeatureCursor.NextFeature();
fieldValue = Convert.ToDouble(pFeature.get_Value(fieldIndecies[i]));

if (firstValue)
{
//给maxValue赋初值
maxValue = fieldValue;
firstValue = false;
}
else if (fieldValue > maxValue)
{
maxValue = fieldValue;
}

}
}

if (maxValue <= 0)
{
MessageBox.Show("Failed to calculate the maximum value or maxvalue is 0.", "Message", MessageBoxButtons.OK, MessageBoxIcon.Information);
}

// 定义并设置渲染时用的chart marker symbol
IBarChartSymbol pBarChartSymbol = new BarChartSymbolClass();
pBarChartSymbol.Width = 6;

IChartSymbol pChartSymbol;
pChartSymbol = pBarChartSymbol as IChartSymbol;

IMarkerSymbol pMarkerSymbol;
pMarkerSymbol = (IMarkerSymbol)pBarChartSymbol;



IFillSymbol pFillSymbol ;
//设置pChartSymbol的最大值
pChartSymbol.MaxValue = maxValue;
// 设置bars的最大高度
pMarkerSymbol.Size = 16;
//下面给每一个bar设置符号

//定义符号数组
ISymbolArray pSymbolArray = (ISymbolArray)pBarChartSymbol;

//克隆pFillSymbol用于符号操作
//IClone pSourceClone = pFillSymbol as IClone;
//ISimpleFillSymbol pSimpleFillSymbol = pSourceClone.Clone() as ISimpleFillSymbol;

// 向符号数组中添加设置后的符号
//pSimpleFillSymbol.Color = GetRGBColor(193, 252, 179);
//pSymbolArray.AddSymbol(pSimpleFillSymbol as ISymbol);

//pSimpleFillSymbol.Color = GetRGBColor(145, 55, 200);
//pSymbolArray.AddSymbol(pSimpleFillSymbol as ISymbol);

//添加第一个符号
pFillSymbol = new SimpleFillSymbolClass();
pFillSymbol.Color = GetRGBColor(193, 252, 179) as IColor ;
pSymbolArray.AddSymbol(pFillSymbol as ISymbol) ;
//添加第二个符号
pFillSymbol = new SimpleFillSymbolClass();
pFillSymbol.Color = GetRGBColor(145, 55, 251)as IColor;
pSymbolArray.AddSymbol(pFillSymbol as ISymbol);

// 设置背景符号
//pSimpleFillSymbol.Color = GetRGBColor(239, 150, 190);
//pChartRenderer.BaseSymbol = pSimpleFillSymbol as ISymbol;

// Disable overpoaster 让符号处于图形中央
pChartRenderer.UseOverposter = false;


//pChartRenderer.ChartSymbol = pSymbolArray as IChartSymbol;
pChartRenderer.ChartSymbol = pChartSymbol as IChartSymbol;
//pChartRenderer.Label = "AREA";
pChartRenderer.CreateLegend();

//将柱状图渲染对象与渲染图层挂钩
pGeoFeatureLayer.Renderer = (IFeatureRenderer)pChartRenderer;
pGeoFeatureLayer.DisplayField = "ID";
//刷新地图和TOOCotrol
IActiveView pActiveView = axMapControl1.Map as IActiveView;
pActiveView.Refresh();
axTOCControl1.Update();

}
private void asdToolStripMenuItem_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();
//

/
IBasicHistogram pHistogram;
ITableHistogram pTableHistogram = new BasicTableHistogramClass();
ITable pTable;
IClassifyGEN pClassifyGEN = new EqualIntervalClass();
long ClassesCount;
IClassBreaksRenderer pClassBreaksRenderer = new ClassBreaksRendererClass();
IAlgorithmicColorRamp pAlgorithmicColorRamp = new AlgorithmicColorRampClass();
ISimpleMarkerSymbol pSimpleMarkerSymbol = new SimpleMarkerSymbolClass();
IEnumColors pEnumColors;
object dataFrequency;
object dataValue;
double[] Classes;
int numClass;
numClass = 10;

pTable = (ITable)pGeoFeatureLayer;

//根据渲染字段得到渲染信息赋值给两个数组。
pHistogram = (IBasicHistogram)pTableHistogram;
pTableHistogram.Field = "AREA";
pTableHistogram.Table = pTable;
pHistogram.GetHistogram(out dataValue, out dataFrequency);

//下面是分级方法,用于根据获得的值计算得出符合条件要求的数据

//根据条件计算出Classes和ClassesCount.

pClassifyGEN.Classify(dataValue, dataFrequency, ref numClass);
//返回一个数组,注意这个数组的下标是从1开始的
Classes = (double[])pClassifyGEN.ClassBreaks;

ClassesCount = long.Parse(Classes.GetUpperBound(0).ToString());

pClassBreaksRenderer.Field = "AREA";

//创建并设置随机色谱
IAlgorithmicColorRamp pColorRamp = new AlgorithmicColorRampClass();
pColorRamp.Algorithm = esriColorRampAlgorithm.esriCIELabAlgorithm;

IRgbColor pColor1 = new RgbColorClass();
IRgbColor pColor2 = new RgbColorClass();
pColor1.Red = 255;
pColor1.Green = 210;
pColor1.Blue = 210;
pColor2.Red = 190;
pColor2.Green = 0;
pColor2.Blue = 170;
pColorRamp.FromColor = pColor1;
pColorRamp.ToColor = pColor2;
pColorRamp.Size = 20;
bool k = true;
pColorRamp.CreateRamp(out ok);
pEnumColors = pColorRamp.Colors;
pEnumColors.Reset();// use this interface to set dialog properties



//设置着色对象的分级数目
pClassBreaksRenderer.BreakCount = int.Parse(ClassesCount.ToString());
pClassBreaksRenderer.SortClassesAscending = true;
//设置颜色条带:

pAlgorithmicColorRamp.FromColor = pColor1;
pAlgorithmicColorRamp.ToColor = pColor2;
pAlgorithmicColorRamp.Size = numClass;
bool re = false;
pAlgorithmicColorRamp.CreateRamp(out re);
pEnumColors = pAlgorithmicColorRamp.Colors;
pEnumColors.Reset();
//定义图形边界符号
ILineSymbol pLineSymbol;

IColor pColor;
int[] colors = new int[numClass];
int breakIndex = 0;

for (breakIndex = 0; breakIndex < ClassesCount; breakIndex++)
{
//pEnumColors.Reset();
pColor = pEnumColors.Next();
pSimpleMarkerSymbol.Color = pColor;
colors[breakIndex] = pColor.RGB;
pSimpleMarkerSymbol.Style. = esriSimpleMarkerStyle.esriSMSSquare;//.esriSMSCircle;
pSimpleMarkerSymbol.Size = 10;
pClassBreaksRenderer.set_Symbol(breakIndex, (ISymbol)pSimpleMarkerSymbol);
pClassBreaksRenderer.set_Break(breakIndex, Classes[breakIndex + 1]);
pLineSymbol = new CartographicLineSymbolClass();
//pSimpleMarkerSymbol.Outline= true ;
// pEnumColors.Reset();
//pSimpleMarkerSymbol.OutlineColor = pEnumColors.Next(); ;
& nbs

  • 2
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
步骤如下: 1. 读取地形,用imread函数将其转化为矩阵格式。 示例代码: ``` import cv2 import numpy as np terrain = cv2.imread('terrain.png', 0) # 读取灰度 ``` 2. 设定等高线高度值,用numpy的arange函数生成一组等差数列,作为等高线高度值。 示例代码: ``` contour_levels = np.arange(25, 225, 25) # 等高线高度从25到225,间隔为25 ``` 3. 利用cv2.findContours函数寻找等高线。 cv2.findContours函数用于寻找连通的轮廓。其中,输入参数为二值化像,输出参数为轮廓集合和各自的层级关系(可省略),返回值为寻找到的轮廓。 示例代码: ``` contours, hierarchy = cv2.findContours(terrain, cv2.RETR_TREE, cv2.CHAIN_APPROX_SIMPLE) ``` 4. 用cv2.drawContours函数将等高线绘制到新的像上。 cv2.drawContours函数用于绘制轮廓。其中,输入参数为目标像、轮廓集合、轮廓索引(-1表示绘制所有轮廓)、颜色、线宽度等。 示例代码: ``` contour_img = np.zeros_like(terrain) cv2.drawContours(contour_img, contours, -1, (255, 255, 255), 1) # 将所有轮廓绘制到新像上 ``` 5. 保存等高线像。 示例代码: ``` cv2.imwrite('contour.png', contour_img) ``` 完整代码: ``` import cv2 import numpy as np terrain = cv2.imread('terrain.png', 0) # 读取灰度 contour_levels = np.arange(25, 225, 25) # 等高线高度从25到225,间隔为25 contours, hierarchy = cv2.findContours(terrain, cv2.RETR_TREE, cv2.CHAIN_APPROX_SIMPLE) contour_img = np.zeros_like(terrain) cv2.drawContours(contour_img, contours, -1, (255, 255, 255), 1) # 将所有轮廓绘制到新像上 cv2.imwrite('contour.png', contour_img) ``` 其中,terrain.png为分层设色地形,输出的contour.png为等高线地形

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值