IClassBreaksRenderer接口渲染图层(分color和size两种) 实现ArcMap中的Graduated Symbols功能

 

/// <summary>
        /// 生成大小分级点符号图
        /// </summary>
        /// <param name="mFeatureLayer">输入图层</param>
        /// <param name="mFieldName">点符号大小字段</param>
        /// <param name="iBreakCount">点符号分级数</param>
        /// <returns>点符号图层</returns>
        public IFeatureLayer GisChart_ClassBreakSizeMaker(IFeatureLayer mFeatureLayer, string mFieldName, ref int iBreakCount)
        {
            IGeoFeatureLayer pGeoFeatureLayer;
           // IClassBreaksRenderer pClassBreakR;
           // IClassifyGEN pClassifyG;
            IFillSymbol pFillSymbol;
            ICharacterMarkerSymbol pCharaterMarkerS;
            stdole.StdFont pFontDisp;
            ITable pTable;
            IQueryFilter pQueryFilter;
            ICursor pCursor;
            IDataStatistics pDataStatistics;
            IStatisticsResults pStatisticsResult;

            //ITableHistogram pTableHis;

            pGeoFeatureLayer = mFeatureLayer as IGeoFeatureLayer;
            //计算要素最大最小值
            pTable = (ITable)pGeoFeatureLayer;
            pQueryFilter = new QueryFilterClass();
            pQueryFilter.AddField("");
            pCursor = pTable.Search(pQueryFilter, true);
            pDataStatistics = new DataStatisticsClass();
            pDataStatistics.Cursor = pCursor;
            //Get the result of statistics
            pDataStatistics.Field = mFieldName;
            pStatisticsResult = pDataStatistics.Statistics;

 

            //背景色
            pFillSymbol = new SimpleFillSymbolClass();
            pFillSymbol.Color = GetColor(233, 255, 190);


            //点符号样式
            pCharaterMarkerS = new CharacterMarkerSymbol();
            pFontDisp = new stdole.StdFontClass();
            pFontDisp.Name = "ESRI Business";
            pFontDisp.Size = 8;
            pCharaterMarkerS.Font = (IFontDisp)pFontDisp;
            pCharaterMarkerS.CharacterIndex = 33;
            pCharaterMarkerS.Color = GetColor(234, 12, 0);
            //pCharaterMarkerS.Size = 15;

 

            //分级符号图

            //获取统计数据及起频率
            ITableHistogram pTableHistogram = new BasicTableHistogramClass();
            pTableHistogram.Field = mFieldName;
            pTableHistogram.Table = pTable;

            object dataValues, dataFrequency;
            IBasicHistogram pHistogram = (IBasicHistogram)pTableHistogram;
            pHistogram.GetHistogram(out dataValues, out dataFrequency);

            IClassifyGEN pClassify = new EqualIntervalClass();

            //产生种类
            pClassify.Classify(dataValues, dataFrequency, ref iBreakCount);
            object ob = pClassify.ClassBreaks;
            double[] Classes = (double[])ob;
            int ClassesCount = Classes.Length;

            //定义分类渲染
            IClassBreaksRenderer pClassBreaksRenderer = new ClassBreaksRendererClass();
            pClassBreaksRenderer.Field = mFieldName;
            pClassBreaksRenderer.BreakCount = ClassesCount;
            pClassBreaksRenderer.SortClassesAscending = true;
            pClassBreaksRenderer.MinimumBreak = Classes[0];


            //定义黄色
            IHsvColor pFromColor = new HsvColorClass();
            pFromColor.Hue = 60;
            pFromColor.Saturation = 100;
            pFromColor.Value = 96;

            //定义红色
            IHsvColor pToColor = new HsvColorClass();
            pToColor.Hue = 0;
            pToColor.Saturation = 100;
            pToColor.Value = 96;

            //定义色带
            IAlgorithmicColorRamp pAlgorithmicCR = new AlgorithmicColorRampClass();
            pAlgorithmicCR.Algorithm = esriColorRampAlgorithm.esriHSVAlgorithm;
            pAlgorithmicCR.FromColor = pFromColor;
            pAlgorithmicCR.ToColor = pToColor;
            pAlgorithmicCR.Size = ClassesCount;
            bool ok = false;
            pAlgorithmicCR.CreateRamp(out ok);
            IEnumColors pEnumColors = pAlgorithmicCR.Colors;


            //设置要素的填充颜色
            for (int i = 0; i < ClassesCount; i++)
            {
                IColor pColor = pEnumColors.Next();
                ISimpleFillSymbol pFillSymbol1 = new SimpleFillSymbolClass();
                pFillSymbol1.Color = pColor;
                pFillSymbol1.Style = esriSimpleFillStyle.esriSFSSolid;
                pCharaterMarkerS.Size = (i + 4)*2;
                pClassBreaksRenderer.BackgroundSymbol = pFillSymbol;
                pClassBreaksRenderer.set_Symbol(i, (ISymbol)pCharaterMarkerS);
                pClassBreaksRenderer.set_Break(i, Classes[i]);
            }

            pGeoFeatureLayer.Renderer = (IFeatureRenderer)pClassBreaksRenderer;

            return (IFeatureLayer)pGeoFeatureLayer;
        }

 

 

