给定一个地图模板和一些新的数据,用新的数据替换老的数据,对地图重新渲染(分级设色)

如题,如果给定一个地图模板,里面包含设置好的渲染方式,现在要做的是用新的数据替换旧的模板中对应的数据,并让新数据根据模板中的渲染方式渲染,

      经测试,只是把旧数据替换为新数据是不能实现此需求的,举个例子:模板中的数据最大为100,最小为0,分五级的话最大一级为80-100,但是新的数据最大为200,最小为0 ,如果分五级的话最大一级应该是160-200,但是现在存在的问题是图层替换成新的数据了,但是地图上的分级没有更新,没有根据新数据的最大最小分级,所以单纯替换数据是不行的,在此想出的办法是,得到模板中数据的渲染方式比如:颜色、分级级数、分级字段,然后用新的数据重新分级,具体代码如下:

   

  /// <summary>
        ///  图层渲染
        /// </summary>
        /// <param name="oldLayerList">地图模板中的图层(在此规定模板中第一个图层就是分级设色的图层)</param>

  private void LayerRender(List<ILayer> oldLayerList)
        {
            try
            {
                if (oldLayerList.Count > 0)
                {
                    //得到旧图层的渲染方式
                    IFeatureLayer pFeatureLayer = oldLayerList[0] as IFeatureLayer;
                    IGeoFeatureLayer pGeoFeatureLayer = pFeatureLayer as IGeoFeatureLayer;
                    IClassBreaksRenderer classRender = pGeoFeatureLayer.Renderer as IClassBreaksRenderer;


                    //设置新的渲染方式的分级为旧渲染方式的级数
                    int desiredClasses = classRender.BreakCount;
                    //设置新的渲染方式的字段为旧渲染方式的字段
                    string fieldName = classRender.Field;

                    int classesCount;
                    double[] classes;


                    object dataFrequency;
                    object dataValues;
                    ITable pTable;


                    EqualIntervalClass pClassify;

                    ITableHistogram pTableHistogram = new BasicTableHistogramClass() as ITableHistogram;
                    IBasicHistogram pHistogram;
                    IClassBreaksRenderer pClassBreaksRenderer;


                    pTable = (ITable)pGeoFeatureLayer;
                    pHistogram = (IBasicHistogram)pTableHistogram;
                    //渲染字段的名称
                    pTableHistogram.Field = fieldName;
                    pTableHistogram.Table = pTable;
                    pHistogram.GetHistogram(out dataValues, out dataFrequency);
                    pClassify = new EqualIntervalClass();
                    pClassify.SetHistogramData(dataValues, dataFrequency);
                    //渲染字段的级数
                    pClassify.Classify(dataValues, dataFrequency, ref desiredClasses);
                    classes = (double[])pClassify.ClassBreaks;
                    classesCount = classes.Length;
                    //创建新渲染方式,设置字段和级数为旧渲染的字段和级数

                    pClassBreaksRenderer = new ClassBreaksRendererClass();
                    pClassBreaksRenderer.Field = fieldName;
                    pClassBreaksRenderer.BreakCount = desiredClasses;
                    //不能改为true,否则颜色会是反的
                    pClassBreaksRenderer.SortClassesAscending = false;

                    string strOutput = String.Empty;
                    double LeftLable = 0;
                    double RightLable = 0;
                    for (int index = 0; index < classesCount - 1; index++)
                    {
                        //设置新渲染的符号(颜色)为旧渲染的符号(颜色)
                        pClassBreaksRenderer.set_Symbol(index, classRender.get_Symbol(index));
                        //设置分级
                        pClassBreaksRenderer.set_Break(index, classes[index + 1]);
                        //设置分级lable
                        LeftLable = classes[classesCount - 2 - index];
                        RightLable = classes[classesCount - 1 - index];
                        strOutput = String.Format("{0}-{1}", LeftLable.ToString("0"), RightLable.ToString("0"));
                        //代码位置不能提前,否则lable显示这句不起作用
                        pClassBreaksRenderer.set_Label(index, strOutput);
                    }
                    pGeoFeatureLayer.Renderer = (IFeatureRenderer)pClassBreaksRenderer;
                    pActiveView.ContentsChanged();
                    pActiveView.Refresh();
                }
            }
            catch (Exception)
            {


                return;
            }
        }

此文参考了http://blog.csdn.net/sophiasy/article/details/6067949博文,在此感谢!

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值