FME中的栅格数据操作之十四——使用FME自动生成Google Chart及随机彩色化图表(二)

原文发布时间:2010-06-17

作者:毛毛虫

    在上一篇中大体对WebCharter函数的使用做了下介绍,这一部分是一些注意事项及部分解决方法。

使用WebCharter函数时有一个问题,就是不能像在Excel中那样,对每一条生成它们自己的颜色。Google Chart API允许对每条设置各自的颜色,但是FME没有通过这个函数的端口公开这一部分(Google Chart API允许对每条设置各自的颜色)。

我们可以使用FME技术用另一种方法来对每条设置不同的颜色,即使用RasterExtentsCoercer和Deaggregator函数把图表中的每一条分布转换为多边形,使用函数RandomColorSetter对每一个多边形随机赋予不同的颜色。 

    (图片已丢失

    注意函数RasterExtentsCoercer中Extents Type的三个选项中需要选择Data Extents(这个函数在前面文章中有详细说明,在此不再重复)。

    FME中的栅格数据操作之十四——使用FME自动生成Google Chart及随机彩色化图表(二)

具体过程如下:

从ImageFetcher函数的输出端口输出的数据如下:

    (图片已丢失

为了能提取出每个条,需要把这些条从栅格数据中区分出来,通过观察发现,除了条的颜色,标题(图中为region)和横竖坐标轴及坐标轴上的标注中各个像素的R、G、B值相同,背景颜色是白色,即RGB为(255,255,255)。

可以使用函数RasterExpressionEvaluator,表达式设置如下:

if(A[0]==A[1]&&A[0]==A[2],0,100);if(A[0]==A[1]&&A[0]==A[2],0,100);if(A[0]==A[1]&&A[0]==A[2],0,100)。

这样除了每条的颜色为(100,100,100)外,其余的颜色为(0,0,0)。

FME中的栅格数据操作之十四——使用FME自动生成Google Chart及随机彩色化图表(二)

然后使用RasterBandNodataSetter设置0为Nodata值,即可以得到下面的效果:

FME中的栅格数据操作之十四——使用FME自动生成Google Chart及随机彩色化图表(二)

然后使用上面提到的两个函数:RasterExtentsCoercer和Deaggregator,把每一条转换为一个多边形:

  (图片已丢失

使用RandomColorSetter函数对每个多边形随机赋予不同的颜色:

FME中的栅格数据操作之十四——使用FME自动生成Google Chart及随机彩色化图表(二)

然后使用VectorOnRasterOverlayer函数把这个矢量图层和前面从ImageFetcher中输出的栅格数据进行叠加:

  (图片已丢失

还需要注意的问题是该函数不支持中文,也就是对标题或标注赋值为中文时,显示不出来。

如我把WebCharter的设置修改如下: 

  (图片已丢失

也就是Chart Title和Data Label都修改为了中文(xzq{}.XZQHMC值如下图)。

  (图片已丢失

此时生成的图标如下:

FME中的栅格数据操作之十四——使用FME自动生成Google Chart及随机彩色化图表(二)

没有把标题和下面的中文标注显示出来。