• 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中就是统计后的数据了。

  • 相关阅读:
    hdu 4710 Balls Rearrangement()
    hdu 4707 Pet(DFS水过)
    hdu 4706 Children's Day(模拟)
    hdu 4712 Hamming Distance(随机函数暴力)
    csu 1305 Substring (后缀数组)
    csu 1306 Manor(优先队列)
    csu 1312 榜单(模拟题)
    csu 1303 Decimal (数论题)
    网络爬虫
    Python处理微信利器——itchat
  • 原文地址:https://www.cnblogs.com/yuxuetaoxp/p/2751043.html
Copyright © 2020-2023  润新知