Example #1
0
        /// <summary>
        /// BarChartRenderer柱状图渲染:根据一个或多个数字字段的值配置柱状图渲染图层
        /// </summary>
        /// <param name="geoFeatureLayer"></param>
        /// <param name="fieldNameColorDict"></param>
        public static void SetBarCharRenderer(this IGeoFeatureLayer geoFeatureLayer, Dictionary <string, IColor> fieldNameColorDict)
        {
            //创建柱状符号
            IBarChartSymbol barChartSymbol = new BarChartSymbolClass {
                Width = 12
            };

            //获取两个字段的最大值,设置柱状图各柱状符号
            double       maxValue    = 0;
            ISymbolArray symbolArray = (ISymbolArray)barChartSymbol;

            foreach (var pair in fieldNameColorDict)
            {
                var value = geoFeatureLayer.FeatureClass.Statistics(pair.Key, null, EStatisticsType.Maximum);
                if (value > maxValue)
                {
                    maxValue = value;
                }

                IFillSymbol fillSymbol = new SimpleFillSymbol {
                    Color = pair.Value
                };
                symbolArray.AddSymbol((ISymbol)fillSymbol);
            }

            //设置ChartSymbol的最大值,以及符号尺寸最大值(像素单位)
            IChartSymbol  chartSymbol  = (IChartSymbol)barChartSymbol;
            IMarkerSymbol markerSymbol = (IMarkerSymbol)barChartSymbol;

            chartSymbol.MaxValue = maxValue;
            markerSymbol.Size    = 60;

            //设置字段,依据字段的数据值,创建柱状图
            IChartRenderer  chartRenderer  = new ChartRendererClass();
            IRendererFields rendererFields = (IRendererFields)chartRenderer;

            foreach (var pair in fieldNameColorDict)
            {
                rendererFields.AddField(pair.Key, pair.Key);
            }

            //设置图层的背景颜色
            chartRenderer.ChartSymbol = (IChartSymbol)barChartSymbol;
            chartRenderer.BaseSymbol  = new SimpleFillSymbolClass {
                Color = ColorCreate.GetIColor(239, 228, 190)
            };

            //设置其他属性
            chartRenderer.UseOverposter = false;
            chartRenderer.CreateLegend();//创建符号图例
            chartRenderer.Label = "";

            geoFeatureLayer.Renderer = chartRenderer as IFeatureRenderer;
        }
Example #2
0
        public ChartRender(AxMapControl pMapcontrol, IFeatureLayer pFtLayer, string pFieldName)
        {
            IGeoFeatureLayer pGeoFeaturelayer = pFtLayer as IGeoFeatureLayer;

            IChartRenderer pChart = new ChartRendererClass();



            IDataStatistics pDataStat = new DataStatisticsClass();

            IFeatureCursor pFtCursor = pFtLayer.FeatureClass.Search(null, false);

            pDataStat.Cursor = pFtCursor as ICursor;

            pDataStat.Field = pFieldName;

            double pMax = pDataStat.Statistics.Maximum;



            IRendererFields pRenderFields = pChart as IRendererFields;

            pRenderFields.AddField(pFieldName, pFieldName);

            IBarChartSymbol pBarChart = new BarChartSymbolClass();

            pBarChart.Width = 5;


            IMarkerSymbol pMarkerSymbol = pBarChart as IMarkerSymbol;


            pMarkerSymbol.Size = 12;


            IChartSymbol pChartSym = pBarChart as IChartSymbol;

            pChartSym.MaxValue = pMax;


            ISymbolArray pSymbolArr = pBarChart as ISymbolArray;


            IFillSymbol pFillSy = new SimpleFillSymbolClass();

            pFillSy.Color = GetRgb(220, 0, 0);

            pSymbolArr.AddSymbol(pFillSy as ISymbol);

            pGeoFeaturelayer.Renderer = pChart as IFeatureRenderer;


            pMapcontrol.ActiveView.PartialRefresh(esriViewDrawPhase.esriViewGeography, null, null);
        }
        public ChartRender(AxMapControl pMapcontrol, IFeatureLayer pFtLayer, string pFieldName)
        {
            IGeoFeatureLayer pGeoFeaturelayer = pFtLayer as IGeoFeatureLayer;

            IChartRenderer pChart = new ChartRendererClass();

            IDataStatistics pDataStat = new DataStatisticsClass();

            IFeatureCursor pFtCursor = pFtLayer.FeatureClass.Search(null, false);

            pDataStat.Cursor = pFtCursor as ICursor;

            pDataStat.Field = pFieldName;

            double pMax = pDataStat.Statistics.Maximum;

            IRendererFields pRenderFields = pChart as IRendererFields;

            pRenderFields.AddField(pFieldName,pFieldName);

            IBarChartSymbol pBarChart = new BarChartSymbolClass();

            pBarChart.Width = 5;

            IMarkerSymbol pMarkerSymbol = pBarChart as IMarkerSymbol;

            pMarkerSymbol.Size = 12;

            IChartSymbol pChartSym = pBarChart as IChartSymbol;

            pChartSym.MaxValue = pMax;

            ISymbolArray pSymbolArr = pBarChart as ISymbolArray;

            IFillSymbol pFillSy = new SimpleFillSymbolClass();

            pFillSy.Color = GetRgb(220, 0, 0);

            pSymbolArr.AddSymbol(pFillSy as ISymbol);

            pGeoFeaturelayer.Renderer = pChart as IFeatureRenderer;

            pMapcontrol.ActiveView.PartialRefresh(esriViewDrawPhase.esriViewGeography, null, null);
        }
        private IChartRenderer CreateRenderer(IFeatureClass featureClass)
        {
            if (chartSymbol == null)
            {
                return(null);
            }

            double dmaxValue = 0.0;

            dmaxValue            = FindMaxValueInRendererFields(featureClass);
            chartSymbol.MaxValue = dmaxValue;

            IMarkerSymbol pMarkerSymbol = (IMarkerSymbol)chartSymbol;

            pMarkerSymbol.Size = symbolSize;
            //Now set up symbols for each bar
            ISymbolArray pSymbolArray = (ISymbolArray)chartSymbol;

            pSymbolArray.ClearSymbols();
            IChartRenderer  pChartRenderer  = new ChartRendererClass();
            IRendererFields pRendererFields = (IRendererFields)pChartRenderer;

            foreach (System.Collections.DictionaryEntry de in fieldSymbolHashTable)
            {
                string  strField = de.Key.ToString();;
                ISymbol symbol   = de.Value as ISymbol;
                pRendererFields.AddField(strField, strField);
                pSymbolArray.AddSymbol(symbol);
            }

            pChartRenderer.ChartSymbol   = chartSymbol;
            pChartRenderer.Label         = "统计符号化";
            pChartRenderer.UseOverposter = false;

            if (gBaseSymbol != nudDotSize)
            {
                pChartRenderer.BaseSymbol = gBaseSymbol;
            }
            pChartRenderer.CreateLegend();

            return(pChartRenderer);
        }
        private void ChartRenderer(IFeatureLayer pFeatLyr, Dictionary <string, IRgbColor> dicFieldAndColor)
        {
            IChartRenderer  chartRenderer = new ChartRendererClass();
            IDataStatistics dataSta       = new DataStatisticsClass();

            dataSta.Field  = m_pTarField.Name;
            dataSta.Cursor = m_pTarFeatureClass.Search(null, false) as ICursor;
            double max = Double.MinValue;

            foreach (string fieldName in dicFieldAndColor.Keys)
            {
                (chartRenderer as IRendererFields).AddField(fieldName, fieldName);
                max = max > dataSta.Statistics.Maximum ? max : dataSta.Statistics.Maximum;
            }
            IBarChartSymbol barSyb = null;

            barSyb = new BarChartSymbolClass();
            (barSyb as IChartSymbol).MaxValue = max;
            barSyb.Width = 6;
            (barSyb as IMarkerSymbol).Size = 30;

            IFillSymbol barSymbol = new SimpleFillSymbolClass();

            barSymbol.Color = m_pFillColor;
            (barSyb as ISymbolArray).AddSymbol(barSymbol as ISymbol);

            IFillSymbol baseSymbol = new SimpleFillSymbolClass();

            baseSymbol.Color = m_pOutlineColor;

            chartRenderer.ChartSymbol      = barSyb as IChartSymbol;
            chartRenderer.BaseSymbol       = baseSymbol as ISymbol;
            m_pTarGeoFeatureLayer.Renderer = chartRenderer as IFeatureRenderer;
            chartRenderer.CreateLegend();
            frmMainOper(OperationType.RefreshMapCtrl);
            frmMainOper(OperationType.UpdateTOCCtrl);
        }
        private void btn_OK_Click(object sender, EventArgs e)
        {
            string LayerName = cbx_Layer.SelectedItem.ToString();

            IGeoFeatureLayer pGeoFeatureLayer = (IGeoFeatureLayer)m_FeatureLayer;
            ITable           pTable           = (ITable)pGeoFeatureLayer;
            ICursor          pCursor          = pTable.Search(null, true);

            int numFields = lstbx_RightFields.Items.Count;

            string[] fildName      = new string[numFields];
            int[]    fieldIndecies = new int[numFields];

            for (int i = 0; i < numFields; i++)
            {
                if (lstbx_RightFields.Items[i].ToString() != "None")
                {
                    fildName[i]      = lstbx_RightFields.Items[i].ToString();
                    fieldIndecies[i] = pTable.FindField(fildName[i]);
                }
                else
                {
                    MessageBox.Show("不可用的字段,请选择其它图层");
                    return;
                }
            }
            //fieldIndecies[0] = pTable.FindField(strPopField1);
            //fieldIndecies[1] = pTable.FindField(strPopField2);
            bool   firstValue = true;
            double dmaxValue  = 0.0;
            //Iterate across each feature
            IRowBuffer pRowBuffer = pCursor.NextRow();
            double     dfieldValue;

            while (pRowBuffer != null)
            {
                // iterate  through each data field and update the maxVal if needed
                for (int lfieldIndex = 0; lfieldIndex <= numFields - 1; lfieldIndex++)
                {
                    dfieldValue = (double)pRowBuffer.get_Value(fieldIndecies[lfieldIndex]);
                    if (firstValue)
                    {
                        // Special case for the first value in a feature class
                        dmaxValue  = dfieldValue;
                        firstValue = false;
                    }
                    else
                    {
                        if (dfieldValue > dmaxValue)
                        {
                            // we've got a new biggest value
                            dmaxValue = dfieldValue;
                        }
                    }
                }
                pRowBuffer = pCursor.NextRow();
            }
            if (dmaxValue <= 0)
            {
                MessageBox.Show("Failed to gather stats on the feature class");
                return;
            }

            IChartRenderer pChartRenderer = new ChartRendererClass();
            //Set up the fields to draw charts of
            IRendererFields pRendererFields = (IRendererFields)pChartRenderer;

            for (int i = 0; i < numFields; i++)
            {
                pRendererFields.AddField(fildName[i], fildName[i]);
            }


            // Set up the chart marker symbol to use with the renderer
            IPieChartSymbol pPieChartSymbol;

            pPieChartSymbol = new PieChartSymbolClass();
            //饼图使用顺时针方法
            pPieChartSymbol.Clockwise = true;
            //饼图有外轮廓线
            pPieChartSymbol.UseOutline = true;
            IChartSymbol pChartSymbol = (IChartSymbol)pPieChartSymbol;

            pChartSymbol.MaxValue = dmaxValue;
            ILineSymbol pOutline;

            pOutline       = new SimpleLineSymbolClass();
            pOutline.Color = getRGB(213, 212, 252);
            pOutline.Width = 1;
            //设置外轮廓线的样式
            pPieChartSymbol.Outline = pOutline;
            IMarkerSymbol pMarkerSymbol = (IMarkerSymbol)pPieChartSymbol;

            pMarkerSymbol.Size = 8;

            IColorRamp pColorRamp = (IColorRamp)m_StyleGallertItem.Item;

            pColorRamp.Size = pTable.RowCount(null);

            bool ok = true;

            pColorRamp.CreateRamp(out ok);
            IEnumColors  pEnumRamp = pColorRamp.Colors;
            IFillSymbol  pFillSymbol;
            ISymbolArray pSymbolArray = (ISymbolArray)pPieChartSymbol;

            for (int i = 0; i < numFields; i++)
            {
                pFillSymbol = new SimpleFillSymbolClass();
                for (int j = 0; j < 8; j++)
                {
                    pEnumRamp.Next();
                }
                pFillSymbol.Color = pEnumRamp.Next();
                pSymbolArray.AddSymbol((ISymbol)pFillSymbol);
            }


            //Now set the barchart symbol into the renderer
            pChartRenderer.ChartSymbol = (IChartSymbol)pPieChartSymbol;
            // pChartRenderer.Label = "Population";

            //set up the background symbol to use tan color
            pFillSymbol                  = new SimpleFillSymbolClass();
            pFillSymbol.Color            = m_BackGroundColor;
            pChartRenderer.BaseSymbol    = (ISymbol)pFillSymbol;
            pChartRenderer.UseOverposter = false;

            IPieChartRenderer pPieChartRenderer = pChartRenderer as IPieChartRenderer;

            pPieChartRenderer.MinSize = 3;
            //设置最小值,用于尺寸比例
            pPieChartRenderer.MinValue             = 453588;
            pPieChartRenderer.FlanneryCompensation = false;
            pPieChartRenderer.ProportionalBySum    = true;
            //pChartRenderer.Label = "Population";
            //产生图例对象
            pChartRenderer.CreateLegend();
            //pdate the renderer and refresh the screen
            pGeoFeatureLayer.Renderer = (IFeatureRenderer)pChartRenderer;
            m_MapControl.ActiveView.ContentsChanged();
            m_MapControl.ActiveView.PartialRefresh(esriViewDrawPhase.esriViewGeography, null, null);
        }
        public BarRender(AxMapControl pMapcontrol, IFeatureLayer pFtLayer, String pFieldName1, string pFieldName2)
        {
            //IGeoFeatureLayer pGeoFeatureLayer = pFtLayer as IGeoFeatureLayer;


            //IFeatureClass pFeatureClass = pFtLayer.FeatureClass;

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


            //ITable pTable;
            //pTable = pGeoFeatureLayer as ITable;


            //int[] pFieldIndecies = new int[2];


            //pFieldIndecies[0] = pTable.FindField(pFieldName1);
            //pFieldIndecies[1] = pTable.FindField(pFieldName2);



            //IDataStatistics pDataStat = new DataStatisticsClass();

            //IFeatureCursor pFtCursor = pFtLayer.FeatureClass.Search(null, false);

            //pDataStat.Cursor = pFtCursor as ICursor;

            //pDataStat.Field = pFieldName2;

            //double pMax = pDataStat.Statistics.Maximum;

            //// 定义并设置渲染时用的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 = pMax;
            //// 设置bars的最大高度
            //pMarkerSymbol.Size = 80;
            ////下面给每一个bar设置符号

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



            ////添加第一个符号
            //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);



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

            //pChartRenderer.UseOverposter = false;
            ////将柱状图渲染对象与渲染图层挂钩
            //pGeoFeatureLayer.Renderer = (IFeatureRenderer)pChartRenderer;


            ////刷新地图和TOOCotrol
            //IActiveView pActiveView = pMapcontrol .ActiveView as IActiveView;
            //pActiveView.PartialRefresh(esriViewDrawPhase.esriViewGeography, null, null);



            //获取当前图层 ,并把它设置成IGeoFeatureLayer的实例
            IMap             pMap             = pMapcontrol.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(pFieldName1, pFieldName1);
            pRendererFields.AddField(pFieldName2, pFieldName2);

            // 通过查找features的所用字段的值,计算出数据字段的最大值,作为设置柱状图的比例大小的依据
            ITable pTable;
            int    fieldNumber;

            pTable = pGeoFeatureLayer as ITable;
            // 查找出geoFeatureLayer的属性表中的字段个数
            fieldNumber = pTable.FindField(pFieldName1);
            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(pFieldName1);
            fieldIndecies[1] = pTable.FindField(pFieldName2);
            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 = pFieldName1;
            //刷新地图和TOOCotrol
            IActiveView pActiveView = pMapcontrol.Map as IActiveView;

            pActiveView.Refresh();
        }
