ArcGIS Engine要素渲染和专题图制作(转)

摘要:Feature的常用的绘制方法包括:1.简单绘制;2.唯一值绘制/多字段唯一值绘制;3.点密度/多字段点密度绘制;4.数据分级绘制;5.质量图(饼图/直方图); 6.按比例尺渲染;7.比例符号渲染。

一.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 )
二.图例的使用
    图例的使用通过ILegendInfo接口。每个Renderer都实现了该接口,但是有时候该实现不好用,所以也可以自己实现该接口。实现过程是比较简单的。
三.渲染层次
    使用ILevelRender 接口。该接口可以指定一 当前的Level(-1)表示绘制全部。然后提供一个符号数组,注意每个符号要指定Level,如果不指定就默认为0。
四.透明度控制
    透明度控制使用 ITransparencyRenderer 接口。该接口允许指定一个字段,字段取值用来表示透明度 注意 透明度的取值在0--100之间。
五.数据正规化
    数据正规化用 IDataNormalization 接口来表示。该接口提供了几种正规化表示方法。
六.部分渲染
    部分渲染通过使用IDataExclusion  来实现。该接口允许提供过滤语句来过滤掉不需要渲染的Feature。同时也可以给他们制定特殊的符号。同时控制是否显示
七.旋转控制
    旋转控制通过使用IRotationRenderer 接口来表示。该接口要求提供旋转角度的字段。同时要求提供旋转的方法。
八.数据样本
    IDataSampling  没有使用过。
九.外表关联
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);
十.统计分析
   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中就是统计后的数据了。

from: http://www.gissky.net/Article/1870.htm

时间: 2024-11-03 22:06:45

ArcGIS Engine要素渲染和专题图制作(转)的相关文章

arcgis api for flex之专题图制作(饼状图,柱状图等)

最近公司给我一个任务,就是利用arcgis api for flex实现在地图上点(业务数据)直接显示饼状图以及柱状图的专题图制作,而不是通过点击点显示气泡窗口的形式来实现,这个公司已经实现了. 经过一段时间的摸索,参照一些网上资源,目前大概弄出来了,里面还有待完善的地方的. 效果图如下: (1)Chart.mxml,主要的展示地图专题图效果的页面 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28

Arcgis engine 要素集的复制和删除

一. 要素集的删除 1.对于一般的要素类删除 可直接用IDataset.Delete()方法进行删除 2.对于无网络的要素集删除 可用IFeatureDataset.Delete()方法进行删除 3.对有网络的要素集删除时,需用IFeatureWorkspaceManage.DeleteByName(IDatasetName name)方法删除 二.要素集的复制 IGeoDBDataTansfer接口用于实现要素集的复制,注意的是从gdb将要素集复制到sde,且gdb要素集中含有网络时,用此接口

Arcgis Engine栅格数据渲染

唯一值: http://resources.esri.com/help/9.3/arcgisengine/dotnet/77da7a38-c696-407d-b73c-ddb36def6032.htm 已分类: http://resources.esri.com/help/9.3/arcgisengine/dotnet/7ffacaad-4f66-4015-9f32-e93c032cdcad.htm 拉伸: http://resources.esri.com/help/9.3/arcgiseng

ArcGIS Engine开发之旅01---产品组成、逻辑体系结构

原文 ArcGIS Engine开发之旅01---产品组成.逻辑体系结构 ArcGIS Engine 由两个产品组成: ? 面向开发人员的软件开发包(ArcGIS Engine Developer kit)? 面向最终用户的运行时(ArcGIS Engine Runtime)ArcGIS Engine 开发工具包是一个基于组件的软件开发产品,可用于构建自定义GIS 和制图应用软件.它并不是一个终端用户产品,而是软件开发人员的工具包,支持四种开发环境(C++, COM, .NET,以及Java),

ArcGIS Engine检索要素集、要素类和要素

转自原文 ArcGIS Engine检索要素集.要素类和要素 [csharp] view plain copy print? /// <summary> /// 获取所有要素集 /// </summary> /// <param name="workspace">工作空间对象</param> /// <returns>要素集列表</returns> public static List<IFeatureDat

ArcGIS Engine效率探究——要素的添加和删除、属性的读取和更新

ArcGIS Engine效率探究——要素的添加和删除.属性的读取和更新 来自:http://blog.csdn.net/freewaywalker/article/details/23703863 分类: ArcNotes2014-04-14 20:56 1781人阅读 评论(0) 收藏 举报 1. 要素的添加 ArcGIS Engine中,主要有两个方法用于要素的添加: Using IFeatureClass.CreateFeature followed by IFeature.Store

ArcGIS Engine中删除要素的几种方法总结

转自原文 ArcGIS Engine中删除要素的几种方法总结 /// <summary> /// 通过IFeature.Delete方法删除要素 /// </summary> /// <param name="pFeatureclass">要素类</param> /// <param name="strWhereClause">查询条件</param> public static void De

ArcGIS Engine开发前基础知识(2)

ArcGIS基本控件简介 ArcGIS Engine控件是一组可视化的开发组件,每个ArcGIS Engine控件都是一个COM组件.这些组件包括MapControl,PageLayoutControl,TOCControl.ToolbarControl,GlobeControl,和SceneControl等 MapControl控件 MapControl控件对应于ARCMap中的数据视图,主要用于显示.操作和分析地理数据.它封装了Map对象,可以加载已有的地图文档(*mxd文档)或者直接添加矢

ArcGIS engine中Display类库 (局部刷新)

转自原文 ArcGIS engine中Display类库 (局部刷新) Display类库包括了用于显示GIS数据的对象.除了负责实际输出图像的主要显示对象(display object)外,这个类库还包含了表示符号和颜色的对象,用于控制在显示(display)中绘制时实体的属性.这个类库也包含了用户与显示(display)交互时的可视化反馈的对象.完成这些功能的对象被归并到一组类库子系统中. 这些类库子系统是: n         Display n         Dynamic Displ