摘要: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

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

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

    最近公司给我一个任务,就是利用arcgis api for flex实现在地图上点(业务数据)直接显示饼状图以及柱状图的专题图制作,而不是通过点击点显示气泡窗口的形式来实现,这个公司已经实现了. 经过 ...

  2. ArcGIS Engine专题地图渲染器的实现(入门版)

    专题地图(Thematic Map)是着重表示一种或数种自然要素特征或社会经济现象的地图 专题地图的内容由两部分构成: 1.专题内容——图上突出表示的自然或社会经济现象及其有关特征 2.地理基础——用 ...

  3. 将AE开发的专题图制作功能发布为WPS

    AE开发可以定制化实现ArcGIS的地理处理功能,并实际运用于其他方面的工作,有时候我们还希望将AE开发的功能发布为网络地理信息处理服务(WPS),从而能在Web端更自由便利地调用所需要的地学处理算法 ...

  4. 【ArcGIS教程】专题图制作-人口密度分布图——人口密度分析

    ​  本篇以湖北省为例,制作人口密度分布图:这里所使用的为湖北省的省.市.县三个级别的行政区划矢量数据,以及居民点数据,进而进行密度分析. 示例数据来源于地理遥感生态网,网站地址www.gisrs.c ...

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

    原文:ArcGIS Engine开发之旅01---产品组成.逻辑体系结构 ArcGIS Engine 由两个产品组成:  面向开发人员的软件开发包(ArcGIS Engine Developer k ...

  6. ArcGIS Engine中如何获取Map中已经选择的要素呢(转)

    ArcGIS Engine中如何获取Map中已经选择的要素呢   1.使用IEnumFeturea对象获取map中的FeatureSelection,该方法可以获取所有图层的选择要素.IMap中的Fe ...

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

    ArcGIS Engine效率探究——要素的添加和删除.属性的读取和更新 来自:http://blog.csdn.net/freewaywalker/article/details/23703863 ...

  8. C#+ArcGIS Engine 获取地图中选中的要素

    转自 C#+ArcGIS Engine 获取地图中选中的要素 C#+ArcGIS Engine 获取地图中选中的要素 提供一种简单遍历获取地图中选中要素的方法,代码如下: List<IFeatu ...

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

    转自原文 ArcGIS Engine中删除要素的几种方法总结 /// <summary> /// 通过IFeature.Delete方法删除要素 /// </summary> ...

随机推荐

  1. 二模 (15)day1

    第一题: 题目大意: 有两个长度为N的序列A和B,在A和B中各任取一个数相加可以得到N2个和,求这N2个和中最小的N个. 解题过程: 1.这题是刘汝佳<<训练指南>>上的一道经 ...

  2. SunSonic 3.0 ORM开源框架的学习

    SubSonic 3.0简介 接触到SubSonic3.0 ORM框架是看了AllEmpty大神的从零开始编写自己的C#框架(链接在此)系列的随笔接触到的,本文章学习内容源于AllEmpty大神. S ...

  3. powershell脚本闪电输入神器

    如图所示: 用autohotkey,把下列常用按键互唤.来达到快速输入目的.并且只对powershell ise,power gui,visual studio code,powershell stu ...

  4. python import其他文件夹下的模块

    模块的路径不在默认搜索路径中,需要在sys.path中添加 import syssys.path.append('需要模块的文件夹路径')

  5. transform:rotate在手机上显示有锯齿的解决方案

    transform:rotate 属于简单好用的效果,但在手机上显示时,会有比较明显锯齿. 解决方案也很简单, 利用外层容器的overflow:hidden 加上图片margin:-1px 就可以解决 ...

  6. 几款值得推荐的android(安卓)开源框架简介

    技术不再多,知道一些常用的.不错的就够了. 该文章自有需要的时候,mark一下. 顺序不代表排名,根据自己需求进行选择即可. 1.volley 项目地址 https://github.com/sman ...

  7. Objective-C学习笔记-第三天(1)

    今天开始用oc写iOS程序,遇到的问题有 1.在不同的类使用类的方法或者访问类的属性的时候(公开的方法或者属性),方法或者属性必须在类头文件中声明. 2.对象类型的声明以及定义需要用*,表明这个是一个 ...

  8. JAVA ,Map接口 ,迭代器Iterator

    1.    Map 接口概述 java.util.Map 接口描述了映射结构, Map 接口允许以键集.值集合或键 - 值映射关系集的形式查看某个映射的内容. Java 自带了各种 Map 类. 这些 ...

  9. Linq二 LinqToSql

    虽然微软已经停止更新了LinqToSql,但是目前的已完全满足目前的需求. 第一步:添加LinqToSql 第二步:将其关联的Sqlserver数据库 第三步:数据库已变成实体类 第四步:可以对数据库 ...

  10. supervisor安装配置与使用

    supervisor:C/S架构的进程控制系统,可使用户在类UNIX系统中监控.管理进程.常用于管理与某个用户或项目相关的进程. 组成部分supervisord:服务守护进程supervisorctl ...