AE開發

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()

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章