Example #8
0
        /// <summary>
        /// Bar Chart Render for Enviroment
        /// </summary>
        /// <param name="currentLayer"></param>
        /// <param name="breakCount"></param>
        /// <author>Shen Yongyuan</author>
        /// <date>20091114</date>
        public static void BarChartRenderSingle(ILayer currentLayer)
        {
            //Scale Symbol
            IGeoFeatureLayer pGeoFeatureL = currentLayer as IGeoFeatureLayer;

            pGeoFeatureL.ScaleSymbols = true;

            //Chart Render
            IChartRenderer  pChartRenderer  = new ChartRendererClass();
            IRendererFields pRendererFields = (IRendererFields)pChartRenderer;

            pRendererFields.AddField(Town.Constant.Constant.TmpTableIndex + "." + Town.Constant.Constant.TmpFieldName, "指标");

            //Search Max
            IQueryFilter pQueryFilter = new QueryFilterClass();

            pQueryFilter.AddField(Town.Constant.Constant.TmpTableIndex + "." + Town.Constant.Constant.TmpFieldName);
            IFeatureCursor pCursor = pGeoFeatureL.DisplayFeatureClass.Search(pQueryFilter, true);

            int fldFiledEcology = pCursor.Fields.FindField(Town.Constant.Constant.TmpTableIndex + "." + Town.Constant.Constant.TmpFieldName);

            List <double> valueList = new List <double>();

            IFeature pFeature = pCursor.NextFeature();

            while (pFeature != null)
            {
                valueList.Add(Convert.ToDouble(pFeature.get_Value(fldFiledEcology)));
                pFeature = pCursor.NextFeature();
            }

            //Bar Chart
            IBarChartSymbol pBarChartSymbol = new BarChartSymbolClass();
            IChartSymbol    pChartSymbol    = (IChartSymbol)pBarChartSymbol;

            pBarChartSymbol.Width = 12;
            IMarkerSymbol pMarkerSymbol = (IMarkerSymbol)pBarChartSymbol;

            pChartSymbol.MaxValue = valueList.Max();
            pMarkerSymbol.Size    = 50;

            //Set Symbol
            ISymbolArray      pSymbolArray = (ISymbolArray)pBarChartSymbol;
            ISimpleFillSymbol pFillSymbol  = new SimpleFillSymbolClass();

            pFillSymbol.Color = ArcGIS.Color.ToEsriColor(System.Drawing.Color.Green);
            pSymbolArray.AddSymbol((ISymbol)pFillSymbol);

            //Render Attribute
            pChartRenderer.ChartSymbol   = (IChartSymbol)pBarChartSymbol;
            pChartRenderer.Label         = "指标";
            pChartRenderer.UseOverposter = false;
            pChartRenderer.CreateLegend();

            //Back Ground
            pFillSymbol               = new SimpleFillSymbolClass();
            pFillSymbol.Color         = ArcGIS.Color.ToEsriColor(System.Drawing.Color.FromArgb(239, 228, 190));
            pChartRenderer.BaseSymbol = (ISymbol)pFillSymbol;

            //Render Label
            pGeoFeatureL.Renderer = pChartRenderer as IFeatureRenderer;
        }
Example #9
0
        /// <summary>
        /// 得到Renderer从数据库中
        /// </summary>
        /// <returns></returns>
        public static object GetRendererFromBlob(string sql, IWorkspace pConfigWks)
        {
            Exception err = null;

            SysCommon.Gis.IGisTable pGISTable = new SysCommon.Gis.SysGisTable(pConfigWks);

            //获取Renderer
            byte[] renderByte = pGISTable.GetFieldValue("Render", "Render", sql, out err) as byte[];

            //是否得到了序列化的blob,没得到,则返回NULL
            if (renderByte == null)
            {
                return(null);
            }

            IMemoryBlobStreamVariant pMemoryBlobStreamVariant = new MemoryBlobStreamClass();

            pMemoryBlobStreamVariant.ImportFromVariant((object)renderByte);
            IStream pStream = pMemoryBlobStreamVariant as IStream;

            //从数据库中得到符号的类型  shduan 20110721 增加RasterRenderer
            string strRenderType = pGISTable.GetFieldValue("Render", "RenderType", sql, out err).ToString();
            string strLyrType    = pGISTable.GetFieldValue("Render", "LayerType", sql, out err).ToString();

            if (strLyrType == "RasterLayer")
            {
                IRasterRenderer pRRenderer = null;
                switch (strRenderType)
                {
                case "RasterClassifyColorRampRenderer":
                    pRRenderer = new RasterClassifyColorRampRendererClass();
                    break;

                case "RasterUniqueValueRenderer":
                    pRRenderer = new RasterUniqueValueRendererClass();
                    break;

                case "RasterDiscreteColorRenderer":
                    pRRenderer = new RasterDiscreteColorRendererClass();
                    break;

                case "RasterRGBRenderer":
                    pRRenderer = new RasterRGBRendererClass();
                    break;

                case "RasterStretchColorRampRenderer":
                    pRRenderer = new RasterStretchColorRampRendererClass();
                    break;
                }
                IPersistStream pPersistStream = pRRenderer as IPersistStream;
                pPersistStream.Load(pStream);
                //pRRenderer = pPersistStream as IRasterRenderer;

                return(pRRenderer);
            }
            else
            {
                IFeatureRenderer pFRenderer = null;
                switch (strRenderType)
                {
                case "AnnoColor":
                    string sAnnoColor = Encoding.Default.GetString(renderByte);
                    return((object)sAnnoColor);

                case "SimpleRenderer":
                    pFRenderer = new SimpleRendererClass();
                    break;

                case "UniqueValueRenderer":
                    pFRenderer = new UniqueValueRendererClass();
                    break;

                case "ClassBreaksRenderer":
                    pFRenderer = new ClassBreaksRendererClass();
                    break;

                case "ProportionalSymbolRenderer":
                    pFRenderer = new ProportionalSymbolRendererClass();
                    break;

                case "ChartRenderer":
                    pFRenderer = new ChartRendererClass();
                    break;
                }
                IPersistStream pPersistStream = pFRenderer as IPersistStream;
                pPersistStream.Load(pStream);
                pFRenderer = pPersistStream as IFeatureRenderer;

                return(pFRenderer);
            }
        }
        public PieRender(AxMapControl pMapcontrol, IFeatureLayer pFtLayer, string pFieldName1, string pFieldName2)
        {
            IGeoFeatureLayer pGeoFeaLayer = (IGeoFeatureLayer)pFtLayer;
            IChartRenderer pChartRenderer = new ChartRendererClass();
            // Set up the field to draw charts
            IRendererFields pRenderFields = (IRendererFields)pChartRenderer;
            pRenderFields.AddField(pFieldName1, pFieldName1);
            pRenderFields.AddField(pFieldName2, pFieldName2);
            IPieChartRenderer pPieChartRender = (IPieChartRenderer)pChartRenderer;

            //计算最大值部分有待补充////////////////////////////////////
            //Calculate the max value of the data field to scale the chart

            //ICursor pCursor = new CursorClass();
            IQueryFilter pQueryFilter = new QueryFilterClass();
            //IRowBuffer pRow = new RowBufferClass();
            ITable pTable = (ITable)pGeoFeaLayer;
            pQueryFilter.AddField(pFieldName1);
            ICursor pCursor = pTable.Search(pQueryFilter, true);

            IDataStatistics pDataStat = new DataStatisticsClass();

            IFeatureCursor pFtCursor = pFtLayer.FeatureClass.Search(null, false);

            pDataStat.Cursor = pFtCursor as ICursor;

            pDataStat.Field = pFieldName1;

            double pMax = pDataStat.Statistics.Maximum;

            IPieChartSymbol pPiechartSymbol = new PieChartSymbolClass();
            IFillSymbol pFillSymbol = new SimpleFillSymbolClass();
            IChartSymbol pChartSymbol = (IChartSymbol)pPiechartSymbol;
            pPiechartSymbol.Clockwise = true;
            pPiechartSymbol.UseOutline = true;
            ILineSymbol pOutLine = new SimpleLineSymbolClass();
            pOutLine.Color = GetRGBColor(255, 0, 255);
            pOutLine.Width = 1;
            pPiechartSymbol.Outline = pOutLine;

            IMarkerSymbol pMarkerSymbol = (IMarkerSymbol)pPiechartSymbol;
            //finally
            pChartSymbol.MaxValue = pMax;
            pMarkerSymbol.Size = 16;
            //像符号数组中添加 添加符号
            ISymbolArray pSymbolArray = (ISymbolArray)pPiechartSymbol;
            pFillSymbol.Color = GetRGBColor(213, 212, 252);
            pFillSymbol.Outline = pOutLine;
            pSymbolArray.AddSymbol((ISymbol)pFillSymbol);
            //////////////////////////
            pFillSymbol.Color = GetRGBColor(183, 242, 122);
            pFillSymbol.Outline = pOutLine;
            pSymbolArray.AddSymbol((ISymbol)pFillSymbol);
            //set up the background
            pFillSymbol.Color = GetRGBColor(239, 228, 190);
            pChartRenderer.BaseSymbol = (ISymbol)pFillSymbol;
            pChartRenderer.UseOverposter = false;
            pPieChartRender.MinSize = 1;
            pPieChartRender.MinValue = pDataStat.Statistics.Minimum;
            pPieChartRender.FlanneryCompensation = false;
            pPieChartRender.ProportionalBySum = true;
            pChartRenderer.ChartSymbol = (IChartSymbol)pPiechartSymbol;
            pChartRenderer.CreateLegend();
            pGeoFeaLayer.Renderer = (IFeatureRenderer)pChartRenderer;
            pMapcontrol.ActiveView.Refresh();
        }
