AE渲染使用.docx
《AE渲染使用.docx》由会员分享,可在线阅读,更多相关《AE渲染使用.docx(7页珍藏版)》请在冰豆网上搜索。
AE渲染使用
1.Feature的基本渲染方法
Feature的常用的绘制方法包括:
1.简单绘制
2.唯一值绘制/多字段唯一值绘制
3.点密度/多字段点密度绘制
4.数据分级绘制
5.质量图(饼图/直方图)
6.按比例尺渲染
7.比例符号渲染
1.简单渲染
简单渲染是ArcEngine的默认渲染,我们打开一个FeatureClass,建立一个FeatureLayer的时候,
如果没有给FeatureLayer设置Renderer那么使用的就是简单渲染。
简单渲染对整个图层中的所有Feature
使用同一种方式显示。
简单渲染在ArcEngine中用ISimpleRenderer来表示。
ISimpleRenderer的使用方式如下:
//假设layer是一个IFeatureLayer,获取IGeoFeatureLayer
IGeoFeatureLayergeoLayer=layerasIGeoFeatureLayer;
//构造SimpleRenderer
ISimpleRendererrenderer=newSimpleRendererClass();
renderer.deion="简单的渲染一下";
renderer.Label="符号的标签";
//假设sym是一个和该图层中Geometry类型对应的符号;
renderer.Symbol=sym;
//为图层设置渲染,注意需要刷新该图层。
geoLayer.Renderer=renderer;
2.独立值/多字段独立值渲染
独立值/多字段独立值渲染,根据Feature的某一个字段的数据或某几个字段的组合结果来确定符号。
具有相同值或相同组合值的Feature,使用一样的符号。
在使用多个字段的使用,每个字段的取值之间
使用分割符来连接。
字段的取值顺序和在Renderer中设置的一样。
基本使用方式如下:
//假设layer是一个IFeatureLayer,获取IGeoFeatureLayer
IGeoFeatureLayergeoLayer=layerasIGeoFeatureLayer;
//构造一个UniqueValueRenderer
IUniqueValueRendererrenderer=newUniqueValueRendererClass();
//假设使用两个字段来渲染
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上就可以显示几种不同的点。
注意点密度图有一个特殊的地方:
点密度图使用的符号是面状符号。
而其中有需要包括点状符号。
接口使用如下:
IDotDensityRendererrenderer=newDotDensityRendererClass();
IRendererFieldsflds=(IRendererFields)renderer;
flds.AddField("MJ","面积");
flds.AddField("RK","人口");
IDotDensityFillSymbolddSym=newDotDensityFillSymbolClass();
ISymbolArraysymArray=(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;
IGeoFeatureLayergeoLayer=(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.外表关联
ITabledispTable=((IDisplayTable)feaLayer).DisplayTable;//图层
ITableattTable;//外表
IMemoryRelationshipClassFactoryfac=newMemoryRelationshipClassFactoryClass();IRelationshipClassrelClass=fac.Open("JZMJ",(IObjectClass)dispTable,"ZDDJH",
IObjectClass)attTable,"G03",
"Forward","Backward",
esriRelCardinality.esriRelCardinalityOneToOne);
IDisplayRelationshipClassdispRelClass=feaLayerasIDisplayRelationshipClass;dispRelClass.DisplayRelationshipClass(relClass,esriJoinType.esriLeftInnerJoin);
10.统计分析
ITableHistogramtableHistogram=newBasicTableHistogramClass();
tableHistogram.Table=((IDisplayTable)layer).DisplayTable;
tableHistogram.Field=fieldName;
objectvalueArray=null,freq=null;
IBasicHistogrambasicHistogram=(IBasicHistogram)tableHistogram;
basicHistogram.GetHistogram(outvalueArray,outfreq);
IClassifyclassify=null;
intbreakNum=6;
//分类方法
switch(ClassifyMethod)
{
caseClassifyMethodName.lsClassifyMethodEqualInterval:
{
EqualIntervalClasseq=newEqualIntervalClass();
eq.Classify(valueArray,freq,refbreakNum);
classify=(IClassify)eq;
break;
}
caseClassifyMethodName.lsClassifyMethodStandardDeviation:
{
StandardDeviationClasssd=newStandardDeviationClass();IStatisticsResultsstat=histogramasIStatisticsResults;classify=sdasIClassify;
classify.SetHistogramData(valueArray,freq);IDeviationIntervaldi=sdasIDeviationInterval;
di.DeviationInterval=1;
di.Mean=stat.Mean;
di.StandardDev=stat.StandardDeviation;
classify.Classify(refbreakNum);
break;
}
caseClassifyMethodName.lsClassifyMethodQuantile:
{
Quantileqc=newQuantileClass();
qc.Classify(valueArray,freq,refbreakNum);
classify=qcasIClassify;
break;
}
caseClassifyMethodName.lsClassifyMethodNaturalBreaks:
{
NaturalBreaksClassnb=newNaturalBreaksClass();
nb.Classify(valueArray,freq,refbreakNum);
classify=nbasIClassify;
break;
}
caseClassifyMethodName.lsClassifyMethodDefinedInterval:
{
DefinedIntervalClassdi=newDefinedIntervalClass();
di.IntervalRange=this.m_classBreaksParam.Interval;
di.Classify(valueArray,freq,refbreakNum);classify=diasIClassify;
break;
}
default:
{
EqualIntervalClasseq=newEqualIntervalClass();eq.Classify(valueArray,freq,refbreakNum);classify=(IClassify)eq;
break;
}
}
objecto=classify.ClassBreaks;
System.ArraybreakArray=oasSystem.Array;
现在breakArray中就是统计后的数据了。