zoukankan      html  css  js  c++  java
  • ArcEngine 渲染的使用 (转)

    1.Feature的基本渲染方法
    Feature的常用的绘制方法包括:
    1.简单绘制
    2.唯一值绘制/多字段唯一值绘制
    3.点密度/多字段点密度绘制
    4.数据分级绘制
    5.质量图(饼图/直方图)
    6.按比例尺渲染
    7.比例符号渲染

    1.简单渲染
    简单渲染是ArcEngine的默认渲染,我们打开一个FeatureClass,建立一个FeatureLayer的时候,
    如果没有给FeatureLayer设置Renderer那么使用的就是简单渲染。简单渲染对整个图层中的所有Feature
    使用同一种方式显示。
    简单渲染在ArcEngine中用ISimpleRenderer来表示。
    ISimpleRenderer的使用方式如下:
    //假设layer是一个IFeatureLayer,获取IGeoFeatureLayer
    IGeoFeatureLayer geoLayer=layer as IGeoFeatureLayer;
    //构造SimpleRenderer
    ISimpleRenderer renderer=new SimpleRendererClass();
    renderer.description="简单的渲染一下";
    renderer.Label="符号的标签";
    //假设sym是一个和该图层中Geometry类型对应的符号;
    renderer.Symbol=sym;
    //为图层设置渲染,注意需要刷新该图层。
    geoLayer.Renderer=renderer;
    2.独立值/多字段独立值渲染
    独立值/多字段独立值渲染,根据Feature的某一个字段的数据或某几个字段的组合结果来确定符号。
    具有相同值或相同组合值的Feature,使用一样的符号。在使用多个字段的使用,每个字段的取值之间
    使用分割符来连接。字段的取值顺序和在Renderer中设置的一样。
    基本使用方式如下:
    //假设layer是一个IFeatureLayer,获取IGeoFeatureLayer
    IGeoFeatureLayer geoLayer=layer as IGeoFeatureLayer;
    //构造一个UniqueValueRenderer
    IUniqueValueRenderer renderer=new UniqueValueRendererClass();
    //假设使用两个字段来渲染
    renderer.FieldCount=2;
    //假设YSLX字段表示要素类型
    //假设YSYT字段表示要数用途
    renderer.set_Field(0,"YSLX");
    renderer.set_Field(1,"YSYT");
    //字段之间使用 | 来连接(默认取值)
    renderer.FieldDelimiter="|";
    //设置默认符号
    renderer.DefaultSymbol=defaultSymbol;
    renderer.DefaultLabel="默认Label";
    //添加值
    renderer.addValue("房屋|民居","民居房屋",MJSymbol);
    renderer.addValue("房屋|商业用地","商业用地",SYSymbol);
    ...
    //还可以通过set_Symbol,set_Heading、set_Value来修改上述设置。
    geoLayer.Renderer=renderer.
    3.点密度/多字段点密度
    点密度图通过在Feature的图形上打点来表示数据的数多,点越密集表示数据量越大。
    还可以使用多字段的点密度图。这个使用同一个Feature上就可以显示几种不同的点。
    注意点密度图有一个特殊的地方:
    点密度图使用的符号是面状符号。而其中有需要包括点状符号。
    接口使用如下:
    IDotDensityRenderer renderer=new DotDensityRendererClass ();
    IRendererFields flds=(IRendererFields)renderer;
    flds.AddField("MJ ","面积");
    flds.AddField("RK","人口");
    IDotDensityFillSymbol ddSym=new DotDensityFillSymbolClass();
    ISymbolArray symArray=(ISymbolArray)ddSym;
    symArray.AddSymbol(mjSymbol);
    symArray.AddSymbol(rkSymbol);
    ddSym.Outline =(ILineSymbol)outlineSymbol ;
    ddSym.DotSize =10 ;
    ddSym.FixedPlacement=true;

    renderer.DotDensitySymbol =ddSym;
    renderer.DotValue=20 ;
    renderer.MaintainSize=this.m_dotdensityParam .MaintainSize ;
    IGeoFeatureLayer geoLayer=(IGeoFeatureLayer)layer ;
    geoLayer.Renderer =(IFeatureRenderer)renderer;
    4.数据分级绘制(使用IClassBreaksRenderer)
    5.饼图/直方图(使用IChartRenderer)
    6.按比例尺渲染(使IScaleDependentRenderer)
    7.比例符号渲染(使用 IProportionalSymbolRenderer )
    2.图例的使用
    图例的使用通过ILegendInfo接口。每个Renderer都实现了该接口,但是有时候该实现不好用,
    所以也可以自己实现该接口。实现过程是比较简单的。
    3.渲染层次
    使用ILevelRender 接口。该接口可以指定一 当前的Level(-1)表示绘制全部。
    然后 提供一个符号数组 ,注意每个符号要指定Level .如果不指定就默认为0。

    4.透明度控制
    透明度控制使用 ITransparencyRenderer 接口。该接口允许指定一个字段,字段取值用来表示透明度
    注意 透明度的取值在0--100之间。
    5.数据正规化
    数据正规化用 IDataNormalization 接口来表示。该接口提供了几种正规化表示方法。
    6.部分渲染
    部分渲染通过使用IDataExclusion 来实现。该接口允许提供过滤语句来过滤掉不需要渲染的Feature。
    同时也可以给他们制定特殊的符号。同时控制是否显示
    7.旋转控制
    旋转控制通过使用IRotationRenderer 接口来表示。该接口要求提供旋转角度的字段。同时要求提供旋转的
    方法。
    8.数据样本
    IDataSampling 没有使用过。
    9.外表关联
    ITable dispTable=((IDisplayTable)feaLayer).DisplayTable ;//图层
    ITable attTable;//外表
    IMemoryRelationshipClassFactory fac=new MemoryRelationshipClassFactoryClass ();
    IRelationshipClass relClass=fac.Open("JZMJ",(IObjectClass)dispTable,"ZDDJH",
    IObjectClass)attTable,"G03",
    "Forward","Backward",
    esriRelCardinality.esriRelCardinalityOneToOne);
    IDisplayRelationshipClass dispRelClass=feaLayer as IDisplayRelationshipClass ;
    dispRelClass.DisplayRelationshipClass(relClass,esriJoinType.esriLeftInnerJoin);
    10.统计分析
    ITableHistogram tableHistogram=new BasicTableHistogramClass ();
    tableHistogram.Table =((IDisplayTable)layer).DisplayTable ;
    tableHistogram.Field =fieldName ;
    object valueArray=null, freq=null;
    IBasicHistogram basicHistogram=(IBasicHistogram)tableHistogram;
    basicHistogram.GetHistogram(out valueArray,out freq);
    IClassify classify=null;
    int breakNum=6;
    //分类方法
    switch(ClassifyMethod )
    {
    case ClassifyMethodName.lsClassifyMethodEqualInterval:
    {

    EqualIntervalClass eq=new EqualIntervalClass ();
    eq.Classify (valueArray,freq,ref breakNum);
    classify=(IClassify)eq;

    break;
    }
    case ClassifyMethodName.lsClassifyMethodStandardDeviation:
    {

    StandardDeviationClass sd=new StandardDeviationClass ();
    IStatisticsResults stat= histogram as IStatisticsResults ;
    classify=sd as IClassify;
    classify.SetHistogramData (valueArray,freq);
    IDeviationInterval di=sd as IDeviationInterval ;
    di.DeviationInterval=1;
    di.Mean=stat.Mean;
    di.StandardDev=stat.StandardDeviation;
    classify.Classify (ref breakNum);

    break;
    }
    case ClassifyMethodName.lsClassifyMethodQuantile:
    {

    Quantile qc=new QuantileClass ();
    qc.Classify (valueArray,freq,ref breakNum);
    classify=qc as IClassify ;

    break;
    }
    case ClassifyMethodName.lsClassifyMethodNaturalBreaks:
    {

    NaturalBreaksClass nb=new NaturalBreaksClass ();
    nb.Classify (valueArray,freq,ref breakNum);
    classify=nb as IClassify ;

    break;
    }
    case ClassifyMethodName.lsClassifyMethodDefinedInterval:
    {
    DefinedIntervalClass di=new DefinedIntervalClass ();
    di.IntervalRange =this.m_classBreaksParam .Interval ;
    di.Classify (valueArray,freq,ref breakNum);
    classify=di as IClassify ;
    break;
    }
    default:
    {

    EqualIntervalClass eq=new EqualIntervalClass ();
    eq.Classify (valueArray,freq,ref breakNum);
    classify=(IClassify)eq;
    break;

    }
    }
    object o=classify.ClassBreaks ;
    System.Array breakArray= o as System.Array;
    现在breakArray中就是统计后的数据了。

  • 相关阅读:
    Sql Server系列:分区表操作
    [bug]WCF 内存入口检查失败 Memory gates checking failed
    由于 Web 服务器上的“ISAPI 和 CGI 限制”列表设置,无法提供您请求的页面。
    如何设置IIS程序池的回收时间,才能最大程度的减少对用户的影响?
    IIS 之 在IIS7、IIS7.5中应用程序池最优配置方案
    使用nginx搭建高可用,高并发的wcf集群
    NPOI读写Excel
    用 IIS 实现请求转发
    模型验证组件 FluentValidation
    C#中的 正则表达式
  • 原文地址:https://www.cnblogs.com/yuxuetaoxp/p/2751043.html
Copyright © 2011-2022 走看看