Example #11
0
        private void btnStackedChartRender_Click(object sender, EventArgs e)
        {
            IGeoFeatureLayer pGeoFeatLyr = (IGeoFeatureLayer)this.mainMapControl.get_Layer(0);

            double p1, p2, max;//比较制作专题图所用两个字段的最大值的最大
            ICursor pCursor = (ICursor)pGeoFeatLyr.Search(null, true);
            IDataStatistics pDataStatistics = new DataStatisticsClass();
            pDataStatistics.Cursor = pCursor;
            pDataStatistics.Field = "GDP_1999(";
            p1 = pDataStatistics.Statistics.Maximum;
            pCursor = (ICursor)pGeoFeatLyr.Search(null, true);//重新设置Cursor,为什么一定要这样?
            //pDataStatistics.Cursor = null;
            pDataStatistics.Cursor = pCursor;
            pDataStatistics.Field = "GDP_1994(";
            p2 = pDataStatistics.Statistics.Maximum;
            //MessageBox.Show(p1.ToString() + "\n" + p2.ToString());
            max = p1 > p2 ? p1 : p2;

            //以下创造3个SimpleFillSymbol,供下面使用
            ISimpleFillSymbol pSimpleFillSymbol = new SimpleFillSymbolClass();
            pSimpleFillSymbol.Color = getRGBColor(255, 0, 0);
            pSimpleFillSymbol.Outline = null;
            ISimpleFillSymbol pSimpleFillSymbol2 = new SimpleFillSymbolClass();
            pSimpleFillSymbol2.Color = getRGBColor(0, 0, 255);
            pSimpleFillSymbol2.Outline = null;
            ISimpleFillSymbol pSimpleFillSymbol3 = new SimpleFillSymbolClass();
            pSimpleFillSymbol3.Color = getRGBColor(0, 255, 0);

            //以下代码设置StackedChart符号,和StackedChart符号的各符号
            IStackedChartSymbol pStackedChartSymbol = new StackedChartSymbolClass();//Stached符号
            pStackedChartSymbol.Width = 6;//宽度
            pStackedChartSymbol.Fixed = false;//不固定长度
            IChartSymbol pChartSymbol = pStackedChartSymbol as IChartSymbol;
            pChartSymbol.MaxValue = max;//必须
            IMarkerSymbol pMarkerSymbol = pStackedChartSymbol as IMarkerSymbol;
            pMarkerSymbol.Size = 60;//符号大小
            ISymbolArray pSymbolArray = pStackedChartSymbol as ISymbolArray;//SymbolArray
            pSymbolArray.AddSymbol((ISymbol)pSimpleFillSymbol);//添加符号
            pSymbolArray.AddSymbol((ISymbol)pSimpleFillSymbol2);//添加符号

            //以下代码设置着色对象
            IChartRenderer pChartRenderer = new ChartRendererClass();
            IRendererFields pRendererFields = pChartRenderer as IRendererFields;
            pRendererFields.AddField("GDP_1999(", "GDP_1999(");
            pRendererFields.AddField("GDP_1994(", "GDP_1994(");
            pChartRenderer.ChartSymbol = (IChartSymbol)pStackedChartSymbol;//设置符号
            pChartRenderer.Label = "GDP";
            pChartRenderer.BaseSymbol = pSimpleFillSymbol3 as ISymbol;//背景
            pChartRenderer.UseOverposter = true;//防止重叠
            pChartRenderer.CreateLegend();//创造图例,关键!!!!!!!!!

            pGeoFeatLyr.Renderer = (IFeatureRenderer)pChartRenderer;
            this.mainMapControl.ActiveView.PartialRefresh(esriViewDrawPhase.esriViewGeography, null, null);
            this.axTOCControl.Update();
        }
Example #12
0
        private void btnPieChartRender_Click(object sender, EventArgs e)
        {
            IGeoFeatureLayer pGeoFeatLyr = this.mainMapControl.get_Layer(0) as IGeoFeatureLayer;

            //找出两个用于着色字段的最大值的最大值(这次加上最小值之和,这个函数的尾后部分用到,用于在着色对象里确定最小的PieChartSymbol的大小)
            double p1, p2, max, m1, m2, min;
            ICursor pCursor = pGeoFeatLyr.Search(null, true) as ICursor;
            IDataStatistics pDataStatistics = new DataStatisticsClass();
            pDataStatistics.Cursor = pCursor;
            pDataStatistics.Field = "GDP_1994(";
            p1 = pDataStatistics.Statistics.Maximum;
            m1 = pDataStatistics.Statistics.Minimum;
            pCursor = pGeoFeatLyr.Search(null, true) as ICursor;
            pDataStatistics.Cursor = pCursor;
            pDataStatistics.Field = "GDP_1999(";
            p2 = pDataStatistics.Statistics.Maximum;
            m2 = pDataStatistics.Statistics.Minimum;
            max = p1 > p2 ? p1 : p2;
            min = m1 + m2;//最小值之和

            //以下生成好三个SimpleFillSymbol,留作后用
            ISimpleFillSymbol pSimpleFillSymbol = new SimpleFillSymbolClass();
            pSimpleFillSymbol.Color = getRGBColor(255, 0, 0);
            pSimpleFillSymbol.Outline = null;
            ISimpleFillSymbol pSimpleFillSymbol2 = new SimpleFillSymbolClass();
            pSimpleFillSymbol2.Color = getRGBColor(0, 0, 255);
            pSimpleFillSymbol2.Outline = null;
            ISimpleFillSymbol pSimpleFillSymbol3 = new SimpleFillSymbolClass();
            pSimpleFillSymbol3.Color = getRGBColor(0, 255, 0);

            //以下创建并设置PieChartSymbol对象,并设置PieChartSymbol对象的各个SimpleFillSymbol
            IPieChartSymbol pPieChartSymbol = new PieChartSymbolClass();
            pPieChartSymbol.Clockwise = true;
            pPieChartSymbol.UseOutline = false;
            IChartSymbol pChartSymbol = pPieChartSymbol as IChartSymbol;
            pChartSymbol.MaxValue = max;
            ISymbolArray pSymbolArray = pPieChartSymbol as ISymbolArray;
            pSymbolArray.AddSymbol((ISymbol)pSimpleFillSymbol);
            pSymbolArray.AddSymbol((ISymbol)pSimpleFillSymbol2);
            IMarkerSymbol pMarkerSymbol = pPieChartSymbol as IMarkerSymbol;
            pMarkerSymbol.Size = 5;//PieChartSymbol的大小(我觉得是饼的厚度)

            //以下创建并设置着色对象
            IChartRenderer pChartRenderer = new ChartRendererClass();
            pChartRenderer.BaseSymbol = pSimpleFillSymbol3 as ISymbol;
            pChartRenderer.ChartSymbol = pChartSymbol;
            pChartRenderer.UseOverposter = true;
            pChartRenderer.Label = "GDP";
            IPieChartRenderer pPieChartRenderer = pChartRenderer as IPieChartRenderer;
            pPieChartRenderer.MinSize = 0.5;//最小的尺码关键
            pPieChartRenderer.MinValue = 1;//最小尺码的值,为什么0不可以??????????????关键
            pPieChartRenderer.ProportionalBySum = true;//PieChartSymbol的大小按照字段和成比例,关键
                                                       //若PieChartSymbol的大小只按一个字段,则须设置.ProportionalField为该字段
            IRendererFields pRenderFields = pChartRenderer as IRendererFields;//添加用于着色的字段
            pRenderFields.AddField("GDP_1994(", "GDP_1994(");
            pRenderFields.AddField("GDP_1999(", "GDP_1999(");
            pChartRenderer.CreateLegend();//生成图例

            pGeoFeatLyr.Renderer = pChartRenderer as IFeatureRenderer;
            this.mainMapControl.ActiveView.PartialRefresh(esriViewDrawPhase.esriViewGeography, null, null);
            this.axTOCControl.Update();
        }
Example #13
0
        //此专题图制作跟StackedChart差不多
        private void btnBarChartRender_Click(object sender, EventArgs e)
        {
            IGeoFeatureLayer pGeoFeatLyr = this.mainMapControl.get_Layer(0) as IGeoFeatureLayer;

            //用DataStatistics对象,得到两个字段最大值的较大值(最最大)
            double p1, p2, max;
            ICursor pCursor = (ICursor)pGeoFeatLyr.Search(null, true);
            IDataStatistics pDataStatistics = new DataStatisticsClass();
            pDataStatistics.Cursor = pCursor;
            pDataStatistics.Field = "GDP_1999(";
            p1 = pDataStatistics.Statistics.Maximum;
            pCursor = (ICursor)pGeoFeatLyr.Search(null, true);
            pDataStatistics.Cursor = pCursor;
            pDataStatistics.Field = "GDP_1994(";
            p2 = pDataStatistics.Statistics.Maximum;
            max = p1 > p2 ? p1 : p2;

            //以下生成好三个SimpleFillSymbol,留作后用
            ISimpleFillSymbol pSimpleFillSymbol = new SimpleFillSymbolClass();
            pSimpleFillSymbol.Color = getRGBColor(255, 0, 0);
            pSimpleFillSymbol.Outline = null;
            ISimpleFillSymbol pSimpleFillSymbol2 = new SimpleFillSymbolClass();
            pSimpleFillSymbol2.Color = getRGBColor(0, 0, 255);
            pSimpleFillSymbol2.Outline = null;
            ISimpleFillSymbol pSimpleFillSymbol3 = new SimpleFillSymbolClass();
            pSimpleFillSymbol3.Color = getRGBColor(0, 255, 0);

            //创建并设置BarChartSymbol,以及设置好BarChartSymbol里的各自Symbol
            IBarChartSymbol pBarChartSymbol = new BarChartSymbolClass();
            pBarChartSymbol.Width = 6;//宽度
            pBarChartSymbol.Spacing = 1;//Bar之间的间隔
            IChartSymbol pChartSymbol = pBarChartSymbol as IChartSymbol;
            pChartSymbol.MaxValue = max;//用到了上面求出的最大值
            ISymbolArray pSymbolArray = pBarChartSymbol as ISymbolArray;//用于在BarChartSymbol里添加Symbol,关键
            pSymbolArray.AddSymbol((ISymbol)pSimpleFillSymbol);
            pSymbolArray.AddSymbol((ISymbol)pSimpleFillSymbol2);
            IMarkerSymbol pMarkerSymbol = pBarChartSymbol as IMarkerSymbol;
            pMarkerSymbol.Size = 60;//BarChartSymbol符号大小

            //以下创建并设置着色对象
            IChartRenderer pChartRenderer = new ChartRendererClass();
            IRendererFields pRendererFields = pChartRenderer as IRendererFields;//添加用于着色的字段,关键
            pRendererFields.AddField("GDP_1994(", "GDP_1994(");
            pRendererFields.AddField("GDP_1999(", "GDP_1999(");
            pChartRenderer.ChartSymbol = pChartSymbol;//赋给上面创建的BarChartSymbol
            pChartRenderer.BaseSymbol = pSimpleFillSymbol3 as ISymbol;
            pChartRenderer.Label = "GDP";
            pChartRenderer.UseOverposter = true;
            pChartRenderer.CreateLegend();//创建图例,关键

            pGeoFeatLyr.Renderer = pChartRenderer as IFeatureRenderer;
            this.mainMapControl.ActiveView.PartialRefresh(esriViewDrawPhase.esriViewGeography, null, null);
            this.axTOCControl.Update();
        }
