專題圖製作中有許多種專題圖,而分級專題圖則是眾多專題圖的的一種。所謂分級專題圖,是指標對地圖要素中得某以特定欄位,根據需要劃分不同的等級,然後透過符號或顏色等不同的渲染手法,將要素表達出來。和其他專題製作一樣,分級專題圖只需要設定IGeoFeatureLayer介面下的Renderer屬性。而不同於簡單專題圖(SimplerRenderer),分級專題圖(ClassBreakRenderer)的關鍵在於在於如何將欄位的值根據需要分成不同的級別。
AE 中提供了IClassifyGEN這個介面,利用他提供的CLassify 的方法我們可以進行分級。該方法需要三個引數,第一個和第二個分別為一個object物件,透過除錯可知其實是一個雙精度的陣列(values,要素欄位中的每一個值)和一個整型陣列(frequencys,要素中的每一個值出現的頻率),第三個引數是一個整形數字,表示要劃分的級別的級數。該方法返回一個dynamic型別的資料。一般為一個double型別的陣列。問題就來了,我們如何的到第一個引數和第二個引數。是否可以根據需要自己獲得一個這個型別的資料。未作實驗,不得而知,但是在AE的幫助中用一個方法是利用直方圖(histogram)獲得。BasicTableTistogram透過table的得到,它的GetHistogram方法可以獲得我們所需要的valuse和frequency。在classify的方法中我們使用的都是object這個型別,即表示它可以對任何型別的資料進行操作。
最後要真正的將ClassBreaskRenderer分級,必須使用ClassBreakRenderer類的set-break方法。該方法就需要剛才我們利用classify方法得到的一個數組。透過概述組我們就可以將ClassBreakRender分成不同的級別。注意:在呼叫set-break之前我們必須設定ClassBreakRenderer要分級的欄位。最後再透過為不同級別設定不同的symbol得到專題圖。總結:我們在分級方法中利用直方圖的分級方法無非是為了得到一個可以供ClassBreakRender物件Set-Break使用的引數的而已。如果我們可以得到這樣的引數的話。我們就可以不用ICassifyGEN這個介面對資料欄位進行分級。我們在呼叫set-break和set-symbol方法的時候要特別注意不能讓i越界,比如我們要設定3個級別的話,那我們就需要得到一個長度為4個雙精度陣列。而在設定的symbol的使用我們在i=0時用一個,i=1時設定一個,I=2時設定一個即可,即長度為4,但是我們只需要遍歷到i=2就看可可以了。否則會出現越界錯誤。
專題圖製作中有許多種專題圖,而分級專題圖則是眾多專題圖的的一種。所謂分級專題圖,是指標對地圖要素中得某以特定欄位,根據需要劃分不同的等級,然後透過符號或顏色等不同的渲染手法,將要素表達出來。和其他專題製作一樣,分級專題圖只需要設定IGeoFeatureLayer介面下的Renderer屬性。而不同於簡單專題圖(SimplerRenderer),分級專題圖(ClassBreakRenderer)的關鍵在於在於如何將欄位的值根據需要分成不同的級別。
AE 中提供了IClassifyGEN這個介面,利用他提供的CLassify 的方法我們可以進行分級。該方法需要三個引數,第一個和第二個分別為一個object物件,透過除錯可知其實是一個雙精度的陣列(values,要素欄位中的每一個值)和一個整型陣列(frequencys,要素中的每一個值出現的頻率),第三個引數是一個整形數字,表示要劃分的級別的級數。該方法返回一個dynamic型別的資料。一般為一個double型別的陣列。問題就來了,我們如何的到第一個引數和第二個引數。是否可以根據需要自己獲得一個這個型別的資料。未作實驗,不得而知,但是在AE的幫助中用一個方法是利用直方圖(histogram)獲得。BasicTableTistogram透過table的得到,它的GetHistogram方法可以獲得我們所需要的valuse和frequency。在classify的方法中我們使用的都是object這個型別,即表示它可以對任何型別的資料進行操作。
最後要真正的將ClassBreaskRenderer分級,必須使用ClassBreakRenderer類的set-break方法。該方法就需要剛才我們利用classify方法得到的一個數組。透過概述組我們就可以將ClassBreakRender分成不同的級別。注意:在呼叫set-break之前我們必須設定ClassBreakRenderer要分級的欄位。最後再透過為不同級別設定不同的symbol得到專題圖。總結:我們在分級方法中利用直方圖的分級方法無非是為了得到一個可以供ClassBreakRender物件Set-Break使用的引數的而已。如果我們可以得到這樣的引數的話。我們就可以不用ICassifyGEN這個介面對資料欄位進行分級。我們在呼叫set-break和set-symbol方法的時候要特別注意不能讓i越界,比如我們要設定3個級別的話,那我們就需要得到一個長度為4個雙精度陣列。而在設定的symbol的使用我們在i=0時用一個,i=1時設定一個,I=2時設定一個即可,即長度為4,但是我們只需要遍歷到i=2就看可可以了。否則會出現越界錯誤。