换一种方式实现arcgis的打印图例

    使用ArcEngine开发GIS程序,如何在打印视图(PageLayout)中添加图例,最常见的方法应该是通过UniqueValueRender获取图层的图例项,然后通过ILegend2设置好图例样式后,放到PageLayout中。但是本人在使用过程中,发现有2个问题不好解决。一是ILegend2中的Item和打印视图中看到的图例项并不是一一对应的,Item只和图层对应,有3个Item就代表有3个图层的图例项,至于有几个图例项,你不能很好的获取。二是AdjustColumns方法,这个方法并不能很好的排列图例项,比如说有7个图例项,要排成2列,你使用AdjustColumns(2),结果很可能是第一列2个图例项,第二列5个图例项,为什么ArcEngine给你排成这样,我觉得很可能和图层有关系,反正是不尽如人意。

    因此,本人决定抛开ILegend2这个接口,重新编写一套打印图例类。原理也很简单,在ArcMap中用UnGroup来分解打印图例,会发现图例其实就是一些Element通过Group得到的。结合一些设计模式的知识,本人设计了如下的类图:

    ComLegend是由很多ComLegendItem组成的,ComLegendItem可以派生出具体的图例项,例如标题、点图例、网格线、边框等等。另外还设计了一个ComLayout用来对图例进行布局,主要是来解决AdjustColumns的问题。

   (下载地址:http://download.csdn.net/detail/pp9105/3860147)

   效果如下:



你可能感兴趣的:(ArcGIS,设计模式)