Example #14
0
        //PieChartRenderer
        private void button7_Click(object sender, EventArgs e)
        {
            IGeoFeatureLayer geoFeatureLayer;
            IFeatureLayer    featureLayer;
            ITable           table;
            ICursor          cursor;
            IRowBuffer       rowBuffer;
            //设置饼图的要素
            string field1 = "sqmi";
            string field2 = "sqkm";

            //获取渲染图层
            geoFeatureLayer = getGeoLayer("Continents");
            featureLayer    = geoFeatureLayer as IFeatureLayer;
            table           = featureLayer as ITable;
            geoFeatureLayer.ScaleSymbols = true;
            IChartRenderer    chartRenderer    = new ChartRendererClass();
            IPieChartRenderer pieChartRenderer = chartRenderer as IPieChartRenderer;
            IRendererFields   rendererFields   = chartRenderer as IRendererFields;

            rendererFields.AddField(field1, field1);
            rendererFields.AddField(field2, field2);
            int[] fieldIndexs = new int[2];
            fieldIndexs[0] = table.FindField(field1);
            fieldIndexs[1] = table.FindField(field2);
            //获取渲染要素的最大值
            double fieldValue = 0.0, maxValue = 0.0;

            cursor    = table.Search(null, true);
            rowBuffer = cursor.NextRow();
            while (rowBuffer != null)
            {
                for (int i = 0; i < 2; i++)
                {
                    fieldValue = double.Parse(rowBuffer.get_Value(fieldIndexs[i]).ToString());
                    if (fieldValue > maxValue)
                    {
                        maxValue = fieldValue;
                    }
                }
                rowBuffer = cursor.NextRow();
            }
            //设置饼图符号
            IPieChartSymbol pieChartSymbol = new PieChartSymbolClass();

            pieChartSymbol.Clockwise  = true;
            pieChartSymbol.UseOutline = true;
            IChartSymbol chartSymbol       = pieChartSymbol as IChartSymbol;

            chartSymbol.MaxValue = maxValue;
            ILineSymbol lineSymbol = new SimpleLineSymbolClass();

            lineSymbol.Color       = getRGB(255, 0, 0);
            lineSymbol.Width       = 2;
            pieChartSymbol.Outline = lineSymbol;
            IMarkerSymbol markerSymbol = pieChartSymbol as IMarkerSymbol;

            markerSymbol.Size = 30;
            //添加渲染符号
            ISymbolArray symbolArray = pieChartSymbol as ISymbolArray;
            IFillSymbol  fillSymbol  = new SimpleFillSymbolClass();

            fillSymbol.Color = getRGB(0, 255, 0);
            symbolArray.AddSymbol(fillSymbol as ISymbol);
            fillSymbol       = new SimpleFillSymbolClass();
            fillSymbol.Color = getRGB(0, 0, 255);
            symbolArray.AddSymbol(fillSymbol as ISymbol);
            chartRenderer.ChartSymbol = pieChartSymbol as IChartSymbol;
            fillSymbol                  = new SimpleFillSymbolClass();
            fillSymbol.Color            = getRGB(100, 100, 100);
            chartRenderer.BaseSymbol    = fillSymbol as ISymbol;
            chartRenderer.UseOverposter = false;
            //创建图例
            chartRenderer.CreateLegend();
            geoFeatureLayer.Renderer = chartRenderer as IFeatureRenderer;
            this.axMapControl1.Refresh();
        }
        public BarRender(AxMapControl pMapcontrol, IFeatureLayer pFtLayer, String pFieldName1, string pFieldName2)
        {
            //IGeoFeatureLayer pGeoFeatureLayer = pFtLayer as IGeoFeatureLayer;

            //IFeatureClass pFeatureClass = pFtLayer.FeatureClass;

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

            //ITable pTable;
            //pTable = pGeoFeatureLayer as ITable;

            //int[] pFieldIndecies = new int[2];

            //pFieldIndecies[0] = pTable.FindField(pFieldName1);
            //pFieldIndecies[1] = pTable.FindField(pFieldName2);

            //IDataStatistics pDataStat = new DataStatisticsClass();

            //IFeatureCursor pFtCursor = pFtLayer.FeatureClass.Search(null, false);

            //pDataStat.Cursor = pFtCursor as ICursor;

            //pDataStat.Field = pFieldName2;

            //double pMax = pDataStat.Statistics.Maximum;

            //// 定义并设置渲染时用的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 = pMax;
            //// 设置bars的最大高度
            //pMarkerSymbol.Size = 80;
            ////下面给每一个bar设置符号

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

            ////添加第一个符号
            //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);

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

            //pChartRenderer.UseOverposter = false;
            ////将柱状图渲染对象与渲染图层挂钩
            //pGeoFeatureLayer.Renderer = (IFeatureRenderer)pChartRenderer;

            ////刷新地图和TOOCotrol
            //IActiveView pActiveView = pMapcontrol .ActiveView as IActiveView;
            //pActiveView.PartialRefresh(esriViewDrawPhase.esriViewGeography, null, null);

            //获取当前图层 ,并把它设置成IGeoFeatureLayer的实例
            IMap pMap = pMapcontrol.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(pFieldName1, pFieldName1);
            pRendererFields.AddField(pFieldName2, pFieldName2);

            // 通过查找features的所用字段的值,计算出数据字段的最大值,作为设置柱状图的比例大小的依据
            ITable pTable;
            int fieldNumber;
            pTable = pGeoFeatureLayer as ITable;
            // 查找出geoFeatureLayer的属性表中的字段个数
            fieldNumber = pTable.FindField(pFieldName1);
            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(pFieldName1);
            fieldIndecies[1] = pTable.FindField(pFieldName2);
            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 = pFieldName1;
            //刷新地图和TOOCotrol
            IActiveView pActiveView = pMapcontrol.Map as IActiveView;
            pActiveView.Refresh();
        }
        public PieRender(AxMapControl pMapcontrol, IFeatureLayer pFtLayer, string pFieldName1, string pFieldName2)
        {
            IGeoFeatureLayer pGeoFeaLayer   = (IGeoFeatureLayer)pFtLayer;
            IChartRenderer   pChartRenderer = new ChartRendererClass();
            // Set up the field to draw charts
            IRendererFields pRenderFields = (IRendererFields)pChartRenderer;

            pRenderFields.AddField(pFieldName1, pFieldName1);
            pRenderFields.AddField(pFieldName2, pFieldName2);
            IPieChartRenderer pPieChartRender = (IPieChartRenderer)pChartRenderer;

            //计算最大值部分有待补充////////////////////////////////////
            //Calculate the max value of the data field to scale the chart

            //ICursor pCursor = new CursorClass();
            IQueryFilter pQueryFilter = new QueryFilterClass();
            //IRowBuffer pRow = new RowBufferClass();
            ITable pTable = (ITable)pGeoFeaLayer;

            pQueryFilter.AddField(pFieldName1);
            ICursor pCursor = pTable.Search(pQueryFilter, true);

            IDataStatistics pDataStat = new DataStatisticsClass();

            IFeatureCursor pFtCursor = pFtLayer.FeatureClass.Search(null, false);

            pDataStat.Cursor = pFtCursor as ICursor;

            pDataStat.Field = pFieldName1;

            double pMax = pDataStat.Statistics.Maximum;



            IPieChartSymbol pPiechartSymbol = new PieChartSymbolClass();
            IFillSymbol     pFillSymbol     = new SimpleFillSymbolClass();
            IChartSymbol    pChartSymbol    = (IChartSymbol)pPiechartSymbol;

            pPiechartSymbol.Clockwise  = true;
            pPiechartSymbol.UseOutline = true;
            ILineSymbol pOutLine = new SimpleLineSymbolClass();

            pOutLine.Color          = GetRGBColor(255, 0, 255);
            pOutLine.Width          = 1;
            pPiechartSymbol.Outline = pOutLine;

            IMarkerSymbol pMarkerSymbol = (IMarkerSymbol)pPiechartSymbol;

            //finally
            pChartSymbol.MaxValue = pMax;
            pMarkerSymbol.Size    = 16;
            //像符号数组中添加 添加符号
            ISymbolArray pSymbolArray = (ISymbolArray)pPiechartSymbol;

            pFillSymbol.Color   = GetRGBColor(213, 212, 252);
            pFillSymbol.Outline = pOutLine;
            pSymbolArray.AddSymbol((ISymbol)pFillSymbol);
            //////////////////////////
            pFillSymbol.Color   = GetRGBColor(183, 242, 122);
            pFillSymbol.Outline = pOutLine;
            pSymbolArray.AddSymbol((ISymbol)pFillSymbol);
            //set up the background
            pFillSymbol.Color                    = GetRGBColor(239, 228, 190);
            pChartRenderer.BaseSymbol            = (ISymbol)pFillSymbol;
            pChartRenderer.UseOverposter         = false;
            pPieChartRender.MinSize              = 1;
            pPieChartRender.MinValue             = pDataStat.Statistics.Minimum;
            pPieChartRender.FlanneryCompensation = false;
            pPieChartRender.ProportionalBySum    = true;
            pChartRenderer.ChartSymbol           = (IChartSymbol)pPiechartSymbol;
            pChartRenderer.CreateLegend();
            pGeoFeaLayer.Renderer = (IFeatureRenderer)pChartRenderer;
            pMapcontrol.ActiveView.Refresh();
        }
