arcengine 的几种统计图绘制

http://blog.csdn.net/tianxinzhe032/article/details/6660028

//获取颜色对象
static public IRgbColor getRGB(int r, int g, int b)
{
    IRgbColor pColor;
    pColor = new RgbColorClass();

    pColor.Red = r;
    pColor.Green = g;
    pColor.Blue = b;
    return pColor;
}
static public IGeoFeatureLayer GetLevelMap(IGeoFeatureLayer geoFeatureLayer, string field, int classCount)
{

    ITableHistogram tableHistogram;
    IBasicHistogram basicHistogram;
    ITable table;

    ILayer layer = geoFeatureLayer as ILayer;
    table = layer as ITable;
    tableHistogram = new BasicTableHistogramClass();
    //按照 数值字段分级
    tableHistogram.Table = table;
    tableHistogram.Field = field;
    basicHistogram = tableHistogram as IBasicHistogram;
    object values;
    object frequencys;
    //先统计每个值和各个值出现的次数
    basicHistogram.GetHistogram(out values, out frequencys);
    //创建平均分级对象
    IClassifyGEN classifyGEN = new QuantileClass();
    //用统计结果进行分级 ,级别数目为classCount
    classifyGEN.Classify(values, frequencys, ref classCount);
    //获得分级结果,是个 双精度类型数组
    double[] classes;
    classes = classifyGEN.ClassBreaks as double[];

    IEnumColors enumColors = CreateAlgorithmicColorRamp(classes.Length).Colors;
    IColor color;

    IClassBreaksRenderer classBreaksRenderer = new ClassBreaksRendererClass();
    classBreaksRenderer.Field = field;
    classBreaksRenderer.BreakCount = classCount;
    classBreaksRenderer.SortClassesAscending = true;

    ISimpleFillSymbol simpleFillSymbol;

    for (int i = 0; i < classes.Length - 1; i++)
    {
        color = enumColors.Next();
        simpleFillSymbol = new SimpleFillSymbolClass();
        simpleFillSymbol.Color = color;
        simpleFillSymbol.Style = esriSimpleFillStyle.esriSFSSolid;
        classBreaksRenderer.set_Symbol(i, simpleFillSymbol as ISymbol);
        classBreaksRenderer.set_Break(i, classes[i + 1]);

        //构造显示的文字
        classBreaksRenderer.set_Label(i, classes[i].ToString() + "——" + classes[i + 1].ToString());
        classBreaksRenderer.set_Description(i, "sfhskdfks");
        //着色对象的断点

    }

    if (geoFeatureLayer != null)
    {
        geoFeatureLayer.Renderer = classBreaksRenderer as IFeatureRenderer;
    }
    return geoFeatureLayer;
}