/// <summary>
        /// 不同颜色生成分级点符号图
        /// </summary>
        /// <param name="mFeatureLayer">输入图层</param>
        /// <param name="mFieldName">点符号颜色字段</param>
        /// <param name="iBreakCount">点符号分级数</param>
        /// <returns>点符号图层</returns>
        public IFeatureLayer GisChart_ClassBreakColorMaker(IFeatureLayer mFeatureLayer, string mFieldName, ref int iBreakCount)
        {
            IGeoFeatureLayer pGeoFeatureLayer;
            // IClassBreaksRenderer pClassBreakR;
            // IClassifyGEN pClassifyG;
            IFillSymbol pFillSymbol;
            ISimpleMarkerSymbol pSimpleMarkerS;
            stdole.StdFont pFontDisp;
            ITable pTable;
            IQueryFilter pQueryFilter;
            ICursor pCursor;
            IDataStatistics pDataStatistics;
            IStatisticsResults pStatisticsResult;

            //ITableHistogram pTableHis;

            pGeoFeatureLayer = mFeatureLayer as IGeoFeatureLayer;
            //计算要素最大最小值
            pTable = (ITable)pGeoFeatureLayer;
            pQueryFilter = new QueryFilterClass();
            pQueryFilter.AddField("");
            pCursor = pTable.Search(pQueryFilter, true);
            pDataStatistics = new DataStatisticsClass();
            pDataStatistics.Cursor = pCursor;
            //Get the result of statistics
            pDataStatistics.Field = mFieldName;
            pStatisticsResult = pDataStatistics.Statistics;

 

            //背景色
            pFillSymbol = new SimpleFillSymbolClass();
            pFillSymbol.Color = GetColor(233, 255, 190);


            //点符号样式
            pSimpleMarkerS = new SimpleMarkerSymbolClass();
            pFontDisp = new stdole.StdFontClass();
            pFontDisp.Name = "ESRI Business";
            pFontDisp.Size = 10;
            pSimpleMarkerS.Outline=true;
            pSimpleMarkerS.OutlineColor=GetColor(0,0,0);
         
          
            //分级符号图

            //获取统计数据及起频率
            ITableHistogram pTableHistogram = new BasicTableHistogramClass();
            pTableHistogram.Field = mFieldName;
            pTableHistogram.Table = pTable;

            object dataValues, dataFrequency;
            IBasicHistogram pHistogram = (IBasicHistogram)pTableHistogram;
            pHistogram.GetHistogram(out dataValues, out dataFrequency);

            IClassifyGEN pClassify = new EqualIntervalClass();

            //产生种类
            pClassify.Classify(dataValues, dataFrequency, ref iBreakCount);
            object ob = pClassify.ClassBreaks;
            double[] Classes = (double[])ob;
            int ClassesCount = Classes.Length;

            //定义分类渲染
            IClassBreaksRenderer pClassBreaksRenderer = new ClassBreaksRendererClass();
            pClassBreaksRenderer.Field = mFieldName;
            pClassBreaksRenderer.BreakCount = ClassesCount;
            pClassBreaksRenderer.SortClassesAscending = true;
            pClassBreaksRenderer.MinimumBreak = Classes[0];

            //pSymbologyControl是Symbology的容器
            ISymbologyControl pSymbologyControl = new SymbologyControlClass();
            //导入style文件
            pSymbologyControl.LoadStyleFile(System.IO.Path.GetDirectoryName(Application.ExecutablePath) + "\\Styles\\ESRI.ServerStyle");
            //使用随机色调
            ISymbologyStyleClass pSymbologyStyleClass = pSymbologyControl.GetStyleClass(esriSymbologyStyleClass.esriStyleClassColorRamps);
            IStyleGalleryItem pStyleGalleryItem = pSymbologyStyleClass.GetItem(22);
            object pObject = pStyleGalleryItem.Item;

            //使用随机色
            IColorRamp pcolorramp = pObject as IColorRamp;
            pcolorramp.Size = ClassesCount;
            bool pOk = true;
            pcolorramp.CreateRamp(out pOk);

            IColor pColor = null;

            //设置要素的填充颜色
            for (int i = 0; i < ClassesCount; i++)
            {
                pColor = pcolorramp.get_Color(ClassesCount - 1 - i);
                ISimpleFillSymbol pFillSymbol1 = new SimpleFillSymbolClass();
                pSimpleMarkerS.Color=pColor;
                pFillSymbol1.Style = esriSimpleFillStyle.esriSFSSolid;
                pSimpleMarkerS.Size = 6;
                pClassBreaksRenderer.BackgroundSymbol = pFillSymbol;
                pClassBreaksRenderer.set_Symbol(i, (ISymbol)pSimpleMarkerS);
                pClassBreaksRenderer.set_Break(i, Classes[i]);
            }

            pGeoFeatureLayer.Renderer = (IFeatureRenderer)pClassBreaksRenderer;

            return (IFeatureLayer)pGeoFeatureLayer;
        }
      
        /// <summary>
        /// 颜色设置
        /// </summary>
        /// <param name="red">R</param>
        /// <param name="green">G</param>
        /// <param name="blue">B</param>
        /// <returns>GIS颜色对象</returns>
        private static IColor GetColor(int red, int green, int blue)
        {
            IRgbColor rgbColor = new RgbColorClass();
            rgbColor.Red = red;
            rgbColor.Green = green;
            rgbColor.Blue = blue;
            IColor color = rgbColor as IColor;
            return color;
        }

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Arc GIS是由Esri公司开发的一套综合性GIS软件,包括了多个组件。其ArcMapArcCatalog和ArcScene是Arc GIS系列软件的三个主要组件,它们的不同功能和联系如下: 1. ArcMap ArcMapArc GIS系列软件的主要组件之一,是一款桌面GIS软件,主要用于制图、空间析和数据处理等操作。它提供了丰富的地图制图工具、数据编辑工具、空间析工具等,可以对各种GIS数据进行处理、析和展示。 2. ArcCatalog ArcCatalog是Arc GIS系列软件的另一个主要组件,是一款专门用于管理GIS数据的软件。它可以管理各种GIS数据,包括矢量数据、栅格数据、数据库等,提供了数据浏览、数据查询、数据导入导出等功能。 3. ArcScene ArcScene是Arc GIS系列软件的一个附加组件,是一款用于三维可视化和析的软件。它可以将GIS数据以三维形式呈现,支持多种三维空间析和可视化操作,包括立体视图、地形析、三维场景析等。 它们之间的联系主要体现在以下几个方面: 1. 数据共享 ArcMapArcCatalog可以相互配合,实现GIS数据的共享和管理,ArcCatalog的数据可以直接在ArcMap使用,ArcMap的制图和析结果也可以保存到ArcCatalog进行管理。 2. 数据编辑 ArcMapArcCatalog都可以进行GIS数据的编辑,ArcMap的编辑工具可以对地图数据进行编辑,ArcCatalog的编辑工具可以对数据进行编辑和管理。 3. 数据可视化 ArcMapArcScene都是可视化GIS数据的工具,ArcMap可以将数据以二维形式呈现,ArcScene可以将数据以三维形式呈现,两者可以相互配合,实现从二维到三维的可视化展示。 综上所述,ArcMapArcCatalog和ArcScene是Arc GIS系列软件的三个主要组件,它们别具有不同的功能,但又可以相互配合,实现GIS数据的管理、析和可视化等操作。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值