Example #17
0
        private void btnApply_Click(object sender, EventArgs e)
        {
            try
            {
                string strLayerName = cboSourceLayer.Text;
                if (cboSourceLayer.Text == "" || cboValueField.Text == "" || cboUField.Text == "")
                {
                    MessageBox.Show("Assign proper layer and field");
                    return;
                }

                int    intLIndex = pSnippet.GetIndexNumberFromLayerName(pActiveView, strLayerName);
                ILayer pLayer    = mForm.axMapControl1.get_Layer(intLIndex);

                IFeatureLayer pFLayer = pLayer as IFeatureLayer;
                IFeatureClass pFClass = pFLayer.FeatureClass;

                //Create Rendering of Mean Value at Target Layer
                int    intGCBreakeCount = Convert.ToInt32(nudGCNClasses.Value);
                string strGCRenderField = cboValueField.Text;

                IGeoFeatureLayer pGeofeatureLayer;
                if (chkNewLayer.Checked == true)
                {
                    IFeatureLayer pflOutput = new FeatureLayerClass();
                    pflOutput.FeatureClass = pFClass;
                    pflOutput.Name         = txtNewLayer.Text;
                    pflOutput.Visible      = true;

                    pGeofeatureLayer = (IGeoFeatureLayer)pflOutput;
                }
                else
                {
                    pGeofeatureLayer = (IGeoFeatureLayer)pFLayer;
                }

                ITable       pTable = (ITable)pFClass;
                IClassifyGEN pClassifyGEN;
                switch (cboGCClassify.Text)
                {
                case "Equal Interval":
                    pClassifyGEN = new EqualIntervalClass();
                    break;

                case "Geometrical Interval":
                    pClassifyGEN = new GeometricalInterval();
                    break;

                case "Natural Breaks":
                    pClassifyGEN = new NaturalBreaksClass();
                    break;

                case "Quantile":
                    pClassifyGEN = new QuantileClass();
                    break;

                case "StandardDeviation":
                    pClassifyGEN = new StandardDeviationClass();
                    break;

                default:
                    pClassifyGEN = new NaturalBreaksClass();
                    break;
                }

                //Need to be changed 1/29/15
                ITableHistogram pTableHistogram = new BasicTableHistogramClass();
                pTableHistogram.Field = strGCRenderField;
                pTableHistogram.Table = pTable;
                IBasicHistogram pHistogram = (IBasicHistogram)pTableHistogram;

                object xVals, frqs;
                pHistogram.GetHistogram(out xVals, out frqs);
                pClassifyGEN.Classify(xVals, frqs, intGCBreakeCount);

                ClassBreaksRenderer pRender = new ClassBreaksRenderer();
                double[]            cb      = (double[])pClassifyGEN.ClassBreaks;
                pRender.Field        = strGCRenderField;
                pRender.BreakCount   = intGCBreakeCount;
                pRender.MinimumBreak = cb[0];

                //' create our color ramp
                IAlgorithmicColorRamp pColorRamp = new AlgorithmicColorRampClass();
                pColorRamp.Algorithm = esriColorRampAlgorithm.esriCIELabAlgorithm;
                IRgbColor pColor1 = new RgbColor();
                IRgbColor pColor2 = new RgbColor();

                //Can Change the color in here!
                pColor1.Red   = picSymolfrom.BackColor.R;
                pColor1.Green = picSymolfrom.BackColor.G;
                pColor1.Blue  = picSymolfrom.BackColor.B;

                Boolean blnOK = true;
                pColor2.Red          = picSymbolTo.BackColor.R;
                pColor2.Green        = picSymbolTo.BackColor.G;
                pColor2.Blue         = picSymbolTo.BackColor.B;
                pColorRamp.FromColor = pColor1;
                pColorRamp.ToColor   = pColor2;
                pColorRamp.Size      = intGCBreakeCount;
                pColorRamp.CreateRamp(out blnOK);

                IEnumColors pEnumColors = pColorRamp.Colors;
                pEnumColors.Reset();

                IRgbColor pColorOutline = new RgbColor();
                //Can Change the color in here!
                pColorOutline.Red   = picGCLineColor.BackColor.R;
                pColorOutline.Green = picGCLineColor.BackColor.G;
                pColorOutline.Blue  = picGCLineColor.BackColor.B;
                double dblGCOutlineSize = Convert.ToDouble(nudGCLinewidth.Value);

                ICartographicLineSymbol pOutLines = new CartographicLineSymbol();
                pOutLines.Width = dblGCOutlineSize;
                pOutLines.Color = (IColor)pColorOutline;

                //' use this interface to set dialog properties
                IClassBreaksUIProperties pUIProperties = (IClassBreaksUIProperties)pRender;
                pUIProperties.ColorRamp = "Custom";

                ISimpleFillSymbol pSimpleFillSym;
                //' be careful, indices are different for the diff lists
                for (int j = 0; j < intGCBreakeCount; j++)
                {
                    pRender.Break[j]          = cb[j + 1];
                    pRender.Label[j]          = Math.Round(cb[j], 2).ToString() + " - " + Math.Round(cb[j + 1], 2).ToString();
                    pUIProperties.LowBreak[j] = cb[j];
                    pSimpleFillSym            = new SimpleFillSymbolClass();
                    pSimpleFillSym.Color      = pEnumColors.Next();
                    pSimpleFillSym.Outline    = pOutLines;
                    pRender.Symbol[j]         = (ISymbol)pSimpleFillSym;
                }
                pGeofeatureLayer.Renderer = (IFeatureRenderer)pRender;
                if (chkNewLayer.Checked == true)
                {
                    mForm.axMapControl1.ActiveView.FocusMap.AddLayer(pGeofeatureLayer);
                }



                ////* Uncertainty Part *////
                //Declare variables in if parts

                if (tcUncern.SelectedIndex == 0) //Graduated Color
                {
                    int    intUncernBreakCount = Convert.ToInt32(nudCoNClasses.Value);
                    string strUncerFieldName   = cboUField.Text;

                    IFeatureLayer pflUncern = new FeatureLayerClass();
                    pflUncern.FeatureClass = pFClass;
                    pflUncern.Name         = cboSourceLayer.Text + " Uncertainty";
                    pflUncern.Visible      = true;

                    IGeoFeatureLayer pGFLUncern = (IGeoFeatureLayer)pflUncern;
                    switch (cboTeClassify.Text)
                    {
                    case "Equal Interval":
                        pClassifyGEN = new EqualIntervalClass();
                        break;

                    case "Geometrical Interval":
                        pClassifyGEN = new GeometricalInterval();
                        break;

                    case "Natural Breaks":
                        pClassifyGEN = new NaturalBreaksClass();
                        break;

                    case "Quantile":
                        pClassifyGEN = new QuantileClass();
                        break;

                    case "StandardDeviation":
                        pClassifyGEN = new StandardDeviationClass();
                        break;

                    default:
                        pClassifyGEN = new NaturalBreaksClass();
                        break;
                    }
                    //Need to be changed 1/29/15
                    pTableHistogram       = new BasicTableHistogramClass();
                    pTableHistogram.Field = strUncerFieldName;
                    pTableHistogram.Table = pTable;
                    pHistogram            = (IBasicHistogram)pTableHistogram;

                    pHistogram.GetHistogram(out xVals, out frqs);
                    pClassifyGEN.Classify(xVals, frqs, intUncernBreakCount);

                    pRender              = new ClassBreaksRenderer();
                    cb                   = (double[])pClassifyGEN.ClassBreaks;
                    pRender.Field        = strUncerFieldName;
                    pRender.BreakCount   = intUncernBreakCount;
                    pRender.MinimumBreak = cb[0];

                    IClassBreaksUIProperties pUIColProperties = (IClassBreaksUIProperties)pRender;
                    pUIColProperties.ColorRamp = "Custom";

                    pColorRamp           = new AlgorithmicColorRampClass();
                    pColorRamp.Algorithm = esriColorRampAlgorithm.esriCIELabAlgorithm;
                    pColor1 = new RgbColor();
                    pColor2 = new RgbColor();

                    //Can Change the color in here!
                    pColor1 = pSnippet.getRGB(picCoColorFrom.BackColor.R, picCoColorFrom.BackColor.G, picCoColorFrom.BackColor.B);
                    pColor2 = pSnippet.getRGB(picCoColorTo.BackColor.R, picCoColorTo.BackColor.G, picCoColorTo.BackColor.B);
                    if (pColor1 == null || pColor2 == null)
                    {
                        return;
                    }

                    blnOK = true;
                    pColorRamp.FromColor = pColor1;
                    pColorRamp.ToColor   = pColor2;
                    pColorRamp.Size      = intUncernBreakCount;
                    pColorRamp.CreateRamp(out blnOK);

                    pEnumColors = pColorRamp.Colors;
                    pEnumColors.Reset();

                    pColorOutline = pSnippet.getRGB(picCoLineColor.BackColor.R, picCoLineColor.BackColor.G, picCoLineColor.BackColor.B);
                    if (pColorOutline == null)
                    {
                        return;
                    }

                    double dblCoOutlineSize = Convert.ToDouble(nudCoLinewidth.Value);

                    pOutLines       = new CartographicLineSymbol();
                    pOutLines.Width = dblCoOutlineSize;
                    pOutLines.Color = (IColor)pColorOutline;

                    //' use this interface to set dialog properties
                    pUIColProperties           = (IClassBreaksUIProperties)pRender;
                    pUIColProperties.ColorRamp = "Custom";

                    ISimpleMarkerSymbol pSimpleMarkerSym;
                    double dblCoSymSize = Convert.ToDouble(nudCoSymbolSize.Value);
                    //' be careful, indices are different for the diff lists
                    for (int j = 0; j < intUncernBreakCount; j++)
                    {
                        pRender.Break[j]              = cb[j + 1];
                        pRender.Label[j]              = Math.Round(cb[j], 2).ToString() + " - " + Math.Round(cb[j + 1], 2).ToString();
                        pUIColProperties.LowBreak[j]  = cb[j];
                        pSimpleMarkerSym              = new SimpleMarkerSymbolClass();
                        pSimpleMarkerSym.Size         = dblCoSymSize;
                        pSimpleMarkerSym.Color        = pEnumColors.Next();
                        pSimpleMarkerSym.Outline      = true;
                        pSimpleMarkerSym.OutlineColor = pColorOutline;
                        pSimpleMarkerSym.OutlineSize  = dblCoOutlineSize;
                        pRender.Symbol[j]             = (ISymbol)pSimpleMarkerSym;
                    }

                    pGFLUncern.Renderer = (IFeatureRenderer)pRender;
                    mForm.axMapControl1.ActiveView.FocusMap.AddLayer(pGFLUncern);
                }
                else if (tcUncern.SelectedIndex == 1) //Texture
                {
                    //Create Rendering of Uncertainty at Target Layer
                    int    intUncernBreakCount = Convert.ToInt32(nudTeNClasses.Value);
                    string strUncerFieldName   = cboUField.Text;

                    IFeatureLayer pflUncern = new FeatureLayerClass();
                    pflUncern.FeatureClass = pFClass;
                    pflUncern.Name         = cboSourceLayer.Text + " Uncertainty";
                    pflUncern.Visible      = true;

                    IGeoFeatureLayer pGFLUncern = (IGeoFeatureLayer)pflUncern;
                    switch (cboTeClassify.Text)
                    {
                    case "Equal Interval":
                        pClassifyGEN = new EqualIntervalClass();
                        break;

                    case "Geometrical Interval":
                        pClassifyGEN = new GeometricalInterval();
                        break;

                    case "Natural Breaks":
                        pClassifyGEN = new NaturalBreaksClass();
                        break;

                    case "Quantile":
                        pClassifyGEN = new QuantileClass();
                        break;

                    case "StandardDeviation":
                        pClassifyGEN = new StandardDeviationClass();
                        break;

                    default:
                        pClassifyGEN = new NaturalBreaksClass();
                        break;
                    }
                    //Need to be changed 1/29/15
                    pTableHistogram       = new BasicTableHistogramClass();
                    pTableHistogram.Field = strUncerFieldName;
                    pTableHistogram.Table = pTable;
                    pHistogram            = (IBasicHistogram)pTableHistogram;

                    pHistogram.GetHistogram(out xVals, out frqs);
                    pClassifyGEN.Classify(xVals, frqs, intUncernBreakCount);

                    pRender              = new ClassBreaksRenderer();
                    cb                   = (double[])pClassifyGEN.ClassBreaks;
                    pRender.Field        = strUncerFieldName;
                    pRender.BreakCount   = intUncernBreakCount;
                    pRender.MinimumBreak = cb[0];

                    IClassBreaksUIProperties pUITexProperties = (IClassBreaksUIProperties)pRender;
                    pUITexProperties.ColorRamp = "Custom";

                    ILineFillSymbol pLineFillSym    = new LineFillSymbolClass();
                    double          dblFromSep      = Convert.ToDouble(nudSeperationFrom.Value);
                    double          dblToSep        = Convert.ToDouble(nudSeperationTo.Value);
                    double          dblInstantSep   = (dblFromSep - dblToSep) / Convert.ToDouble(intUncernBreakCount - 1);
                    double          dblFromAngle    = Convert.ToDouble(nudAngleFrom.Value);
                    double          dblToAngle      = Convert.ToDouble(nudAngleFrom.Value); // Remove the angle part (04/16)
                    double          dblInstantAngle = (dblToAngle - dblFromAngle) / Convert.ToDouble(intUncernBreakCount - 1);
                    double          dblLinewidth    = Convert.ToDouble(nudTeLinewidth.Value);
                    IRgbColor       pLineColor      = new RgbColor();
                    pLineColor.Red   = picTeLineColor.BackColor.R;
                    pLineColor.Green = picTeLineColor.BackColor.G;
                    pLineColor.Blue  = picTeLineColor.BackColor.B;

                    //' be careful, indices are different for the diff lists
                    for (int j = 0; j < intUncernBreakCount; j++)
                    {
                        pRender.Break[j]             = cb[j + 1];
                        pRender.Label[j]             = Math.Round(cb[j], 5).ToString() + " - " + Math.Round(cb[j + 1], 5).ToString();
                        pUITexProperties.LowBreak[j] = cb[j];
                        pLineFillSym                  = new LineFillSymbolClass();
                        pLineFillSym.Angle            = dblFromAngle + (dblInstantAngle * Convert.ToDouble(j));
                        pLineFillSym.Color            = pLineColor;
                        pLineFillSym.Separation       = dblFromSep - (dblInstantSep * Convert.ToDouble(j));
                        pLineFillSym.LineSymbol.Width = dblLinewidth;
                        pRender.Symbol[j]             = (ISymbol)pLineFillSym;
                    }
                    pGFLUncern.Renderer = (IFeatureRenderer)pRender;
                    mForm.axMapControl1.ActiveView.FocusMap.AddLayer(pGFLUncern);
                }
                else if (tcUncern.SelectedIndex == 2) //For Proportional Symbols
                {
                    string strUncerFieldName = cboUField.Text;
                    double dblMinPtSize      = Convert.ToDouble(nudProSymbolSize.Value);
                    double dblLineWidth      = Convert.ToDouble(nudProLinewidth.Value);

                    IFeatureLayer pflUncern = new FeatureLayerClass();
                    pflUncern.FeatureClass = pFClass;
                    pflUncern.Name         = cboSourceLayer.Text + " Uncertainty";
                    pflUncern.Visible      = true;

                    //Find Fields
                    int intUncernIdx = pTable.FindField(strUncerFieldName);

                    //Find Min value
                    //Set to initial value for min
                    IField          pUncernField = pTable.Fields.get_Field(intUncernIdx);
                    ICursor         pCursor      = pTable.Search(null, false);
                    IDataStatistics pDataStat    = new DataStatisticsClass();
                    pDataStat.Field  = pUncernField.Name;
                    pDataStat.Cursor = pCursor;
                    IStatisticsResults pStatResults = pDataStat.Statistics;
                    double             dblMinValue  = pStatResults.Minimum;
                    double             dblMaxValue  = pStatResults.Maximum;
                    pCursor.Flush();


                    IRgbColor pSymbolRgb = pSnippet.getRGB(picProSymbolColor.BackColor.R, picProSymbolColor.BackColor.G, picProSymbolColor.BackColor.B);
                    if (pSymbolRgb == null)
                    {
                        return;
                    }

                    IRgbColor pLineRgb = pSnippet.getRGB(picProiLineColor.BackColor.R, picProiLineColor.BackColor.G, picProiLineColor.BackColor.B);
                    if (pLineRgb == null)
                    {
                        return;
                    }

                    ISimpleMarkerSymbol pSMarkerSym = new SimpleMarkerSymbolClass();
                    pSMarkerSym.Style        = esriSimpleMarkerStyle.esriSMSCircle;
                    pSMarkerSym.Size         = dblMinPtSize;
                    pSMarkerSym.OutlineSize  = dblLineWidth;
                    pSMarkerSym.Outline      = true;
                    pSMarkerSym.OutlineColor = (IColor)pLineRgb;
                    pSMarkerSym.Color        = (IColor)pSymbolRgb;

                    IGeoFeatureLayer            pGFLUncern    = (IGeoFeatureLayer)pflUncern;
                    IProportionalSymbolRenderer pUncernRender = new ProportionalSymbolRendererClass();
                    pUncernRender.LegendSymbolCount = 2; //Need to be changed 0219
                    pUncernRender.Field             = strUncerFieldName;
                    pUncernRender.MaxDataValue      = dblMaxValue;
                    pUncernRender.MinDataValue      = dblMinValue;
                    pUncernRender.MinSymbol         = (ISymbol)pSMarkerSym;
                    pUncernRender.ValueUnit         = esriUnits.esriUnknownUnits;
                    pUncernRender.BackgroundSymbol  = null;
                    pUncernRender.CreateLegendSymbols();

                    pGFLUncern.Renderer = (IFeatureRenderer)pUncernRender;
                    mForm.axMapControl1.ActiveView.FocusMap.AddLayer(pGFLUncern);
                }
                else if (tcUncern.SelectedIndex == 3) // Bar
                {
                    string strUncerFieldName = cboUField.Text;
                    double dblMaxLength      = Convert.ToDouble(nudMaxBarHeight.Value);
                    double dblBarWidth       = Convert.ToDouble(nudBarWidth.Value);

                    IFeatureLayer pflUncern = new FeatureLayerClass();
                    pflUncern.FeatureClass = pFClass;
                    pflUncern.Name         = cboSourceLayer.Text + " Uncertainty";
                    pflUncern.Visible      = true;

                    int             intUncernIdx = pTable.FindField(strUncerFieldName);
                    IField          pUncernField = pTable.Fields.get_Field(intUncernIdx);
                    ICursor         pCursor      = pTable.Search(null, false);
                    IDataStatistics pDataStat    = new DataStatisticsClass();
                    pDataStat.Field  = pUncernField.Name;
                    pDataStat.Cursor = pCursor;
                    IStatisticsResults pStatResults = pDataStat.Statistics;
                    double             dblMaxValue  = pStatResults.Maximum;
                    pCursor.Flush();


                    IChartRenderer  chartRenderer  = new ChartRendererClass();
                    IRendererFields rendererFields = chartRenderer as IRendererFields;
                    rendererFields.AddField(strUncerFieldName);

                    IBarChartSymbol barChartSymbol = new BarChartSymbolClass();
                    barChartSymbol.Width = dblBarWidth;
                    IMarkerSymbol markerSymbol = barChartSymbol as IMarkerSymbol;
                    markerSymbol.Size = dblMaxLength;
                    IChartSymbol chartSymbol = barChartSymbol as IChartSymbol;
                    chartSymbol.MaxValue = dblMaxValue;
                    ISymbolArray symbolArray = barChartSymbol as ISymbolArray;
                    IFillSymbol  fillSymbol  = new SimpleFillSymbolClass();
                    fillSymbol.Color = pSnippet.getRGB(picBarSymCol.BackColor.R, picBarSymCol.BackColor.G, picBarSymCol.BackColor.B);
                    if (fillSymbol.Color == null)
                    {
                        return;
                    }
                    symbolArray.AddSymbol(fillSymbol as ISymbol);

                    if (chk3D.Checked)
                    {
                        I3DChartSymbol p3DChartSymbol = barChartSymbol as I3DChartSymbol;
                        p3DChartSymbol.Display3D = true;
                        p3DChartSymbol.Thickness = 3;
                    }
                    chartRenderer.ChartSymbol = barChartSymbol as IChartSymbol;
                    SimpleFillSymbol pBaseFillSym = new SimpleFillSymbolClass();
                    //pBaseFillSym.Color = pSnippet.getRGB(picBarSymCol.BackColor.R, picBarSymCol.BackColor.G, picBarSymCol.BackColor.B);
                    //chartRenderer.BaseSymbol = pBaseFillSym as ISymbol;
                    chartRenderer.UseOverposter = false;
                    chartRenderer.CreateLegend();
                    IGeoFeatureLayer pGFLUncern = (IGeoFeatureLayer)pflUncern;
                    pGFLUncern.Renderer = (IFeatureRenderer)chartRenderer;
                    mForm.axMapControl1.ActiveView.FocusMap.AddLayer(pGFLUncern);
                }
                #region illumination
                //This function is not applied in this version. 032317 HK
                //}
                //    else if (tcUncern.SelectedIndex == 4) //illumination
                //    {
                //        frmProgress pfrmProgress = new frmProgress();
                //        pfrmProgress.lblStatus.Text = "Processing:";
                //        pfrmProgress.pgbProgress.Style = ProgressBarStyle.Marquee;
                //        pfrmProgress.Show();

                //        string strUncerFieldName = cboUField.Text;

                //        IGeoDataset geoDataset_output = createRasterfromPolygon(pFClass, strUncerFieldName, pFLayer, 100);

                //        double altitude = Convert.ToDouble(nudAltitude.Value);
                //        double azimuth = Convert.ToDouble(nudAzimuth.Value);
                //        object zFactor = Convert.ToDouble(nudZFactor.Value);


                //        ISurfaceOp2 pSurfOP = new RasterSurfaceOpClass();
                //        IRaster pOutputDS = (IRaster)pSurfOP.HillShade(geoDataset_output, azimuth, altitude, true, ref zFactor);

                //        ((IDataset)geoDataset_output).Delete();
                //        // Create a raster for viewing
                //        ESRI.ArcGIS.Carto.IRasterLayer rasterLayer = new ESRI.ArcGIS.Carto.RasterLayerClass();
                //        rasterLayer.CreateFromRaster(pOutputDS);

                //        //Calculate hillshade value at slope 0 to set as background value
                //        double dblRadian = (Math.PI / 180) * (90 - altitude);
                //        double dblBackValue = Math.Truncate(255 * Math.Cos(dblRadian));

                //        IRasterStretch pRasterStretch = new RasterStretchColorRampRendererClass();
                //        IColor pColor = new RgbColorClass();
                //        pColor.NullColor = true;
                //        pColor.Transparency = 0;
                //        pRasterStretch.Background = true;
                //        pRasterStretch.BackgroundColor = pColor;
                //        pRasterStretch.set_BackgroundValues(ref dblBackValue);

                //        rasterLayer.Name = "Uncertainty of " + strGCRenderField;
                //        rasterLayer.Renderer = pRasterStretch as IRasterRenderer;
                //        rasterLayer.Renderer.Update();

                //        //Apply Transparency
                //        ILayerEffects pLayerEffect = (ILayerEffects)rasterLayer;
                //        pLayerEffect.Transparency = Convert.ToInt16(nudTransparent.Value);

                //        pfrmProgress.Close();
                //        // Add the raster to the map
                //        pActiveView.FocusMap.AddLayer(rasterLayer);

                //    }

                //    mForm.axMapControl1.ActiveView.Refresh();
                //    mForm.axTOCControl1.Update();
                #endregion
            }
            catch (Exception ex)
            {
                frmErrorLog pfrmErrorLog = new frmErrorLog(); pfrmErrorLog.ex = ex; pfrmErrorLog.ShowDialog();
                return;
            }
        }
        private IChartRenderer CreateRenderer(IFeatureClass featureClass)
        {
            if (chartSymbol == null) return null;

            double dmaxValue = 0.0;
            dmaxValue = FindMaxValueInRendererFields(featureClass);
            chartSymbol.MaxValue = dmaxValue;

            IMarkerSymbol pMarkerSymbol = (IMarkerSymbol)chartSymbol;
            pMarkerSymbol.Size = symbolSize;
            //Now set up symbols for each bar
            ISymbolArray pSymbolArray = (ISymbolArray)chartSymbol;
            pSymbolArray.ClearSymbols();
            IChartRenderer pChartRenderer = new ChartRendererClass();
            IRendererFields pRendererFields = (IRendererFields)pChartRenderer;
            foreach (System.Collections.DictionaryEntry de in fieldSymbolHashTable)
            {
                string strField = de.Key.ToString(); ;
                ISymbol symbol = de.Value as ISymbol;
                pRendererFields.AddField(strField, strField);
                pSymbolArray.AddSymbol(symbol);
            }

            pChartRenderer.ChartSymbol = chartSymbol;
            pChartRenderer.Label = "统计符号化";
            pChartRenderer.UseOverposter = false;

            if (gBaseSymbol != nudDotSize)
                pChartRenderer.BaseSymbol = gBaseSymbol;
            pChartRenderer.CreateLegend();

            return pChartRenderer;
        }
