內蒙古java團隊

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

          ArcEngine 渲染的使用

          Posted on 2007-03-08 16:46 帥子 閱讀(3414) 評論(1)  編輯  收藏 所屬分類: j2se技術專區
          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中就是統計后的數據了。


          評論

          # re: ArcEngine 渲染的使用  回復  更多評論   

          2009-02-22 18:44 by zdp5528
          你好,我不知道你在ITable轉化IObjectClass的時候是否報錯,我這是報錯了,能不能交流一下 QQ:56098148
          主站蜘蛛池模板: 延安市| 宜川县| 白河县| 陆良县| 湖北省| 嘉峪关市| 海晏县| 双城市| 滦平县| 南和县| 潍坊市| 内丘县| 平定县| 基隆市| 江川县| 南平市| 柳河县| 富平县| 九江县| 德昌县| 洛阳市| 通渭县| 东明县| 五台县| 高唐县| 边坝县| 富裕县| 胶州市| 桂阳县| 元阳县| 和林格尔县| 文山县| 金塔县| 利津县| 开封县| 青阳县| 方正县| 莫力| 台北市| 得荣县| 锦屏县|