ArcGIS Engine要素渲染和专题图制作(转)
一.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要素渲染和专题图制作(转)的更多相关文章
- arcgis api for flex之专题图制作(饼状图,柱状图等)
最近公司给我一个任务,就是利用arcgis api for flex实现在地图上点(业务数据)直接显示饼状图以及柱状图的专题图制作,而不是通过点击点显示气泡窗口的形式来实现,这个公司已经实现了. 经过 ...
- ArcGIS Engine专题地图渲染器的实现(入门版)
专题地图(Thematic Map)是着重表示一种或数种自然要素特征或社会经济现象的地图 专题地图的内容由两部分构成: 1.专题内容——图上突出表示的自然或社会经济现象及其有关特征 2.地理基础——用 ...
- 将AE开发的专题图制作功能发布为WPS
AE开发可以定制化实现ArcGIS的地理处理功能,并实际运用于其他方面的工作,有时候我们还希望将AE开发的功能发布为网络地理信息处理服务(WPS),从而能在Web端更自由便利地调用所需要的地学处理算法 ...
- 【ArcGIS教程】专题图制作-人口密度分布图——人口密度分析
本篇以湖北省为例,制作人口密度分布图:这里所使用的为湖北省的省.市.县三个级别的行政区划矢量数据,以及居民点数据,进而进行密度分析. 示例数据来源于地理遥感生态网,网站地址www.gisrs.c ...
- ArcGIS Engine开发之旅01---产品组成、逻辑体系结构
原文:ArcGIS Engine开发之旅01---产品组成.逻辑体系结构 ArcGIS Engine 由两个产品组成: 面向开发人员的软件开发包(ArcGIS Engine Developer k ...
- ArcGIS Engine中如何获取Map中已经选择的要素呢(转)
ArcGIS Engine中如何获取Map中已经选择的要素呢 1.使用IEnumFeturea对象获取map中的FeatureSelection,该方法可以获取所有图层的选择要素.IMap中的Fe ...
- ArcGIS Engine效率探究——要素的添加和删除、属性的读取和更新
ArcGIS Engine效率探究——要素的添加和删除.属性的读取和更新 来自:http://blog.csdn.net/freewaywalker/article/details/23703863 ...
- C#+ArcGIS Engine 获取地图中选中的要素
转自 C#+ArcGIS Engine 获取地图中选中的要素 C#+ArcGIS Engine 获取地图中选中的要素 提供一种简单遍历获取地图中选中要素的方法,代码如下: List<IFeatu ...
- ArcGIS Engine中删除要素的几种方法总结
转自原文 ArcGIS Engine中删除要素的几种方法总结 /// <summary> /// 通过IFeature.Delete方法删除要素 /// </summary> ...
随机推荐
- 二模 (15)day1
第一题: 题目大意: 有两个长度为N的序列A和B,在A和B中各任取一个数相加可以得到N2个和,求这N2个和中最小的N个. 解题过程: 1.这题是刘汝佳<<训练指南>>上的一道经 ...
- SunSonic 3.0 ORM开源框架的学习
SubSonic 3.0简介 接触到SubSonic3.0 ORM框架是看了AllEmpty大神的从零开始编写自己的C#框架(链接在此)系列的随笔接触到的,本文章学习内容源于AllEmpty大神. S ...
- powershell脚本闪电输入神器
如图所示: 用autohotkey,把下列常用按键互唤.来达到快速输入目的.并且只对powershell ise,power gui,visual studio code,powershell stu ...
- python import其他文件夹下的模块
模块的路径不在默认搜索路径中,需要在sys.path中添加 import syssys.path.append('需要模块的文件夹路径')
- transform:rotate在手机上显示有锯齿的解决方案
transform:rotate 属于简单好用的效果,但在手机上显示时,会有比较明显锯齿. 解决方案也很简单, 利用外层容器的overflow:hidden 加上图片margin:-1px 就可以解决 ...
- 几款值得推荐的android(安卓)开源框架简介
技术不再多,知道一些常用的.不错的就够了. 该文章自有需要的时候,mark一下. 顺序不代表排名,根据自己需求进行选择即可. 1.volley 项目地址 https://github.com/sman ...
- Objective-C学习笔记-第三天(1)
今天开始用oc写iOS程序,遇到的问题有 1.在不同的类使用类的方法或者访问类的属性的时候(公开的方法或者属性),方法或者属性必须在类头文件中声明. 2.对象类型的声明以及定义需要用*,表明这个是一个 ...
- JAVA ,Map接口 ,迭代器Iterator
1. Map 接口概述 java.util.Map 接口描述了映射结构, Map 接口允许以键集.值集合或键 - 值映射关系集的形式查看某个映射的内容. Java 自带了各种 Map 类. 这些 ...
- Linq二 LinqToSql
虽然微软已经停止更新了LinqToSql,但是目前的已完全满足目前的需求. 第一步:添加LinqToSql 第二步:将其关联的Sqlserver数据库 第三步:数据库已变成实体类 第四步:可以对数据库 ...
- supervisor安装配置与使用
supervisor:C/S架构的进程控制系统,可使用户在类UNIX系统中监控.管理进程.常用于管理与某个用户或项目相关的进程. 组成部分supervisord:服务守护进程supervisorctl ...