Example #19
0
        private void polygonQualityDye(ILayer pLayer)
        {
            IGeoFeatureLayer pGeoFeatureL;
            IFeatureLayer    pFeatureLayer;
            ITable           pTable;
            ICursor          pCursor;
            IQueryFilter     pQueryFilter;
            IRowBuffer       pRowBuffer;
            int numFields = 2;

            int[]           fieldIndecies = new int[numFields];
            int             iFieldIndex;
            double          dMaxValue;
            bool            isFirstValue;
            double          dFieldValue;
            IChartRenderer  pChartRenderer;
            IRendererFields pRenderFields;
            IFillSymbol     pFillSymbol;
            IMarkerSymbol   pMarkerSymbol;
            ISymbolArray    pSymbolArray;
            IChartSymbol    pCharSymbol;
            //设置需要的字段信息
            string strPopField1 = cbField1.Text;
            string strPopField2 = cbField2.Text;

            IMap pMap = axMapControl1.Map;

            pMap.ReferenceScale = pMap.MapScale;
            pFeatureLayer       = (IGeoFeatureLayer)pLayer;
            pGeoFeatureL        = (IGeoFeatureLayer)pFeatureLayer;
            pTable = (ITable)pGeoFeatureL;

            pGeoFeatureL.ScaleSymbols = true;
            pChartRenderer            = new ChartRendererClass();
            //设置柱状图中所需要绘制的属性
            pRenderFields = (IRendererFields)pChartRenderer;
            pRenderFields.AddField(strPopField1, strPopField1);
            pRenderFields.AddField(strPopField2, strPopField2);
            pQueryFilter = new QueryFilterClass();
            pQueryFilter.AddField(strPopField1);
            pQueryFilter.AddField(strPopField2);
            pCursor          = pTable.Search(pQueryFilter, true);
            fieldIndecies[0] = pTable.FindField(strPopField1);
            fieldIndecies[1] = pTable.FindField(strPopField2);
            isFirstValue     = true;
            dMaxValue        = 0;
            //迭代坊问每一个要素
            pRowBuffer = pCursor.NextRow();
            try
            {
                while (pRowBuffer != null)
                {
                    for (iFieldIndex = 0; iFieldIndex <= numFields - 1; iFieldIndex++)
                    {
                        //迭代访问要素的字段值并对最大值进行更新和标记
                        dFieldValue = double.Parse(pRowBuffer.get_Value(fieldIndecies[iFieldIndex]).ToString());

                        if (isFirstValue)
                        {
                            //将最大值dmax初始化为第一个值
                            dMaxValue    = dFieldValue;
                            isFirstValue = false;
                        }
                        else
                        {
                            if (dFieldValue > dMaxValue)
                            {
                                //获取最大值时候进行更新
                                dMaxValue = dFieldValue;
                            }
                        }
                    }
                    pRowBuffer = pCursor.NextRow();
                }
            }
            catch (Exception ex)
            {
                MessageBox.Show("该字段中有不合法的值,请重新选择字段");
            }

            if (dMaxValue <= 0)
            {
                MessageBox.Show("获取要素失败");
                return;
            }
            //设置需要渲染的柱状图符号
            IBarChartSymbol pBarChartSymbol;

            pBarChartSymbol       = new BarChartSymbolClass();
            pCharSymbol           = (IChartSymbol)pBarChartSymbol;
            pBarChartSymbol.Width = 12;
            pMarkerSymbol         = (IMarkerSymbol)pBarChartSymbol;
            //设置柱状图的最大值
            pCharSymbol.MaxValue = dMaxValue;
            //设置柱状图的最大渲染高度
            pMarkerSymbol.Size = 80;
            //为每个柱状图设置符号
            pSymbolArray = (ISymbolArray)pBarChartSymbol;
            //为每个柱状图添加颜色
            pFillSymbol = new SimpleFillSymbolClass();
            IRgbColor color = new RgbColorClass();

            color.Red         = 213;
            color.Green       = 212;
            color.Blue        = 252;
            pFillSymbol.Color = color;
            pSymbolArray.AddSymbol((ISymbol)pFillSymbol);
            pFillSymbol       = new SimpleFillSymbolClass();
            color.Red         = 193;
            color.Green       = 252;
            color.Blue        = 179;
            pFillSymbol.Color = color;
            pSymbolArray.AddSymbol((ISymbol)pFillSymbol);
            //设置渲染符号为柱状图
            pChartRenderer.ChartSymbol = (IChartSymbol)pBarChartSymbol;

            pChartRenderer.Label = cbField1.Text;
            //设置柱状图的背景颜色
            pFillSymbol               = new SimpleFillSymbolClass();
            color.Red                 = 239;
            color.Green               = 228;
            color.Blue                = 190;
            pFillSymbol.Color         = color;
            pChartRenderer.BaseSymbol = (ISymbol)pFillSymbol;
            //设置overpoaster属性为false,使柱状图显示在polygon多边形要素的中间
            pChartRenderer.UseOverposter = false;
            pChartRenderer.CreateLegend();
            //更新柱状图和刷新显示
            pGeoFeatureL.Renderer = (IFeatureRenderer)pChartRenderer;
            axMapControl1.ActiveView.PartialRefresh(esriViewDrawPhase.esriViewGeography, null, null);
        }