static public IGeoFeatureLayer GetChartMap(IGeoFeatureLayer geofeatureLayer, List<string> fields, List<string> alias)
{
    //   IGeoFeatureLayer geofeatureLayer = Lib.Layer.getShpLayer(path, layerName)  as IGeoFeatureLayer; 
    ITable table = geofeatureLayer as ITable;
    geofeatureLayer.ScaleSymbols = true;
    IChartRenderer chartRenderer = new ChartRendererClass();
    IRendererFields rendererFields = chartRenderer as IRendererFields;
    for (int i = 0; i < fields.Count; i++)
    {
        rendererFields.AddField(fields[i], alias[i]);
    }

    double maxValue = 0;
    ICursor cursor = table.Search(null, true);
    IRowBuffer rowBuffer = cursor.NextRow();
    while (rowBuffer != null)
    {
        for (int i = 0; i < fields.Count; i++)
        {
            double fieldValue;
            try
            {
                fieldValue = double.Parse(rowBuffer.get_Value(table.FindField(fields[i])).ToString());
            }
            catch (Exception ex)
            {
                fieldValue = 0;
            }
            maxValue = Math.Max(maxValue, fieldValue);
        }
        rowBuffer = cursor.NextRow();
    }
    IBarChartSymbol barChartSymbol = new BarChartSymbolClass();
    barChartSymbol.Width = 5;
    IMarkerSymbol markerSymbol = barChartSymbol as IMarkerSymbol;
    markerSymbol.Size = 50;
    IChartSymbol chartSymbol = barChartSymbol as IChartSymbol;
    chartSymbol.MaxValue = maxValue;

    //添加渲染符号
    ISymbolArray symbolArray = barChartSymbol as ISymbolArray;
    IFillSymbol fillSymbol;
    IColorRamp colors = CreateRandomColorRamp(fields.Count);
    for (int i = 0; i < fields.Count; i++)
    {
        fillSymbol = new SimpleFillSymbolClass();
        fillSymbol.Color = colors.get_Color(i);
        symbolArray.AddSymbol(fillSymbol as ISymbol);
    }
    //设置柱状图符号
    chartRenderer.ChartSymbol = barChartSymbol as IChartSymbol;
    fillSymbol = new SimpleFillSymbolClass();

    fillSymbol.Color = getRGB(0, 255, 255);
    fillSymbol.Color.Transparency = 2;
    chartRenderer.BaseSymbol = fillSymbol as ISymbol;
    chartRenderer.UseOverposter = false;

    //创建图例
    chartRenderer.CreateLegend();
    geofeatureLayer.Renderer = chartRenderer as IFeatureRenderer;
    return geofeatureLayer;

}
////生成颜色带 
static public IColorRamp CreateAlgorithmicColorRamp(int count)
{
    //IUniqueValueRenderer pUniqueValueR;
    IEnumColors pEnumRamp;
    AlgorithmicColorRamp pColorRamp;
    //pUniqueValueR = new UniqueValueRendererClass();
    //pUniqueValueR.FieldCount = 1;
    //pUniqueValueR.set_Field(0, FielName);

    pColorRamp = new AlgorithmicColorRampClass();
    pColorRamp.FromColor = getRGB(255, 255, 255);
    pColorRamp.ToColor = getRGB(32, 200, 150);
    pColorRamp.Size = count;

    bool ok = true;
    pColorRamp.CreateRamp(out ok);
    pEnumRamp = pColorRamp.Colors;
    return pColorRamp;
}
//生成颜色带 
static public IColorRamp CreateRandomColorRamp(int count)
{
    //IUniqueValueRenderer pUniqueValueR;
    IEnumColors pEnumRamp;
    IRandomColorRamp pColorRamp;
    //pUniqueValueR = new UniqueValueRendererClass();
    //pUniqueValueR.FieldCount = 1;
    //pUniqueValueR.set_Field(0, FielName);

    pColorRamp = new RandomColorRampClass();
    pColorRamp.StartHue = 0;
    pColorRamp.MinValue = 99;
    pColorRamp.MinSaturation = 15;
    pColorRamp.EndHue = 360;
    pColorRamp.MaxValue = 100;
    pColorRamp.MaxSaturation = 30;
    pColorRamp.Size = count * 2;

    bool ok = true;
    pColorRamp.CreateRamp(out ok);
    pEnumRamp = pColorRamp.Colors;
    return pColorRamp;
}
static public IGeoFeatureLayer GetSimpleSymbolLayer(IGeoFeatureLayer geoFeatureLayer, string field)
{
    //  getGeoLayer("sichuan_county_landuse");
    IUniqueValueRenderer uniqueValueRenderer = new UniqueValueRendererClass();
    uniqueValueRenderer.FieldCount = 1;
    uniqueValueRenderer.set_Field(0, field);
    //简单填充符号

    ISimpleFillSymbol simpleFillSymbol = new SimpleFillSymbolClass();
    simpleFillSymbol.Style = esriSimpleFillStyle.esriSFSSolid;
    int areaNum = geoFeatureLayer.FeatureClass.FeatureCount(null);
    IFeatureCursor featureCursor = geoFeatureLayer.FeatureClass.Search(null, false);
    IFeature feature;
    if (featureCursor != null)
    {
        IEnumColors enumColors = CreateRandomColorRamp(areaNum).Colors;
        int fieldIndex = geoFeatureLayer.FeatureClass.Fields.FindField(field);
        feature = featureCursor.NextFeature();
        while (feature != null)
        {
            string nameValue = feature.get_Value(fieldIndex).ToString();
            simpleFillSymbol = new SimpleFillSymbolClass();
            simpleFillSymbol.Color = enumColors.Next();
            uniqueValueRenderer.AddValue(nameValue, field, simpleFillSymbol as ISymbol);
            feature = featureCursor.NextFeature();
        }
    }
    geoFeatureLayer.Renderer = uniqueValueRenderer as IFeatureRenderer;
    return geoFeatureLayer;
}

posted @ 2013-04-06 13:54  adodo1  Views(461)  Comments(0Edit  收藏  举报