<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    內蒙古java團隊

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

    ArcEngine 渲染的使用

    Posted on 2007-03-08 16:46 帥子 閱讀(3413) 評論(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
    主站蜘蛛池模板: 亚洲偷自精品三十六区| MM131亚洲国产美女久久| 亚洲国产成人精品不卡青青草原| 久久国产精品免费一区| 奇米影视亚洲春色| 中文精品人人永久免费| 亚洲AV无码一区二区三区系列| 免费人成在线观看视频高潮| 亚洲AV无码一区二区二三区入口| 三上悠亚在线观看免费| 亚洲成AV人片在线观看无| 99精品视频免费在线观看| 久久综合亚洲色HEZYO社区 | 成年女人看片免费视频播放器| 亚洲av无码片区一区二区三区| 黄页网站在线看免费| 亚洲欧美综合精品成人导航| 国产免费久久精品| 一个人看的www在线免费视频 | 久久夜色精品国产亚洲| 久久成人免费播放网站| 亚洲av午夜精品无码专区| 在线不卡免费视频| 免费无遮挡无码视频在线观看| 亚洲无人区一区二区三区| 亚洲高清视频免费| 亚洲另类无码一区二区三区| 亚洲国产成人久久一区WWW| 人妻在线日韩免费视频| 亚洲中文无码线在线观看| 国产成人aaa在线视频免费观看| 一级毛片免费在线| 亚洲精彩视频在线观看| 国产乱人免费视频| a级在线观看免费| 亚洲 欧洲 日韩 综合在线| 亚洲无线一二三四区手机| 国产91色综合久久免费| 一区二区三区免费视频播放器| 亚洲综合日韩中文字幕v在线| 麻豆成人精品国产免费|