Example #20
0
 //柱状表图
 private void button5_Click(object sender, EventArgs e)
 {
     IGeoFeatureLayer geoFeatureLayer;
     IFeatureLayer featureLayer;
     ITable table;
     ICursor cursor;
     IRowBuffer rowBuffer;
     //设置渲染要素
     string field1 = "SHAPE_Area";
     string field2 = "SHAPE_Leng";
     //获取渲染图层
     geoFeatureLayer = getGeoLayer("东丰县行政区域");
     featureLayer = geoFeatureLayer as IFeatureLayer;
     table = featureLayer as ITable;
     geoFeatureLayer.ScaleSymbols = true;
     IChartRenderer chartRenderer = new ChartRendererClass();
     IRendererFields rendererFields = chartRenderer as IRendererFields;
     rendererFields.AddField(field1, field1);
     rendererFields.AddField(field2, field2);
     int[] fieldIndexs = new int[2];
     fieldIndexs[0] = table.FindField(field1);
     fieldIndexs[1] = table.FindField(field2);
     //获取要素最大值
     double fieldValue = 0.0, maxValue = 0.0;
     cursor = table.Search(null, true);
     rowBuffer = cursor.NextRow();
     while (rowBuffer != null)
     {
         for (int i = 0; i < 2; i++)
         {
             fieldValue = double.Parse(rowBuffer.get_Value(fieldIndexs[i]).ToString());
             if (fieldValue > maxValue)
             {
                 maxValue = fieldValue;
             }
         }
         rowBuffer = cursor.NextRow();
     }
     //创建水平排列符号
     IBarChartSymbol barChartSymbol = new BarChartSymbolClass();
     barChartSymbol.Width = 10;
     IMarkerSymbol markerSymbol = barChartSymbol as IMarkerSymbol;
     markerSymbol.Size = 50;
     IChartSymbol chartSymbol = barChartSymbol as IChartSymbol;
     chartSymbol.MaxValue = maxValue;
     //添加渲染符号
     ISymbolArray symbolArray = barChartSymbol as ISymbolArray;
     IFillSymbol fillSymbol = new SimpleFillSymbolClass();
     fillSymbol.Color = getRGB(255, 0, 0);
     symbolArray.AddSymbol(fillSymbol as ISymbol);
     fillSymbol = new SimpleFillSymbolClass();
     fillSymbol.Color = getRGB(0, 255, 0);
     symbolArray.AddSymbol(fillSymbol as ISymbol);
     //设置柱状图符号
     chartRenderer.ChartSymbol = barChartSymbol as IChartSymbol;
     fillSymbol = new SimpleFillSymbolClass();
     fillSymbol.Color = getRGB(0, 0, 255);
     chartRenderer.BaseSymbol = fillSymbol as ISymbol;
     chartRenderer.UseOverposter = false;
     //创建图例
     chartRenderer.CreateLegend();
     geoFeatureLayer.Renderer = chartRenderer as IFeatureRenderer;
     this.axMapControl1.Refresh();
 }
Example #21
0
        /// <summary>
        /// Pie Chart Render
        /// </summary>
        /// <param name="currentLayer"></param>
        /// <param name="breakCount"></param>
        /// <author>Shen Yongyuan</author>
        /// <date>20091114</date>
        public static void PieChartRender(ILayer currentLayer)
        {
            //Scale Symbol
            IGeoFeatureLayer pGeoFeatureL = currentLayer as IGeoFeatureLayer;

            pGeoFeatureL.ScaleSymbols = true;

            //Chart Render
            IChartRenderer  pChartRenderer  = new ChartRendererClass();
            IRendererFields pRendererFields = (IRendererFields)pChartRenderer;

            pRendererFields.AddField(Town.Constant.Constant.TmpTableIndex + "." + "Ecology", "生态");
            pRendererFields.AddField(Town.Constant.Constant.TmpTableIndex + "." + "Social", "社会");
            pRendererFields.AddField(Town.Constant.Constant.TmpTableIndex + "." + "Economic", "经济");

            //Search Max
            IQueryFilter pQueryFilter = new QueryFilterClass();

            pQueryFilter.AddField(Town.Constant.Constant.TmpTableIndex + "." + "Ecology");
            pQueryFilter.AddField(Town.Constant.Constant.TmpTableIndex + "." + "Social");
            pQueryFilter.AddField(Town.Constant.Constant.TmpTableIndex + "." + "Economic");
            IFeatureCursor pCursor = pGeoFeatureL.DisplayFeatureClass.Search(pQueryFilter, true);

            int fldFiledEcology  = pCursor.Fields.FindField(Town.Constant.Constant.TmpTableIndex + "." + "Ecology");
            int fldFiledSocial   = pCursor.Fields.FindField(Town.Constant.Constant.TmpTableIndex + "." + "Social");
            int fldFiledEconomic = pCursor.Fields.FindField(Town.Constant.Constant.TmpTableIndex + "." + "Economic");

            List <double> valueList = new List <double>();

            IFeature pFeature = pCursor.NextFeature();

            while (pFeature != null)
            {
                valueList.Add(Convert.ToDouble(pFeature.get_Value(fldFiledEcology)));
                valueList.Add(Convert.ToDouble(pFeature.get_Value(fldFiledSocial)));
                valueList.Add(Convert.ToDouble(pFeature.get_Value(fldFiledEconomic)));
                pFeature = pCursor.NextFeature();
            }

            //Pie Chart
            IPieChartSymbol pPieChartSymbol;

            pPieChartSymbol = new PieChartSymbolClass();
            IChartSymbol pChartSymbol = (IChartSymbol)pPieChartSymbol;

            //Pie Chart Attribute
            pPieChartSymbol.Clockwise  = true;
            pPieChartSymbol.UseOutline = true;
            ILineSymbol pOutline;

            pOutline                = new SimpleLineSymbolClass();
            pOutline.Color          = ArcGIS.Color.ToEsriColor(System.Drawing.Color.FromArgb(100, 205, 30));
            pOutline.Width          = 1;
            pPieChartSymbol.Outline = pOutline;
            IMarkerSymbol pMarkerSymbol = (IMarkerSymbol)pPieChartSymbol;

            pChartSymbol.MaxValue = valueList.Max();
            pMarkerSymbol.Size    = 60;

            //Symbol Array
            ISymbolArray      pSymbolArray = (ISymbolArray)pPieChartSymbol;
            ISimpleFillSymbol pFillSymbol  = new SimpleFillSymbolClass();

            pFillSymbol.Color = ArcGIS.Color.ToEsriColor(System.Drawing.Color.Green);
            pSymbolArray.AddSymbol((ISymbol)pFillSymbol);
            pFillSymbol       = new SimpleFillSymbolClass();
            pFillSymbol.Color = ArcGIS.Color.ToEsriColor(System.Drawing.Color.Red);
            pSymbolArray.AddSymbol((ISymbol)pFillSymbol);
            pFillSymbol       = new SimpleFillSymbolClass();
            pFillSymbol.Color = ArcGIS.Color.ToEsriColor(System.Drawing.Color.Blue);
            pSymbolArray.AddSymbol((ISymbol)pFillSymbol);

            pChartRenderer.ChartSymbol = (IChartSymbol)pPieChartSymbol;
            pChartRenderer.Label       = "指标";

            //Back Ground
            pFillSymbol               = new SimpleFillSymbolClass();
            pFillSymbol.Color         = ArcGIS.Color.ToEsriColor(System.Drawing.Color.FromArgb(239, 228, 190));
            pChartRenderer.BaseSymbol = (ISymbol)pFillSymbol;

            //Render Label
            pGeoFeatureL.Renderer = pChartRenderer as IFeatureRenderer;
        }
