cl991036
管理员
管理员
  • 注册日期2003-07-25
  • 发帖数5917
  • QQ14265545
  • 铜币29669枚
  • 威望217点
  • 贡献值0点
  • 银元0个
  • GIS帝国居民
  • GIS帝国铁杆
阅读:1373回复:0

ArcEngine 渲染的使用

楼主#
更多 发布于:2008-12-21 16:49
1.Feature的基本渲染方法<BR> Feature的常用的绘制方法包括:<BR>  1.简单绘制<BR>  2.唯一值绘制/多字段唯一值绘制<BR>  3.点密度/多字段点密度绘制<BR>  4.数据分级绘制<BR>  5.质量图(饼图/直方图)<BR>  6.按比例尺渲染<BR>  7.比例符号渲染<BR>  <BR>  1.简单渲染 <BR>  简单渲染是ArcEngine的默认渲染,我们打开一个FeatureClass,建立一个FeatureLayer的时候,<BR>如果没有给FeatureLayer设置Renderer那么使用的就是简单渲染。简单渲染对整个图层中的所有Feature<BR>使用同一种方式显示。<BR>简单渲染在ArcEngine中用ISimpleRenderer来表示。<BR> ISimpleRenderer的使用方式如下: <BR> //假设layer是一个IFeatureLayer,获取IGeoFeatureLayer<BR>  IGeoFeatureLayer geoLayer=layer as IGeoFeatureLayer;<BR>  //构造SimpleRenderer<BR>  ISimpleRenderer renderer=new SimpleRendererClass();<BR>  renderer.deion="简单的渲染一下";<BR>  renderer.Label="符号的标签";<BR>  //假设sym是一个和该图层中Geometry类型对应的符号;<BR>  renderer.Symbol=sym;<BR>  //为图层设置渲染,注意需要刷新该图层。<BR>  geoLayer.Renderer=renderer;<BR>  2.独立值/多字段独立值渲染<BR>  独立值/多字段独立值渲染,根据Feature的某一个字段的数据或某几个字段的组合结果来确定符号。<BR>  具有相同值或相同组合值的Feature,使用一样的符号。在使用多个字段的使用,每个字段的取值之间<BR>  使用分割符来连接。字段的取值顺序和在Renderer中设置的一样。<BR>  基本使用方式如下:<BR>  //假设layer是一个IFeatureLayer,获取IGeoFeatureLayer<BR>  IGeoFeatureLayer geoLayer=layer as IGeoFeatureLayer;<BR>  //构造一个UniqueValueRenderer <BR>  IUniqueValueRenderer renderer=new UniqueValueRendererClass();<BR>  //假设使用两个字段来渲染<BR>  renderer.FieldCount=2;<BR>  //假设YSLX字段表示要素类型<BR>  //假设YSYT字段表示要数用途<BR>  renderer.set_Field(0,"YSLX");<BR>  renderer.set_Field(1,"YSYT");<BR>  //字段之间使用 | 来连接(默认取值)<BR>  renderer.FieldDelimiter="|";<BR>  //设置默认符号<BR>  renderer.DefaultSymbol=defaultSymbol;<BR>  renderer.DefaultLabel="默认Label";<BR>  //添加值<BR>  renderer.addValue("房屋|民居","民居房屋",MJSymbol);<BR>  renderer.addValue("房屋|商业用地","商业用地",SYSymbol);<BR>  ...<BR>  //还可以通过set_Symbol,set_Heading、set_Value来修改上述设置。<BR>  geoLayer.Renderer=renderer.<BR>  3.点密度/多字段点密度<BR>  点密度图通过在Feature的图形上打点来表示数据的数多,点越密集表示数据量越大。<BR>  还可以使用多字段的点密度图。这个使用同一个Feature上就可以显示几种不同的点。<BR>  注意点密度图有一个特殊的地方:<BR>    点密度图使用的符号是面状符号。而其中有需要包括点状符号。<BR>    接口使用如下:<BR>     IDotDensityRenderer renderer=new DotDensityRendererClass ();<BR>   IRendererFields flds=(IRendererFields)renderer;<BR>   flds.AddField("MJ ","面积");<BR>   flds.AddField("RK","人口");<BR>   IDotDensityFillSymbol ddSym=new DotDensityFillSymbolClass();<BR>   ISymbolArray symArray=(ISymbolArray)ddSym;<BR>   symArray.AddSymbol(mjSymbol);<BR>   symArray.AddSymbol(rkSymbol);<BR>   ddSym.Outline =(ILineSymbol)outlineSymbol ;   <BR>   ddSym.DotSize =10 ;<BR>   ddSym.FixedPlacement=true;   <BR>   <BR>   renderer.DotDensitySymbol =ddSym;<BR>   renderer.DotValue=20 ;<BR>   renderer.MaintainSize=this.m_dotdensityParam .MaintainSize ;<BR>   IGeoFeatureLayer geoLayer=(IGeoFeatureLayer)layer ;<BR>   geoLayer.Renderer =(IFeatureRenderer)renderer;<BR> 4.数据分级绘制(使用IClassBreaksRenderer)<BR> 5.饼图/直方图(使用IChartRenderer)<BR> 6.按比例尺渲染(使IScaleDependentRenderer)<BR> 7.比例符号渲染(使用 IProportionalSymbolRenderer )<BR>2.图例的使用<BR>  图例的使用通过ILegendInfo接口。每个Renderer都实现了该接口,但是有时候该实现不好用,<BR>  所以也可以自己实现该接口。实现过程是比较简单的。<BR>3.渲染层次<BR>  使用ILevelRender 接口。该接口可以指定一 当前的Level(-1)表示绘制全部。<BR>  然后 提供一个符号数组 ,注意每个符号要指定Level .如果不指定就默认为0。<BR><BR>4.透明度控制<BR>  透明度控制使用 ITransparencyRenderer 接口。该接口允许指定一个字段,字段取值用来表示透明度<BR>  注意 透明度的取值在0--100之间。<BR>5.数据正规化<BR>  数据正规化用 IDataNormalization 接口来表示。该接口提供了几种正规化表示方法。<BR>6.部分渲染<BR>  部分渲染通过使用IDataExclusion  来实现。该接口允许提供过滤语句来过滤掉不需要渲染的Feature。<BR>  同时也可以给他们制定特殊的符号。同时控制是否显示<BR>7.旋转控制<BR>  旋转控制通过使用IRotationRenderer 接口来表示。该接口要求提供旋转角度的字段。同时要求提供旋转的<BR>  方法。<BR>8.数据样本<BR> IDataSampling  没有使用过。<BR>9.外表关联<BR> ITable dispTable=((IDisplayTable)feaLayer).DisplayTable ;//图层<BR> ITable attTable;//外表<BR> IMemoryRelationshipClassFactory fac=new MemoryRelationshipClassFactoryClass ();<BR> IRelationshipClass relClass=fac.Open("JZMJ",(IObjectClass)dispTable,"ZDDJH",<BR>   IObjectClass)attTable,"G03",<BR>   "Forward","Backward",<BR>   esriRelCardinality.esriRelCardinalityOneToOne);<BR> IDisplayRelationshipClass dispRelClass=feaLayer as IDisplayRelationshipClass ;<BR> dispRelClass.DisplayRelationshipClass(relClass,esriJoinType.esriLeftInnerJoin);<BR>10.统计分析<BR>   ITableHistogram  tableHistogram=new BasicTableHistogramClass ();<BR>  tableHistogram.Table =((IDisplayTable)layer).DisplayTable  ;<BR>  tableHistogram.Field =fieldName ;<BR>  object valueArray=null, freq=null;<BR>  IBasicHistogram basicHistogram=(IBasicHistogram)tableHistogram;<BR>  basicHistogram.GetHistogram(out valueArray,out freq);<BR>  IClassify classify=null;<BR>   int breakNum=6;<BR>   //分类方法<BR>   switch(ClassifyMethod )<BR>   {<BR>    case ClassifyMethodName.lsClassifyMethodEqualInterval:<BR>    {<BR>     <BR>      EqualIntervalClass  eq=new EqualIntervalClass ();<BR>      eq.Classify (valueArray,freq,ref breakNum);<BR>      classify=(IClassify)eq;<BR>     <BR>     break;<BR>    }<BR>    case ClassifyMethodName.lsClassifyMethodStandardDeviation:<BR>    {<BR>     <BR>      StandardDeviationClass sd=new StandardDeviationClass ();<BR>      IStatisticsResults stat= histogram as IStatisticsResults ;<BR>      classify=sd as IClassify;<BR>      classify.SetHistogramData (valueArray,freq);<BR>      IDeviationInterval di=sd as IDeviationInterval ;<BR>      di.DeviationInterval=1;<BR>      di.Mean=stat.Mean;<BR>      di.StandardDev=stat.StandardDeviation;<BR>      classify.Classify (ref breakNum);<BR>     <BR>     break;<BR>    }<BR>    case ClassifyMethodName.lsClassifyMethodQuantile:<BR>    {<BR>     <BR>      Quantile qc=new QuantileClass ();<BR>      qc.Classify (valueArray,freq,ref breakNum);<BR>      classify=qc as IClassify ;<BR>     <BR>     break;<BR>    }<BR>    case ClassifyMethodName.lsClassifyMethodNaturalBreaks:<BR>    {<BR>     <BR>      NaturalBreaksClass nb=new NaturalBreaksClass ();<BR>      nb.Classify (valueArray,freq,ref breakNum);<BR>      classify=nb as IClassify ;<BR>     <BR>     break;<BR>    }<BR>    case ClassifyMethodName.lsClassifyMethodDefinedInterval:<BR>    {<BR>     DefinedIntervalClass di=new DefinedIntervalClass ();<BR>     di.IntervalRange =this.m_classBreaksParam .Interval ;<BR>     di.Classify (valueArray,freq,ref breakNum);<BR>     classify=di as IClassify ;<BR>     break;<BR>    }<BR>    default:<BR>    {<BR>    <BR>     EqualIntervalClass  eq=new EqualIntervalClass ();<BR>     eq.Classify (valueArray,freq,ref breakNum);<BR>     classify=(IClassify)eq;<BR>     break;<BR>    <BR>    }<BR>   }   <BR>   object o=classify.ClassBreaks ;<BR>   System.Array breakArray= o as System.Array;<BR>   现在breakArray中就是统计后的数据了。<BR><BR>
喜欢0 评分0
没钱又丑,农村户口。头可断,发型一定不能乱。 邮箱:gisempire@qq.com
游客

返回顶部