arcgis engine 10.2打开CAD文件,产生点图层,线图层。不能用IUniqueValueRenderer唯一值渲染点图层,为什么?

UniqueValueRenderer
您的浏览器已禁用 JavaScript。
类 UniqueValueRenderer
java.lang.Object
cn.creable.gridgis.display.UniqueValueRenderer
所有已实现的接口:
public class UniqueValueRenderer
implements
惟一值渲染器。
UniqueValueRenderer使用一个hashtable来将惟一值与symbol对应起来,根据指定的惟一值来渲染地图要素。
以下代码演示如何创建一个UniqueValueRenderer,并将之应用到要素图层上
ILayer layer=mapView.getMapControl().getMap().getLayer("县界_region");
if (layer!=null && layer instanceof IShapefileLayer)
UniqueValueRenderer uvr=new UniqueValueRenderer(new FillSymbol(0xFFFF0000,null),(IShapefileLayer)layer);
uvr.setFieldIndex(1);
uvr.setSymbol("110102", new FillSymbol(0xFFFF0000,null));
uvr.setSymbol("110101", new FillSymbol(0xFF00FF00,null));
uvr.setSymbol("110229", new FillSymbol(0xFF0000FF,null));
uvr.setSymbol("110228", new FillSymbol(0xFFFFFF00,null));
uvr.setSymbol("110117", new FillSymbol(0xFF00FFFF,null));
uvr.setSymbol("110115", new FillSymbol(0xFFFF00FF,null));
((IFeatureLayer)layer).setRenderer(uvr);
mapView.getMapControl().refresh();
以上代码首先获取名为“县界_region”的图层引用,并判断这个图层是不是要素图层,如果是要素图层,则创建一个UniqueValueRenderer,并调用setFieldIndex设置序号为1的字段(也就是第二个字段)为惟一值来源字段,并多次调用setSymbol设置惟一值与符号的对应关系,之后调用要素图层的setRenderer设置渲染器。最后调用地图控件的refresh立即刷新地图,就能看到渲染器被替换的效果。
以下代码演示如何利用UniqueValueRenderer里实现隐藏特定要素的攻略
ILayer layer=mapView.getMapControl().getMap().getLayer("管点");
UniqueValueRenderer ur=(UniqueValueRenderer) ((IFeatureLayer)layer).getRenderer();
String[] keys=ur.getKeys();
MyRenderer mr=new MyRenderer(ur.getSymbolByFeature(null),(IShapefileLayer) layer);
mr.setFieldIndex(ur.getFieldIndex());
for (int i=0;i&keys.++i)
mr.setSymbol(keys[i], ur.getSymbol(keys[i]));
((IFeatureLayer)layer).setRenderer(mr);
mr.fieldIndex=5;//GXXL字段序号
mr.key="给水";//关键字
mapView.getMapControl().refresh();
以上代码假定”管点“图层已经配置了惟一值样式,将这个惟一值样式对象的内容复制到一个自定义的renderer里,并将需要隐藏要素的匹配条件传入renderer
以下是这个renderer的实现部分
public class MyRenderer extends UniqueValueRenderer {
public int fieldI
private IShapefileL
public MyRenderer(ISymbol arg0, IShapefileLayer layer) {
super(arg0, layer);
this.layer=
public ISymbol getSymbolByFeature(IFeature ft) {
String[] values=ft.getValues();
if (values==null)
layer.loadFeatureAttribute(ft);
values=ft.getValues();
if (!ft.getValue(fieldIndex).equalsIgnoreCase(key))
return super.getSymbolByFeature(ft);
在getSymbolByFeature里判断是否符合条件,符合条件则返回null,那么这个对象就会不显示出来
构造器概要
构造器和说明
(&baseSymbol,
限定符和类型
方法和说明
java.lang.String
获取渲染器描述
java.lang.String[]
java.lang.String
获取渲染器标识
(int&index)
根据关键字获取符号
(java.lang.String&key)&
(&feature)
根据要素引用获取符号样式
获取符号个数
(java.lang.String&description)
设置渲染器描述
(int&fieldIndex)
设置地图符号种类的来源字段序号,从0开始
(java.lang.String&label)
设置渲染器标识
(int&index,
(java.lang.String&keyword,
从类继承的方法&cn.creable.gridgis.display.
从类继承的方法&java.lang.Object
equals, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
构造器详细资料
UniqueValueRenderer
public&UniqueValueRenderer(&baseSymbol,
参数:baseSymbol - 默认样式,如果在绘制过程中找不到对应的惟一值,就会采用这个默认样式来绘制要素layer - 图层引用
方法详细资料
getDescription
public&java.lang.String&getDescription()
从接口复制的说明:&
获取渲染器描述
&在接口中&
getFieldIndex
public&int&getFieldIndex()
public&java.lang.String[]&getKeys()
public&java.lang.String&getLabel()
从接口复制的说明:&
获取渲染器标识
&在接口中&
public&&getSymbol(int&index)
从接口复制的说明:&
根据关键字获取符号
&在接口中&
参数:index - 关键字
public&&getSymbol(java.lang.String&key)
getSymbolByFeature
public&&getSymbolByFeature(&feature)
从接口复制的说明:&
根据要素引用获取符号样式
&在接口中&
参数:feature - 要素引用
返回:符号样式
getSymbolCount
public&int&getSymbolCount()
从接口复制的说明:&
获取符号个数
&在接口中&
setDescription
public&void&setDescription(java.lang.String&description)
从接口复制的说明:&
设置渲染器描述
&在接口中&
参数:description - 描述
setFieldIndex
public&void&setFieldIndex(int&fieldIndex)
从接口复制的说明:&
设置地图符号种类的来源字段序号,从0开始
&在接口中&
public&void&setLabel(java.lang.String&label)
从接口复制的说明:&
设置渲染器标识
&在接口中&
参数:label - 标识
public&void&setLayer(&layer)
public&void&setSymbol(int&index,
从接口复制的说明:&
&在接口中&
参数:index - 关键字symbol - 符号
public&void&setSymbol(java.lang.String&keyword,
从接口复制的说明:&
&在接口中&
参数:keyword - 关键字symbol - 符号计费方式:
搜索引擎:
建筑及装修
化工及材料
广告及包装
旅游及票务
交易总额:?-
本月佣金:?-元
今日佣金:?-元
优化师数:-名
商户数:-名
网站数:-个
关键词数:-个
您的位置:
& arcgis engine制作饼图得时候,为什么没把图例创建出来
arcgis engine制作饼图得时候,为什么没把图例创建出来
提问者:锟哥&&|&&
分类:其他&&|&&
浏览16次&&|&&
悬赏分:3积分
摘要: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 IGeoFeatureL //构造SimpleRenderer ISimpleRenderer renderer=new SimpleRendererClass(); renderer.description="简单的渲染一下"; renderer.Label="符号的标签"; //假设sym是一个和该图层中Geometry类型对应的符号; renderer.Symbol= //为图层设置渲染,注意需要刷新该图层。 geoLayer.Renderer= 2.独立值/多字段独立值渲染 独立值/多字段独立值渲染,根据Feature的某一个字段的数据或某几个字段的组合结果来确定符号。具有相同值或相同组合值的Feature,使用一样的符号。在使用多个字段的使用,每个字段的取值之间使用分割符来连接。字段的取值顺序和在Renderer中设置的一样。基本使用方式如下: //假设layer是一个IFeatureLayer,获取IGeoFeatureLayer IGeoFeatureLayer geoLayer=layer as IGeoFeatureL //构造一个UniqueValueRenderer IUniqueValueRenderer renderer=new UniqueValueRendererClass(); //假设使用两个字段来渲染 renderer.FieldCount=2; //假设YSLX字段表示要素类型 //假设YSYT字段表示要数用途 renderer.set_Field(0,"YSLX"); renderer.set_Field(1,"YSYT"); //字段之间使用 | 来连接(默认取值) renderer.FieldDelimiter="|"; //设置默认符号 renderer.DefaultSymbol=defaultS 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) flds.AddField("MJ ","面积"); flds.AddField("RK","人口"); IDotDensityFillSymbol ddSym=new DotDensityFillSymbolClass(); ISymbolArray symArray=(ISymbolArray)ddS symArray.AddSymbol(mjSymbol); symArray.AddSymbol(rkSymbol); ddSym.Outline =(ILineSymbol)outlineS ddSym.DotSize =10 ; ddSym.FixedPlacement= renderer.DotDensitySymbol =ddS renderer.DotValue=20 ; renderer.MaintainSize=this.m_dotdensityParam .MaintainS IGeoFeatureLayer geoLayer=(IGeoFeatureLayer) geoLayer.Renderer =(IFeatureRenderer) 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).DisplayT//图层 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 IDisplayRelationshipC dispRelClass.DisplayRelationshipClass(relClass,esriJoinType.esriLeftInnerJoin); 十.统计分析 ITableHistogram tableHistogram=new BasicTableHistogramClass (); tableHistogram.Table =((IDisplayTable)layer).DisplayT tableHistogram.Field =fieldN object valueArray=null, freq= IBasicHistogram basicHistogram=(IBasicHistogram)tableH basicHistogram.GetHistogram(out valueArray,out freq); IClassify classify= int breakNum=6; //分类方法 switch(ClassifyMethod ) { case ClassifyMethodName.lsClassifyMethodEqualInterval: { EqualIntervalClass eq=new EqualIntervalClass (); eq.Classify (valueArray,freq,ref breakNum); classify=(IClassify) } case ClassifyMethodName.lsClassifyMethodStandardDeviation: { StandardDeviationClass sd=new StandardDeviationClass (); IStatisticsResults stat= histogram as IStatisticsR classify=sd as IC classify.SetHistogramData (valueArray,freq); IDeviationInterval di=sd as IDeviationI di.DeviationInterval=1; di.Mean=stat.M di.StandardDev=stat.StandardD classify.Classify (ref breakNum); } case ClassifyMethodName.lsClassifyMethodQuantile: { Quantile qc=new QuantileClass (); qc.Classify (valueArray,freq,ref breakNum); classify=qc as IC } case ClassifyMethodName.lsClassifyMethodNaturalBreaks: { NaturalBreaksClass nb=new NaturalBreaksClass (); nb.Classify (valueArray,freq,ref breakNum); classify=nb as IC } case ClassifyMethodName.lsClassifyMethodDefinedInterval: { DefinedIntervalClass di=new DefinedIntervalClass (); di.IntervalRange =this.m_classBreaksParam .I di.Classify (valueArray,freq,ref breakNum); classify=di as IC } default: { EqualIntervalClass eq=new EqualIntervalClass (); eq.Classify (valueArray,freq,ref breakNum); classify=(IClassify) } } object o=classify.ClassB System.Array breakArray= o as System.A 现在breakArray中就是统计后的数据了。 本篇文章来源于 GIS空间站 转载请以链接形式注明出处 网址:http://www.gissky.net/Article/1870.htm
服务热线:400-
投诉电话:7
地址:浙江省杭州市西湖区文三路90号东部软件园科技广场315-318室
官方手机版
官方公众号
copyright 2016(c)yuntask.com版权所有 杭州志卓科技股份有限公司 浙ICP备号-86记录学习的点点滴滴。
转自:http://blog.sina.com.cn/s/blog_010qoz.html
使用ServerStyle
如果熟悉ArcGIS Desktop的使用,就会对Style符号库文件有所了解,相对应的在ArcGIS Engine开发中对应的是ServerStyle符号库,它的结构体系如下图所示。可以通过专门的转换程序把ArcGIS Desktop Style符号库转换为ArcGIS Engine所能够使用的ServerStyle符号库。用于获取ServerStyle符号库中的符号主要涉及到以下接口如表所示:
接口名称功能描述IStyleGallery用于管理Style GalleryIStyleGalleryStorage管理Style Gallery中的符号库文件IStyleGalleryClass控制符号库中Style Gallery ClassIEnumStyleGalleryItem枚举一组Style Gallery itemsIStyleGalleryItem定义Style Galle ry itme
4.5.1获取符号库中符号
如何获取到一个符号库中符号?接下来以获取ESRI符号库中名称为Rose的符号的流程:
1.首先构建一个ServerStyleGallery对象2.其次使用IStyleGalleryStorage接口的AddFile方法加载ServerStyle文件3.遍历ServerGallery中的Class,如果是FillSymbol使用IStyleGallery的GetItems方法返回一个可枚举的包含一系列StyleGalleryItem的EnumStyleGalleryItem对象。4.遍历EnumServerStyleGalleryItme枚举对象中的StylegalleryItme如果名称是Rose即可获取ESRI符号库中名称为Rose的StylegalleryItme,然后通过IStyleGalleryItem的Item属性即可转换为ISymbol。
整个流程图如下图所示:
SymbologyControl控件
SymbologyControl用来显示ServerStyle符号库中的符号样式,可以选择在该控件上选择一个符号用来符号化一个图层或者作为一个Element的符号。使用SymbologyControl可以再设计的模式下在其属性页中加载ServerStyle符号库文件,同样也可以使用的LoadStyleFile和RemoveFile方法加载和移除Serverstyle符号库文件。运行效果如下图所示:
符号化之Renderer( 渲染)体系
ArcGIS Engine9.3对GIS数据的符号化分为矢量数据渲染和栅格数据渲染两大类。接下来分别介绍FeatureRender和RasterRender。
1. FeatureRender对象
FeatureRenderer是一个抽象类,它有15个子类负责进行不同类型的着色运算。它们都实现了IFeatureRenderer接口,这个接口定义了进行要素图层符号化的公共属性和方法。
可以通过IGeoFeatureLayer::Renderer属性获得一个要素图层的符号化对象
要素符号化类型描述SimpleRender简单符号化UniqueValueRender唯一值符号化BiUniqueValueRender双变量唯一值符号化ChartRender图表符号化ClassBreaksRenderer分类等级符号化DotDensityRenderer点密度符号化ProportionalSymbolRenderer根据属性值设置符号大小进行符号化ScaleDependentRenderer依比例尺符号化RepresentationRenderer制图表达符号化CoTrackSymbologyRenderer(TrackingAnalyst)轨迹符号化(应用于TrackingAnaylyst扩展模块)EnhancedInfoRenderder(TrackingAnalyst)增强信息符号化(应用于TrackingAnaylyst扩展模块)UniqueValueTextRenderer(TrackingAnalyst)唯一值文本符号化(应用于TrackingAnaylyst扩展模块)NAStopRenderer(NetworkAnalyst)停止符号化(应用于网络分析扩展模块)FeatureVertexRenderer(SurveyExt)要素定点符号化(应用于测量分析扩展模块)SharedEdgeRenderer(EditorExt)用于绘制拓扑元素常用的要素符号化类型主要有以下6种类型,如下图所示:
2. RasterRender对象
RasterRender是一个抽象类,它有15个子类负责进行不同类型的着色运算。它们都实现了IRasterRender接口,这个接口定义了栅格图层符号化的公共属性和方法。可以通过IRasterLayer::Renderer属性获得一个栅格图层的符号化对象。
要素符号化类型描述RasterRGBRenderer栅格RGB符号化RasterUniqueValueRenderer唯一值符号化RasterColormapRenderer双变量唯一值符号化RasterClassifyColorRampRenderer图表符号化RasterStretchColorRampRenderer分类等级符号化RasterDiscreteColorRenderer点密度 符号化栅格符号化类型结构图如下图所示:
以下代码片段是对一个RasterLayer进行RasterStretchColorRampRenderer符号化操作:
///&summary&
/// StretchColorRamp符号化RasterLayer
///&/summary&
///&param name="pRasterLayer"&RasterLayer&/param&
public void SetStretchColorRampRenderer(IRasterLayer pRasterLayer){
//创建RasterStretchColorRampRendererClass对象
IRasterStretchColorRampRenderer pRStretchRender= new RasterStretchColorRampRendererClass();
//QI到IRasterRenderer
IRasterRenderer pRasterRender=pRStretchRender as IRasterRpRasterRender.Raster = pRasterLayer as IR
pRasterRender.Update();
//创建两个起始颜色
IRgbColor pFromRgbColor = new RgbColorClass();pFromRgbColor.Red = 255;
IRgbColor pToRgbColor = new RgbColorClass();pToRgbColor.Blue = 255;
//创建起止颜色带
IAlgorithmicColorRamp pAlgorithmicColorRamp = new AlgorithmicColorRampClass();pAlgorithmicColorRamp.Size = 255;pAlgorithmicColorRamp.FromColor = pFromRgbColor as ICpAlgorithmicColorRamp.ToColor = pToRgbColor as IC
bool btrue=pAlgorithmicColorRamp.CreateRamp(out btrue);
//选择拉伸颜色带符号化的波段pRStretchRender.BandIndex = 0;
//设置拉伸颜色带符号化所采用的颜色带pRStretchRender.ColorRamp = pAlgorithmicColorRamp as IColorRpRasterRender.Update();
//符号化RasterLayerpRasterLayer.Renderer = pRasterR
catch(Exception Err){
MessageBox.Show(Err.Message,"提示",MessageBoxButtons.OK,MessageBoxIcon.Information);}
阅读(...) 评论() &他的最新文章
他的热门文章
您举报文章:
举报原因:
原文地址:
原因补充:
(最多只允许输入30个字)}

我要回帖

更多关于 arcgis engine 10.2 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信