📄 clsrenderstatlayer.cs
字号:
using System;
using System.Collections.Generic;
using System.Text;
using ESRI.ArcGIS.Carto;
using ESRI.ArcGIS.Geodatabase;
using ESRI.ArcGIS.Display;
using System.Data;
using System.Data.OleDb;
using System.Collections;
using dist.hb.EnvQueryStat.Pub;
using ESRI.ArcGIS.esriSystem;
namespace dist.hb.EnvQueryStat.Stat
{
/// <summary>
/// 根据统计地图图层进行照色
/// </summary>
class clsRenderStatLayer
{
#region "类的初始化"
public clsStatEnv StatEnv;
public clsCreateStatTable StatTable;
public clsRenderStatLayer()
{
StatEnv = null;
StatTable = null;
}
//面直方图照色
public bool BarRenderer(IFeatureLayer pFLayer)
{
if (pFLayer == null || StatEnv == null || StatTable == null) return false;
IChartRenderer pChartRenderer = new ChartRenderer();
IRendererFields pRendererFields = pChartRenderer as IRendererFields;
//处理照色字段
ArrayList AList = new ArrayList();
if (StatEnv.SecondGroupField == "" || StatEnv.SecondGroupList.Count == 0)//没有次分组
{
foreach (StatItem var in StatTable.StatItemList)
{
if (var.isRenField)
{
pRendererFields.AddField(var.fieldName, var.fieldCapion);
AList.Add(var.fieldName);
}
}
}
else
{
string renFieldName = GetRenField().ToLower();
foreach (DataColumn var in StatTable.workTable.Columns)
{
if (var.ColumnName.ToLower().Contains(renFieldName))
{
pRendererFields.AddField(var.ColumnName, var.Caption);
AList.Add(var.ColumnName);
}
}
}
IFeatureClass pFClass = pFLayer.FeatureClass;
IDataset pDataset = pFClass as IDataset;
//取图层的统计字段的最大值
pFClass = pFLayer.FeatureClass;
if (pFClass == null) return false;
ITable pTable = pFClass as ITable;
double dbMaxValue = GetStatMax(pFClass);
if (dbMaxValue <= 0) return false;
IBarChartSymbol pBarChartSymbol = new BarChartSymbolClass();
IChartSymbol pChartSymbol = pBarChartSymbol as IChartSymbol;
pBarChartSymbol.Width = 6;
IMarkerSymbol pMarkerSymbol = pBarChartSymbol as IMarkerSymbol;
pChartSymbol.MaxValue = dbMaxValue;
pMarkerSymbol.Size = 48;
ISymbol pSym;
ISymbolArray pSymbolArray = pBarChartSymbol as ISymbolArray;
for (int i = 0; i < AList.Count; i++)
{
IFillSymbol pFillSymbol = new SimpleFillSymbol();
pFillSymbol.Color = GetColor(i + 1);
pSym = pFillSymbol as ISymbol;
pSymbolArray.AddSymbol(pSym);
}
pChartRenderer.ChartSymbol = pChartSymbol;
pChartRenderer.UseOverposter = false;
IRgbColor pRgbColor = new RgbColor();
pRgbColor.Red = 255;
pRgbColor.Green = 255;
pRgbColor.Blue = 255;
pRgbColor.NullColor = true;
pRgbColor.Transparency = 0;
IFillSymbol pFillSymbol1 = new SimpleFillSymbol();
pFillSymbol1.Color = pRgbColor;
pSym = pFillSymbol1 as ISymbol;
pChartRenderer.BaseSymbol = pSym;
pChartRenderer.CreateLegend();
IGeoFeatureLayer pGeoFeatureLayer = pFLayer as IGeoFeatureLayer;
IFeatureRenderer ren = pChartRenderer as IFeatureRenderer;
pGeoFeatureLayer.Renderer = ren;
return true;
}
//面饼图照色
public bool PieRenderer(IFeatureLayer pFLayer)
{
if (pFLayer == null) return false;
IChartRenderer pChartRenderer;
pChartRenderer = new ChartRenderer();
IRendererFields pRendererFields = pChartRenderer as IRendererFields;
//处理照色字段
ArrayList AList = new ArrayList();
if (StatEnv.SecondGroupField == "" || StatEnv.SecondGroupList.Count == 0)//没有次分组
{
foreach (StatItem var in StatTable.StatItemList)
{
if (var.isRenField)
{
pRendererFields.AddField(var.fieldName, var.fieldCapion);
AList.Add(var.fieldName);
}
}
}
else
{
string renFieldName = GetRenField().ToLower();
foreach (DataColumn var in StatTable.workTable.Columns)
{
if (var.ColumnName.ToLower().Contains(renFieldName))
{
pRendererFields.AddField(var.ColumnName, var.Caption);
AList.Add(var.ColumnName);
}
}
}
//取图层的统计字段的最大值
IFeatureClass pFClass;
pFClass = pFLayer.FeatureClass;
if (pFClass == null) return false;
double dbMaxValue = GetStatMax(pFClass);
if (dbMaxValue <= 0) return false;
IPieChartSymbol pPieChartSymbol = new PieChartSymbolClass();
IChartSymbol pChartSymbol = pPieChartSymbol as IChartSymbol;
IMarkerSymbol pMarkerSymbol = pPieChartSymbol as IMarkerSymbol;
pChartSymbol.MaxValue = dbMaxValue;
pMarkerSymbol.Size = 24;
ISymbol pSym;
IFillSymbol pFillSymbol;
ISymbolArray pSymbolArray = pPieChartSymbol as ISymbolArray;
for (int i = 0; i < AList.Count; i++)
{
pFillSymbol = new SimpleFillSymbol();
pFillSymbol.Color = GetColor(i + 1);
pSym = pFillSymbol as ISymbol;
pSymbolArray.AddSymbol(pSym);
}
IPieChartRenderer pPieChartRen = pChartRenderer as IPieChartRenderer;
IRgbColor pRgbColor = new RgbColor();
pRgbColor.Red = 255;
pRgbColor.Green = 255;
pRgbColor.Blue = 255;
pRgbColor.NullColor = true;
pRgbColor.Transparency = 0;
pFillSymbol = new SimpleFillSymbolClass();
pFillSymbol.Color = pRgbColor;
pSym = pFillSymbol as ISymbol; ;
pChartRenderer.ChartSymbol = pPieChartSymbol as IChartSymbol;
pChartRenderer.BaseSymbol = pSym;
pChartRenderer.UseOverposter = true;
//------------------------------------------------------
//这里要注意,要如何计算
double dbMinValue = GetRowSumMin(pFClass);
//if(dbMinValue < 0.0001) dbMinValue = 0.1;////?????
pPieChartRen.MinSize = 24;
pPieChartRen.MinValue = dbMinValue;
pPieChartRen.FlanneryCompensation = true;
pPieChartRen.ProportionalBySum = true;
//------------------------------------------------------
pChartRenderer.Label = "tttt";
pChartRenderer.ChartSymbol = pChartSymbol;
pChartRenderer.CreateLegend();
IGeoFeatureLayer pGeoFeatureLayer = pFLayer as IGeoFeatureLayer;
IFeatureRenderer ren = pPieChartRen as IFeatureRenderer;
pGeoFeatureLayer.Renderer = ren;
return true;
}
//面饼图照色
public bool ClassBreakColorRenderEx(IFeatureLayer pFLayer)
{
if (pFLayer == null) return false;
IChartRenderer pChartRenderer;
pChartRenderer = new ChartRenderer();
IRendererFields pRendererFields = pChartRenderer as IRendererFields;
string renField = "";
//处理照色字段
ArrayList AList = new ArrayList();
if (StatEnv.SecondGroupField == "" || StatEnv.SecondGroupList.Count == 0)//没有次分组
{
foreach (StatItem var in StatTable.StatItemList)
{
if (var.isRenField)
{
renField = var.fieldName; break;
}
}
}
else
{
string renFieldName = GetRenField().ToLower();
foreach (DataColumn var in StatTable.workTable.Columns)
{
if (var.ColumnName.ToLower().Contains(renFieldName))
{
renField = var.ColumnName; break;
}
}
}
if (renField == "") return false;
return ClassBreakColorRenderEx(pFLayer, renField, 6);
}
//分级颜色
private bool ClassBreakColorRenderEx(IFeatureLayer pFLayer, string strField, int iSegNum)
{
if(pFLayer == null) return false;
double dbMax = GetStatMax(pFLayer, strField);
if(dbMax <= 0.00000001) return false ;
IGeoFeatureLayer pGeoFeatureLayer = pFLayer as IGeoFeatureLayer;
if(pGeoFeatureLayer == null) return false;
/*ITable pTable = pGeoFeatureLayer as ITable;
ITableHistogram pTableHistogram = new BasicTableHistogramClass();
IBasicHistogram pHistogram = pTableHistogram as IBasicHistogram;
pTableHistogram.Field = strField;
pTableHistogram.Table = pTable;
object doubleArrayValues;
object longArrayFrequencies;
pHistogram.GetHistogram(out doubleArrayValues, out longArrayFrequencies);
IClassify pClassify = new EqualIntervalClass();
pClassify.SetHistogramData(doubleArrayValues, longArrayFrequencies);
pClassify.Classify(ref iSegNum) ;
object ClassBreaks;
ClassBreaks = pClassify.ClassBreaks;
int iClassesCount = 0;
if(iClassesCount<0) return false;*/
IClassBreaksRenderer pClassBreaksRenderer = new ClassBreaksRendererClass();
pClassBreaksRenderer.Field = strField;
pClassBreaksRenderer.BreakCount = iSegNum;
pClassBreaksRenderer.SortClassesAscending = true;
//---------------------------------------------
//以下产生随机色
IHsvColor pFromColor = new HsvColorClass();
pFromColor.Hue = 64;//黄色
pFromColor.Saturation = 240;
pFromColor.Value = 96;
IHsvColor pToColor = new HsvColorClass();
pToColor.Hue = 0;//红色
pToColor.Saturation = 100;
pToColor.Value = 96;
IAlgorithmicColorRamp pRamp = new AlgorithmicColorRampClass();
pRamp.Algorithm = esriColorRampAlgorithm.esriHSVAlgorithm;
pRamp.FromColor= pFromColor;
pRamp.ToColor = pToColor;
pRamp.Size = iSegNum ;
bool ok;
pRamp.CreateRamp(out ok);
IEnumColors pEnumColors;
pEnumColors = pRamp.Colors;
if(pEnumColors == null) return false;
//-----------------------------------------------------------
IColor pColor;
int iBreakIndex;
double dbValue0 = 0;;
for (iBreakIndex = 0; iBreakIndex < iSegNum; iBreakIndex++)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -