ArcEngine 渲染的使用

简介:
Articles - 0  Comments - 446 

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.deion="简单的渲染一下";
  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中就是统计后的数据了。

版权说明

  如果标题未标有<转载、转>等字则属于作者原创,欢迎转载,其版权归作者和博客园共有。
  作      者:温景良
  文章出处:http://wenjl520.cnblogs.com/  或  http://www.cnblogs.com/

分类: ArcEngine
0
0
« 上一篇: ArcSDE同时for Oracle、for Sql Server方法
» 下一篇: 使用IUniqueValueRenderer在同一层中根据字段渲染出不同颜色收藏
posted @ 2009-02-09 17:17 温景良(Jason) Views(880) Comments(0) Edit 收藏
 
相关文章
|
编解码
Blender视图渲染知识
Blender视图渲染知识
Blender视图渲染知识
|
7月前
|
Android开发 开发者
Android开发之通过渲染纹理展示地球仪
该文阐述了如何使用OpenGL为三维物体添加纹理,以增强其真实感。纹理坐标是二维的,用于标记摊平后的“布料”对应物体的哪个部位,类似裁缝制作衣服的过程。在OpenGL中,启用纹理和深度测试是关键,还包括设置纹理参数、分配纹理编号、绑定位图材质等步骤。计算材质的纹理坐标后,通过`glDrawArrays`结合顶点和纹理坐标逐个贴图。最终示例展示了将世界地图贴到球体上形成逼真的地球仪效果。通过控制旋转、平移和缩放,能实现简单的三维动画效果。
77 2
Android开发之通过渲染纹理展示地球仪
|
7月前
|
存储 前端开发 JavaScript
【亮剑】在React中,处理`onScroll`事件可实现复杂功能如无限滚动和视差效果
【4月更文挑战第30天】在React中,处理`onScroll`事件可实现复杂功能如无限滚动和视差效果。类组件和函数组件都能使用`onScroll`,通过`componentDidMount`和`componentWillUnmount`或`useEffect`添加和移除事件监听器。性能优化需注意节流、防抖、虚拟滚动、避免同步计算和及时移除监听器。实战案例展示了如何用Intersection Observer和`onScroll`实现无限滚动列表,当最后一项进入视口时加载更多内容。合理利用滚动事件能提升用户体验,同时要注意性能优化。
469 0
|
缓存 JavaScript 前端开发
前端百题斩【031】——从渲染流程认识重绘和回流
前端百题斩【031】——从渲染流程认识重绘和回流
前端百题斩【031】——从渲染流程认识重绘和回流
|
vr&ar 图形学
【Unity3D 灵巧小知识点】☀️ | Unity UGUI组件Scroll View禁止 左右 或 上下 滑动
Unity 小科普 老规矩,先介绍一下 Unity 的科普小知识: Unity是 实时3D互动内容创作和运营平台 。 包括游戏开发、美术、建筑、汽车设计、影视在内的所有创作者,借助 Unity 将创意变成现实。 Unity 平台提供一整套完善的软件解决方案,可用于创作、运营和变现任何实时互动的2D和3D内容,支持平台包括手机、平板电脑、PC、游戏主机、增强现实和虚拟现实设备。 也可以简单把 Unity 理解为一个游戏引擎,可以用来专业制作游戏!
【Unity3D 灵巧小知识点】☀️ | Unity UGUI组件Scroll View禁止 左右 或 上下 滑动
|
JavaScript
如何用原生js写一个懒加载页面带渐变效果
懒加载经常是我们性能优化经常使用的方案,那么我们今天就实现一波。
|
JavaScript HTML5 移动开发
带你读《Three. js开发指南: 基于WebGL和HTML5在网页上渲染 3D图形和动画(原书第3版)》之三:学习使用Three.js中的光源
本书将介绍如何直在浏览器中创建漂亮的3D场景和动画,并且充分发挥WebGL和现代浏览器的潜能。首先介绍基本概念和基础组件,然后通过逐渐扩展示例代码逐步深讲解更多高级技术。在本书中读者将学到如何从外部加载3D模型和具有真实效果的材质纹理、学习使用Three.js提供的摄像机组件来实现在3D场景中飞行和走动、如何将HTML5视频和画布作为材质贴在3D模型表面。此外还将学习变形动画和骨骼动画,甚至还会涉及在场景中使用物理模拟的方法,例如重力、碰撞检测等等。
|
定位技术
ArcEngine 样式对象StyleGallery的使用详解
        ArcMap里面存在很多预定义的样式对象,比如颜色、图例和各种符号等。用户也可以新建自己的样式对象,来满足实际开发的特殊需要。在进行arcgis engine 二次开发的过程中,用户可直接使用这些样式对象,以丰富制图内容,简化制图过程。
1906 0
|
Web App开发 C# Windows
WPF图片浏览器(显示大图、小图等)
原文:WPF图片浏览器(显示大图、小图等) 版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/wangshubo1989/article/details/46784601 1.概述                最近利用WPF做了一个图片浏览器,能够将文件夹中的所有图片以小图的形式显示,并将选中的图片以512*512大小显示。
2647 0
|
前端开发 C# 算法
WPF路径动画(动态逆向动画)
原文:WPF路径动画(动态逆向动画) WPF 中的Path.Data 不再多介绍,M开始坐标点 C弧度坐标点 L 直线坐标点   个人写了关于Path.Data数据反向,意思就是把Path的数据逆转,但是图形是没有变化的 Xaml代码如下: ...
1989 0