arcengine 的几种统计图绘制
来源:互联网 发布:洛奇英雄传mac版 编辑:程序博客网 时间:2024/05/23 00:41
//获取颜色对象 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; }