內(nèi)蒙古java團(tuán)隊(duì)

          j2se,j2ee開發(fā)組
          posts - 139, comments - 212, trackbacks - 0, articles - 65
            BlogJava :: 首頁 :: 新隨筆 :: 聯(lián)系 :: 聚合  :: 管理

          ArcEngine 渲染的使用

          Posted on 2007-03-08 16:46 帥子 閱讀(3414) 評論(1)  編輯  收藏 所屬分類: j2se技術(shù)專區(qū)
          ArcEngine 渲染的使用

          1.Feature的基本渲染方法
          ?Feature的常用的繪制方法包括:
          ? 1.簡單繪制
          ? 2.唯一值繪制/多字段唯一值繪制
          ? 3.點(diǎn)密度/多字段點(diǎn)密度繪制
          ? 4.數(shù)據(jù)分級繪制
          ? 5.質(zhì)量圖(餅圖/直方圖)
          ? 6.按比例尺渲染
          ? 7.比例符號渲染
          ?
          ? 1.簡單渲染
          ? 簡單渲染是ArcEngine的默認(rèn)渲染,我們打開一個(gè)FeatureClass,建立一個(gè)FeatureLayer的時(shí)候,
          如果沒有給FeatureLayer設(shè)置Renderer那么使用的就是簡單渲染。簡單渲染對整個(gè)圖層中的所有Feature
          使用同一種方式顯示。
          簡單渲染在ArcEngine中用ISimpleRenderer來表示。
          ?ISimpleRenderer的使用方式如下:
          ?//假設(shè)layer是一個(gè)IFeatureLayer,獲取IGeoFeatureLayer
          ? IGeoFeatureLayer geoLayer=layer as IGeoFeatureLayer;
          ? //構(gòu)造SimpleRenderer
          ? ISimpleRenderer renderer=new SimpleRendererClass();
          ? renderer.description="簡單的渲染一下";
          ? renderer.Label="符號的標(biāo)簽";
          ? //假設(shè)sym是一個(gè)和該圖層中Geometry類型對應(yīng)的符號;
          ? renderer.Symbol=sym;
          ? //為圖層設(shè)置渲染,注意需要刷新該圖層。
          ? geoLayer.Renderer=renderer;
          ? 2.獨(dú)立值/多字段獨(dú)立值渲染
          ? 獨(dú)立值/多字段獨(dú)立值渲染,根據(jù)Feature的某一個(gè)字段的數(shù)據(jù)或某幾個(gè)字段的組合結(jié)果來確定符號。
          ? 具有相同值或相同組合值的Feature,使用一樣的符號。在使用多個(gè)字段的使用,每個(gè)字段的取值之間
          ? 使用分割符來連接。字段的取值順序和在Renderer中設(shè)置的一樣。
          ? 基本使用方式如下:
          ? //假設(shè)layer是一個(gè)IFeatureLayer,獲取IGeoFeatureLayer
          ? IGeoFeatureLayer geoLayer=layer as IGeoFeatureLayer;
          ? //構(gòu)造一個(gè)UniqueValueRenderer
          ? IUniqueValueRenderer renderer=new UniqueValueRendererClass();
          ? //假設(shè)使用兩個(gè)字段來渲染
          ? renderer.FieldCount=2;
          ? //假設(shè)YSLX字段表示要素類型
          ? //假設(shè)YSYT字段表示要數(shù)用途
          ? renderer.set_Field(0,"YSLX");
          ? renderer.set_Field(1,"YSYT");
          ? //字段之間使用 | 來連接(默認(rèn)取值)
          ? renderer.FieldDelimiter="|";
          ? //設(shè)置默認(rèn)符號
          ? renderer.DefaultSymbol=defaultSymbol;
          ? renderer.DefaultLabel="默認(rèn)Label";
          ? //添加值
          ? renderer.addValue("房屋|民居","民居房屋",MJSymbol);
          ? renderer.addValue("房屋|商業(yè)用地","商業(yè)用地",SYSymbol);
          ? ...
          ? //還可以通過set_Symbol,set_Heading、set_Value來修改上述設(shè)置。
          ? geoLayer.Renderer=renderer.
          ? 3.點(diǎn)密度/多字段點(diǎn)密度
          ? 點(diǎn)密度圖通過在Feature的圖形上打點(diǎn)來表示數(shù)據(jù)的數(shù)多,點(diǎn)越密集表示數(shù)據(jù)量越大。
          ? 還可以使用多字段的點(diǎn)密度圖。這個(gè)使用同一個(gè)Feature上就可以顯示幾種不同的點(diǎn)。
          ? 注意點(diǎn)密度圖有一個(gè)特殊的地方:
          ??? 點(diǎn)密度圖使用的符號是面狀符號。而其中有需要包括點(diǎn)狀符號。
          ??? 接口使用如下:
          ??? ?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.數(shù)據(jù)分級繪制(使用IClassBreaksRenderer)
          ?5.餅圖/直方圖(使用IChartRenderer)
          ?6.按比例尺渲染(使IScaleDependentRenderer)
          ?7.比例符號渲染(使用 IProportionalSymbolRenderer )
          2.圖例的使用
          ? 圖例的使用通過ILegendInfo接口。每個(gè)Renderer都實(shí)現(xiàn)了該接口,但是有時(shí)候該實(shí)現(xiàn)不好用,
          ? 所以也可以自己實(shí)現(xiàn)該接口。實(shí)現(xiàn)過程是比較簡單的。
          3.渲染層次
          ? 使用ILevelRender 接口。該接口可以指定一 當(dāng)前的Level(-1)表示繪制全部。
          ? 然后 提供一個(gè)符號數(shù)組 ,注意每個(gè)符號要指定Level .如果不指定就默認(rèn)為0。

          4.透明度控制
          ? 透明度控制使用 ITransparencyRenderer 接口。該接口允許指定一個(gè)字段,字段取值用來表示透明度
          ? 注意 透明度的取值在0--100之間。
          5.數(shù)據(jù)正規(guī)化
          ? 數(shù)據(jù)正規(guī)化用 IDataNormalization 接口來表示。該接口提供了幾種正規(guī)化表示方法。
          6.部分渲染
          ? 部分渲染通過使用IDataExclusion? 來實(shí)現(xiàn)。該接口允許提供過濾語句來過濾掉不需要渲染的Feature。
          ? 同時(shí)也可以給他們制定特殊的符號。同時(shí)控制是否顯示
          7.旋轉(zhuǎn)控制
          ? 旋轉(zhuǎn)控制通過使用IRotationRenderer 接口來表示。該接口要求提供旋轉(zhuǎn)角度的字段。同時(shí)要求提供旋轉(zhuǎn)的
          ? 方法。
          8.數(shù)據(jù)樣本
          ?IDataSampling? 沒有使用過。
          9.外表關(guān)聯(lián)
          ?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.統(tǒng)計(jì)分析
          ?? 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;
          ???現(xiàn)在breakArray中就是統(tǒng)計(jì)后的數(shù)據(jù)了。


          評論

          # re: ArcEngine 渲染的使用  回復(fù)  更多評論   

          2009-02-22 18:44 by zdp5528
          你好,我不知道你在ITable轉(zhuǎn)化IObjectClass的時(shí)候是否報(bào)錯(cuò),我這是報(bào)錯(cuò)了,能不能交流一下 QQ:56098148
          主站蜘蛛池模板: 平武县| 罗山县| 正安县| 怀来县| 贵州省| 西乌| 灵石县| 青冈县| 南通市| 北宁市| 宜兴市| 家居| 布尔津县| 嘉善县| 江城| 临颍县| 栾城县| 垦利县| 鄯善县| 阜阳市| 孟津县| 南华县| 阿勒泰市| 郯城县| 丹巴县| 珲春市| 奉贤区| 连州市| 措勤县| 天全县| 萨嘎县| 芦山县| 施甸县| 永德县| 三亚市| 桃江县| 桐庐县| 吕梁市| 旺苍县| 临邑县| 延边|