AO编程第七讲   数据显示(DataDisplay); http://3y.uu456.com/bp-69fe02781711cc7931b716ec-1.html

讨论关于样式(Symbology),颜色(C; ARCGIS中关于栅格数据的显示; 与数据显示相关的ArcObject对象;Renderer对象renderer(渲染):FeatureRenderer对象:绘制一;FeatureLayerinArcMapFeat;BiUniqueRende

AO编程第七讲 数据显示 (Data Display)

 

讨论关于样式(Symbology),颜色 (Color)  ArcGIS中关于矢量数据的显示:

 

ARCGIS中关于栅格数据的显示

 

与数据显示相关的ArcObject对象

Renderer对象 renderer(渲染):显示数据值的样式的集合 AO中有两类用于renderer的抽象类:用于矢量数据 的FeatureRenderer、用于栅格数据的 RasterRenderer。

 

FeatureRenderer对象:绘制一个特征集 的特征

FeatureLayer in ArcMap FeatureRenderer

 

BiUniqueRenderer ProportionalSymbolRenderer ChartRenderer ScaleDependentRenderer ClassBreaksRenderer SimpleRenderer DotDensityRenderer

 

UniqueValueRenderer

 

 BiUniqueValueRenderer:组合了单一值和分级的渲染器,(A bivariate renderer that combines a unique values renderer with a class breaks renderer (either graduated colors or graduated symbol type symbology). ChartRenderer:图表渲染器  ClassBreaksRenderer:分级渲染器 DotDensityRenderer:点密度渲染器  PropertionalSymbolRenderer:比率符号渲染器,用不同大小 的符号,大小对应于某一字段值的比率。  ScaleDependentRenderer:比例尺渲染器,每个渲染工作在一 定的比例尺范围内。  SimpleRenderer:用同一个符号绘制所有要素特征。 UniqueValueRenderer:根据特征对象字段某一属性值来确定 绘制该特征的符号。

 

Symbol:符号或样式对象,

AO中将基于地物特征(feature)的符号分为以下三类:用于 点状地物的MarkerSymbol、用于线状地物的LineSymbol,用于面状地物的FillSymbol. TextSymbol:用于绘制注记和其他的文字3DChartSymbol:用于3D的图表

 

3D图表符号

 

Classification:分类对象

 

DefinedInterval:使用定义的,确定的值,如100或1000. ? EqualInterval:用相同Interval来产生类。如0-100,100200,200-300…. NaturalInterval:用统计方法中的自然分类对类进行划分, 效果是类间差异最大,类内差异最小。 Quantile:每个类中有相同的数目。 StandardDeviation:基于所有数据距离平均值 的标准偏 离量来分类。 TableHistogram:从表格中的数据值或频率得到 histogram数据,并传给classification对象, classificaition对象则用这些数据来计算出类的分隔值。

 

Color Ramp和Color 对象

ColorRamp:颜色的集合

 

RandomColorRamp:产生一系列的随机颜色。 AlgorithmicColorRamp:利用头和尾的颜色及定义的 代数产生一系列颜色(using two end Colors and a defined algorithm) PresetColorRamp:使用自定义的颜色系列,数目等 于13类, MultiPartColorRamp:颜色系列的集合,如你想一个 颜色系列,由红经过桔红到黄,则需要两个颜色系 列。

 

Color对象

RGB: CMYK:cyan(蓝绿色), magenta(洋红色),yellow,black   His:hue(色调),lighting(亮度), saturation(饱和度) HSV:h

ue色调、 lighting饱和度, Value数值部分 Gray:灰阶

 

IEnumColors:用于保存颜色序列的枚举对象。 使用其next方法,可获得各个颜色。

 

示例:分级专题图的制作

用到的Interface:ITable,ITableHistogram, IBasicHistogram,IClassifyGen,IClassBreaksRenderer,IAlgoritemicCol orRamp,IEnumColors,IFillSymbol,IGeoFeatureLayer,IHsvColor 用到的主要属性和方法: ITableHistogram.Field:用于设置获得数据的字段 ITableHistogram.Table:用于获取数据的表格 IBasicHistogram.GetHistogram: IBasicHistogram.GetHistogram:将数据值和频率存进变量中。 IClassifyGen.Classify:将数据值按照分类方法、数据值,频率值及分类 数目进行分类 IClassify.ClassBreaks:分类的间隔值的数组集合(intervals)。 IClassBreakRenderer.Field:用于进行分类的字段 IClassBreakRenderer.BreakCount:分类的间隔数 IClassBreakRenderer.SorClassAscending:分类按由小到大排序 IHsvColor.Hue,IHsvColor.Saturation,IHsvColor.Value:颜色,饱和度, 数值

 

IAlgorithmicColorRamp.Algorithm:用于颜色的计算方法 IAlgorithmicColorRamp.FromColor:颜色系列中的第一个颜色 IAlgorithmicColorRamp.ToColor:颜色系列中的最后一个颜色 IAlgorithmicColorRamp.Size:颜色系列的数量 IAlgorithmicColorRamp.CreateRamp:创建颜色系列 IAlgorithmicColorRamp.Colors:颜色系列的集合 ISimpleFillSymbol.Color:使用的颜色 ‘ISimpleFillSymbol.Style:使用的样式风格 IEnumColors:Next:获得该对象集合中的颜色 IClassBreaksRenderer.Symbol():该类别使用的样式 IClassBreaksRenderer.Break():该类别的间隔值 IGeoFeatureLayer.Renderer:地理特征地物层的渲染对象

 

第一步,定义featurelayer,并得到histogram数据

Dim pTableHistogram As ITableHistogram Dim pHistogram As IBasicHistogram Dim dataFrequency As Object Dim dataValues As Object Dim pMap As IMap Dim m_pGeoFeatureLayer As IGeoFeatureLayer pMap = Me.AxMapControl1.Map m_pGeoFeatureLayer = pMap.Layer(0) pTable = m_pGeoFeatureLayer pTableHistogram = New BasicTableHistogram pHistogram = pTableHistogram '从pop1990 得到数据值和频率,并输入到TableHistogram对象中 strPopField = "Pop1990" pTableHistogram.Field = strPopField pTableHistogram.Table = pTable pHistogram.GetHistogram(dataValues, dataFrequency)

 

BasicTableHistogram:实现了IBasicHistogram,ITableHistogram两接口 在arcmap中实现ITableHistogram的有两类: BasicTableHistogram(esriCarto), TableHistogram(esriCartoUI) IBasicHistogram与IHistogram区别:前者在carto库中,后者在 esriCartoUI中,

 

'第二部分,创建分级的渲染器,即class breaks renderer Dim pClassify As IClassifyGEN Dim Classes() As Double Dim ClassesCount As Long Dim numDesiredClasses As Integer numDesiredClasses = 5 pClassify = New EqualInterval pClassify.Classify(dataValues, dataFrequency, numDesiredClasses) Classes = pClassify.ClassBreaks ClassesCount = UBound(Classes)

 

Dim pClassBreaksRenderer As IClassBreaksRe

nderer pClassBreaksRenderer = New ClassBreaksRenderer pClassBreaksRenderer.Field = strPopField pClassBreaksRenderer.BreakCount = ClassesCount pClassBreaksRenderer.SortClassesAscending = True

 

' 第三步,创建颜色序列 '设置开头颜色为××× Dim pFromColor As IHsvColor pFromColor = New HsvColor pFromColor.Hue = 60 ' Yellow pFromColor.Saturation = 100 pFromColor.Value = 96 '设定最终颜色为红色 Dim pToColor As IHsvColor pToColor = New HsvColor pToColor.Hue = 0 ' Red pToColor.Saturation = 100 pToColor.Value = 96 '产生从黄到红的颜色序列 Dim pRamp As IAlgorithmicColorRamp Dim pEnumColors As IEnumColors pRamp = New AlgorithmicColorRamp pRamp.Algorithm = esriColorRampAlgorithm.esriHSVAlgorithm pRamp.FromColor = pFromColor pRamp.ToColor = pToColor pRamp.Size = ClassesCount pRamp.CreateRamp(True) pEnumColors = pRamp.Colors

 

'第四步,把颜色系列,间隔值赋给各类 Dim pColor As IColor Dim pFillSymbol As ISimpleFillSymbol Dim breakIndex As Long For breakIndex = 0 To ClassesCount - 1 ' 利用fill样式设置颜色,并把其赋给相应的各类 pColor = pEnumColors.Next pFillSymbol = New SimpleFillSymbol pFillSymbol.Color = pColor pClassBreaksRenderer.Symbol(breakIndex) = pFillSymbol pClassBreaksRenderer.Break(breakIndex) = Classes(breakIndex + 1) ' 储存各间隔值用于输出 strOutput = strOutput & "- " & Classes(breakIndex + 1) & vbNewLine Next breakIndex

 

' 第五步,将渲染器赋给图层,并刷新图层 m_pGeoFeatureLayer.Renderer = pClassBreaksRenderer Me.AxMapControl1.ActiveView.Refresh()