摘要: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. cppcheck 下载与安装(Liunx)

    下载网址:https://sourceforge.net/projects/cppcheck/files/cppcheck/ 选择安装包:cppcheck-1.75.tar.gz 解压安装包:tar ...

  2. Winform TreeList递归绑定树节点

    /// <summary> /// 绑定树目录 /// </summary> /// <param name="parentId">父ID< ...

  3. CsvReader,CsvWriter的使用以及解决中文乱码

    public void Csv(){ try { String[] stringList; String sourceFilePath = "D:\\111\\前海自身.csv"; ...

  4. CPU指令系统

    CPU就是通过指令系统来操控寄存器然后实现读取数据的,所以我们必须介绍一下CPU的指令系统 如果我们知道指令的英文全称,这对我们理解指令的作用有很大帮助,所以贴出指令英文全称 接下来就是介绍一些主要的 ...

  5. [windows操作系统]windows管理

    1.磁盘管理: 1.1.使用DISKPART命令行工具创建扩展分区: windows自带有一个disk management(磁盘管理)工具,但在其中却找不到如何创建扩展分区(一般MBR分区格式需要扩 ...

  6. ubuntu 编译oce Open CASCADE

    前期准备 1 安装cmake 最新版本 sudo apt-get install cmake 2 安装OpenGl Library 和OpenGL Utilities sudo apt-get ins ...

  7. No mapping found for HTTP request with URI

    原因:spring-mvc 的xml配置文件的包名配置错误 <mvc:annotation-driven /> <context:component-scan base-packag ...

  8. 关于HTTP的几种

    301.404.200.304等HTTP状态,代表什么意思? 如果某项请求发送到您的服务器要求显示您网站上的某个网页(例如,用户通过浏览器访问您的网页或 Googlebot 抓取网页时),服务器将会返 ...

  9. HttpURLConnection发送和接受返回值

    URL url = new URL(sb.toString());//请求的地址 HttpURLConnection connection = (HttpURLConnection) url.open ...

  10. CSS中相对定位与绝对定位

    看了几个讲解定位的博客,觉得还不错,分享之: 博客一:http://blog.sina.com.cn/s/blog_4bcf4a5e010008o0.html 文章中,主要需要参考的有两点: 1,相对 ...