最后的圣洁

博客园 首页 新随笔 联系 订阅 管理

 

    专题图制作中有许多种专题图,而分级专题图则是众多专题图的的一种。所谓分级专题图,是指针对地图要素中得某以特定字段,根据需要划分不同的等级,然后通过符号或颜色等不同的渲染手法,将要素表达出来。和其他专题制作一样,分级专题图只需要设置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就看可可以了。否则会出现越界错误。

posted on 2012-11-20 10:27  最后的圣洁  阅读(666)  评论(0编辑  收藏  举报