⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 clsrenderstatlayer.cs

📁 以构建的方式来实现对通用的查询统计
💻 CS
📖 第 1 页 / 共 2 页
字号:
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 + -