Example #22
0
 //PieChartRenderer圆形分格统计图
 private void button7_Click(object sender, EventArgs e)
 {
     IGeoFeatureLayer geoFeatureLayer;
     IFeatureLayer featureLayer;
     ITable table;
     ICursor cursor;
     IRowBuffer rowBuffer;
     //设置饼图的要素
     string field1 = "sqmi";
     string field2 = "sqkm";
     //获取渲染图层
     geoFeatureLayer = getGeoLayer("Continents");
     featureLayer = geoFeatureLayer as IFeatureLayer;
     table = featureLayer as ITable;
     geoFeatureLayer.ScaleSymbols = true;
     IChartRenderer chartRenderer = new ChartRendererClass();
     IPieChartRenderer pieChartRenderer = chartRenderer as IPieChartRenderer;
     IRendererFields rendererFields = chartRenderer as IRendererFields;
     rendererFields.AddField(field1, field1);
     rendererFields.AddField(field2, field2);
     int[] fieldIndexs = new int[2];
     fieldIndexs[0] = table.FindField(field1);
     fieldIndexs[1] = table.FindField(field2);
     //获取渲染要素的最大值
     double fieldValue = 0.0, maxValue = 0.0;
     cursor = table.Search(null, true);
     rowBuffer = cursor.NextRow();
     while (rowBuffer != null)
     {
         for (int i = 0; i < 2; i++)
         {
             fieldValue = double.Parse(rowBuffer.get_Value(fieldIndexs[i]).ToString());
             if (fieldValue > maxValue)
             {
                 maxValue = fieldValue;
             }
         }
         rowBuffer = cursor.NextRow();
     }
     //设置饼图符号
     IPieChartSymbol pieChartSymbol = new PieChartSymbolClass();
     pieChartSymbol.Clockwise = true;
     pieChartSymbol.UseOutline = true;
     IChartSymbol chartSymbol = pieChartSymbol as IChartSymbol;
     chartSymbol.MaxValue = maxValue;
     ILineSymbol lineSymbol = new SimpleLineSymbolClass();
     lineSymbol.Color = getRGB(255, 0, 0);
     lineSymbol.Width = 2;
     pieChartSymbol.Outline = lineSymbol;
     IMarkerSymbol markerSymbol = pieChartSymbol as IMarkerSymbol;
     markerSymbol.Size = 30;
     //添加渲染符号
     ISymbolArray symbolArray = pieChartSymbol as ISymbolArray;
     IFillSymbol fillSymbol = new SimpleFillSymbolClass();
     fillSymbol.Color = getRGB(0, 255, 0);
     symbolArray.AddSymbol(fillSymbol as ISymbol);
     fillSymbol = new SimpleFillSymbolClass();
     fillSymbol.Color = getRGB(0, 0, 255);
     symbolArray.AddSymbol(fillSymbol as ISymbol);
     chartRenderer.ChartSymbol = pieChartSymbol as IChartSymbol;
     fillSymbol = new SimpleFillSymbolClass();
     fillSymbol.Color = getRGB(100, 100, 100);
     chartRenderer.BaseSymbol = fillSymbol as ISymbol;
     chartRenderer.UseOverposter = false;
     //创建图例
     chartRenderer.CreateLegend();
     geoFeatureLayer.Renderer = chartRenderer as IFeatureRenderer;
     this.axMapControl1.Refresh();
 }
Example #23
0
        public override void OnClick()
        {
            IGeoFeatureLayer pGeoFeatureL;
            IFeatureLayer    pFeatureLayer;
            ITable           pTable;
            ICursor          pCursor;
            IQueryFilter     pQueryFilter;
            IRowBuffer       pRowBuffer;
            int numFields = 2;

            int[]           fieldIndecies = new int[numFields];
            int             lfieldIndex;
            double          dmaxValue;
            bool            firstValue;
            double          dfieldValue;
            IChartRenderer  pChartRenderer;
            IRendererFields pRendererFields;
            IFillSymbol     pFillSymbol;
            IMarkerSymbol   pMarkerSymbol;
            ISymbolArray    pSymbolArray;
            IChartSymbol    pChartSymbol;
            string          strPopField1 = "population";
            string          strPopField2 = "jingji";

            //pActiveView = m_hookHelper.ActiveView;
            //pMap = m_hookHelper.FocusMap;
            //pMap.ReferenceScale = pMap.MapScale ;
            // pFeatureLayer = (IGeoFeatureLayer) pMap.get_Layer(1);//Parameter!!!
            pGeoFeatureL = (IGeoFeatureLayer)m_pLayer;
            pTable       = (ITable)pGeoFeatureL;
            pGeoFeatureL.ScaleSymbols = true;
            pChartRenderer            = new ChartRendererClass();
            pRendererFields           = (IRendererFields)pChartRenderer;
            pRendererFields.AddField(strPopField1, strPopField1);
            pRendererFields.AddField(strPopField2, strPopField2);
            pQueryFilter = new QueryFilterClass();
            pQueryFilter.AddField(strPopField1);
            pQueryFilter.AddField(strPopField2);
            pCursor          = pTable.Search(pQueryFilter, true);
            fieldIndecies[0] = pTable.FindField(strPopField1);
            fieldIndecies[1] = pTable.FindField(strPopField2);
            firstValue       = true;
            dmaxValue        = 0;
            pRowBuffer       = pCursor.NextRow();
            while (pRowBuffer != null)
            {
                for (lfieldIndex = 0; lfieldIndex <= numFields - 1; lfieldIndex++)
                {
                    dfieldValue = (double)Convert.ToInt32(pRowBuffer.get_Value(fieldIndecies[lfieldIndex]));
                    if (firstValue)
                    {
                        dmaxValue  = dfieldValue;
                        firstValue = false;
                    }
                    else
                    {
                        if (dfieldValue > dmaxValue)
                        {
                            dmaxValue = dfieldValue;
                        }
                        //Set up the fields to draw charts of
                        //Make an array of the field numbers to iterate accross, this is to keep the code generic in the number of bars to draw.
                        //Iterate across each feature
                        // iterate through each data field and update the maxVal if needed
                        // Special case for the first value in a feature class
                        // we've got a new biggest value
                    }
                }
                pRowBuffer = pCursor.NextRow();
            }
            if (dmaxValue <= 0)
            {
                MessageBox.Show("Failed to gather stats on the feature class");
                Application.Exit();
            }
            IBarChartSymbol pBarChartSymbol;

            pBarChartSymbol       = new BarChartSymbolClass();
            pChartSymbol          = (IChartSymbol)pBarChartSymbol;
            pBarChartSymbol.Width = 12;
            pMarkerSymbol         = (IMarkerSymbol)pBarChartSymbol;
            pChartSymbol.MaxValue = dmaxValue;
            pMarkerSymbol.Size    = 80;
            pSymbolArray          = (ISymbolArray)pBarChartSymbol;
            pFillSymbol           = new SimpleFillSymbolClass();
            IRgbColor pRGB = new RgbColorClass();

            pRGB.Red          = 213;
            pRGB.Green        = 212;
            pRGB.Blue         = 252;
            pFillSymbol.Color = pRGB;
            pSymbolArray.AddSymbol((ISymbol)pFillSymbol);
            pFillSymbol       = new SimpleFillSymbolClass();
            pRGB.Red          = 193;
            pRGB.Green        = 252;
            pRGB.Blue         = 179;
            pFillSymbol.Color = pRGB;
            pSymbolArray.AddSymbol((ISymbol)pFillSymbol);
            pChartRenderer.ChartSymbol = (IChartSymbol)pBarChartSymbol;
            pChartRenderer.Label       = "Population";
            pFillSymbol               = new SimpleFillSymbolClass();
            pRGB.Red                  = 293;
            pRGB.Green                = 228;
            pRGB.Blue                 = 190;
            pFillSymbol.Color         = pRGB;
            pChartRenderer.BaseSymbol = (ISymbol)pFillSymbol;
            // Set up the chart marker symbol to use with the renderer
            //Finally we've got the biggest value, set this into the symbol
            //This is the maximum height of the bars
            //Now set up symbols for each bar
            // Add some colours in for each bar
            //This is a pastel green
            //Now set the barchart symbol into the renderer
            //set up the background symbol to use tan color
            //Disable overpoaster so that charts appear in the centre of polygons
            pChartRenderer.UseOverposter = false;
            pChartRenderer.CreateLegend();
            pGeoFeatureL.Renderer = (IFeatureRenderer)pChartRenderer;
            //pActiveView.PartialRefresh(esriViewDrawPhase.esriViewGeography, null, null);
        }
Example #24
0
        //柱状表图
        private void button5_Click(object sender, EventArgs e)
        {
            IGeoFeatureLayer geoFeatureLayer;
            IFeatureLayer    featureLayer;
            ITable           table;
            ICursor          cursor;
            IRowBuffer       rowBuffer;
            //设置渲染要素
            string field1 = "SHAPE_Area";
            string field2 = "SHAPE_Leng";

            //获取渲染图层
            geoFeatureLayer = getGeoLayer("东丰县行政区域");
            featureLayer    = geoFeatureLayer as IFeatureLayer;
            table           = featureLayer as ITable;
            geoFeatureLayer.ScaleSymbols = true;
            IChartRenderer  chartRenderer  = new ChartRendererClass();
            IRendererFields rendererFields = chartRenderer as IRendererFields;

            rendererFields.AddField(field1, field1);
            rendererFields.AddField(field2, field2);
            int[] fieldIndexs = new int[2];
            fieldIndexs[0] = table.FindField(field1);
            fieldIndexs[1] = table.FindField(field2);
            //获取要素最大值
            double fieldValue = 0.0, maxValue = 0.0;

            cursor    = table.Search(null, true);
            rowBuffer = cursor.NextRow();
            while (rowBuffer != null)
            {
                for (int i = 0; i < 2; i++)
                {
                    fieldValue = double.Parse(rowBuffer.get_Value(fieldIndexs[i]).ToString());
                    if (fieldValue > maxValue)
                    {
                        maxValue = fieldValue;
                    }
                }
                rowBuffer = cursor.NextRow();
            }
            //创建水平排列符号
            IBarChartSymbol barChartSymbol = new BarChartSymbolClass();

            barChartSymbol.Width = 10;
            IMarkerSymbol markerSymbol     = barChartSymbol as IMarkerSymbol;

            markerSymbol.Size = 50;
            IChartSymbol chartSymbol = barChartSymbol as IChartSymbol;

            chartSymbol.MaxValue = maxValue;
            //添加渲染符号
            ISymbolArray symbolArray = barChartSymbol as ISymbolArray;
            IFillSymbol  fillSymbol  = new SimpleFillSymbolClass();

            fillSymbol.Color = getRGB(255, 0, 0);
            symbolArray.AddSymbol(fillSymbol as ISymbol);
            fillSymbol       = new SimpleFillSymbolClass();
            fillSymbol.Color = getRGB(0, 255, 0);
            symbolArray.AddSymbol(fillSymbol as ISymbol);
            //设置柱状图符号
            chartRenderer.ChartSymbol = barChartSymbol as IChartSymbol;
            fillSymbol                  = new SimpleFillSymbolClass();
            fillSymbol.Color            = getRGB(0, 0, 255);
            chartRenderer.BaseSymbol    = fillSymbol as ISymbol;
            chartRenderer.UseOverposter = false;
            //创建图例
            chartRenderer.CreateLegend();
            geoFeatureLayer.Renderer = chartRenderer as IFeatureRenderer;
            this.axMapControl1.Refresh();
        }