原文发布时间:2010-04-26
作者:毛毛虫
在继续上一篇RasterExpressionEvaluator之前,由于RasterExpressionEvaluator转换器矢量化栅格数据的需要,先说明几个转换器。
1、RasterRGBCreator
这个转换器比较简单,RasterRGBCreator使用指定的参数创建一个栅格要素,并输出这个要素到工作空间进行处理。
RasterRGBCreator转换器的设置如下图:
'Number of Rows' 和'Number of Columns' 参数指定了生成栅格数据的行列数。
'Band Color Model'指定了每个单元格的数据类型。
'X Cell Origin' 和 'Y Cell Origin'指定了每个单元格的原点。用来确定单元格的原点是中心点还是左下角的点。
'X Spacing' 和 'Y Spacing'指定了单元格间的间隔。这个参数必须大于0。
'X Upper Left cordinate' 和 'Y Upper Left Coordinate'指定了作为整个单元格原点的右上角的值。
'Min. Color Value' 和 'Max. Color Value'指定了每个单元格可获取的颜色的范围。
'Nodata Color Value'指定了这个栅格的'nodata'值。
'Min. Alpha Value' 和 'Max. Alpha Value'指定了每个单元格能够设置的值的alpha通道的值。
'Nodata Alpha Value'指定了alpha波段的'nodata'值。
'Raster Type'指定了创建的栅格类型。Single Value指栅格中的每个单元格的值被设置为栅格数据的最大值。Checkered Pattern意味着栅格中的单元格是交互单元格,在最大和最小值之间设置单元格。栅格中的每个单元格会赋予一个最大到最小值之间的随机值。Checkerboard意味着在栅格中数据的交互块被设置为栅格的最大值和最小值,使用标准的8×8棋盘模式。这些数据块的大小根据指定的行列书获取。如果行列书不是8的倍数,剩下的数据会被设置为nodata值或最小值。
分别选择不同的'Raster Type',当为Single Value时生成的栅格如图:
选择Checkered Pattern时如图:
选择Checkerboard时如图:
2、RasterCellValueReplacer
这个转换器的作用是用一个新的单一的值取代源栅格的一个范围值。转换器的参数设置如下:
参数:Replace Values >=, Replace Values <=
Replace Values >= 指定范围内的最小值,所有大于或等于这个指定值的值会被替换值替代。
Replace Values <= 指定范围内的最大值,所有小于或等于这个指定值的值会被替代值替换。如果两个参数都被指定,两个条件都要满足。如果>= value时小于 <= value的值,那么指定范围内的值都会被替代。例如,>=100或<=200被-999替代。或者,如果>= value时大于 <= value的值,那么定义了两个不同的范围或提供的范围外的任何值,例如,>= 200 和 <= 100表示用 -999替代所有>= 200和<= 100范围内的值,只保留值101-199不变。
如做替代一个值,则给参数Replace Values >=, Replace Values <=设置相同的值。>= 101和<= 99则表示用0替代除值100意外的所有值。
New Value:将会替代指定范围的新值。
Replace Nodata:表示是否nodata值被替代。如果设置为Yes,nodata值就像其他值一样会被替代。如果设置为No,那么nodata值不会被替代,即使这个值是在指定的替代范围内。
原图:
通过下列设置:
转换后:
设置如下:
转换后:
3、RasterExtentsCoercer
RasterExtentsCoercer使用矢量多边形代输入的栅格。
转换器设置如下:
可以看到,这个转换器有三种Extents Type:Raster Extents、Data MBR Extents和Data Extents。
通过三个不同设置所得的图来说明RasterExtentsCoercers的三种模式的不同。
转换前的源数据:
Raster Extents: 这个多边形包含了栅格要素的整个扩展范围,如果栅格发生了旋转,则这个旋转角度应用于该多边形。使用该设置转换后的结果:
Data MBR Extents 模式,这个模式生成一个平行于坐标轴的最小约束举行,使用该设置转换后的结果:
Data Extents模式,输出的几何是只覆盖有数据栅格的一个多边形或多边形的聚合,使用该设置后的结果:
放大这个Data Extents设置的图,会发现边界是锯齿状的。
这个转换器把所有有数据的栅格单元和由栅格旋转而产生的nodata单元格隔离开。
下面是使用该设置,应用nodata值分离数据的例子。
示例:这个例子是动态的更改DEM图nodata值,生成矢量表示的影像的不同的值(和区域)。源DEM数据如下图:
利用转换器RasterBandMinMaxExtractor提取出栅格数据的最大最小单元格值后,再用转换器RasterExpressionEvaluator,设置波段表达式floor(A[0]/20 +1)*20(把高程值设置为20的倍数)。设置如下:
结果为:
用AttributeCreator创建一个nodata属性(在后面使用),赋初值为0。使用再使用RasterCellValueReplacer转换器设置,去除-32767值。设置如下:
转换得到的图示为:
做一个循环更改nodata值从0到最值的转换的自定义转换器,每次循环的间隔为20m,得到一系列根据nodata值生成的矢量轮廓。该自定义转换器设置如下:
使用Tester和ExpressionEvaluator组成一个循环。
参数的设置如下:
通过这个自定义转换器转换后得到的数据如下图:
使用Deaggregator、Dissolver和DonutBuilder三个转换器来清除内部的小多边形。
其中注意下转换器Dissolver的设置,根据nodata来分组:
最后可以利用转换器ExpressionEvaluator根据nodata值计算(生成例如@Value(_nodata)/320.0,320 <mailto:例如@Value(_nodata)/320.0,320>是高程的最大值),根据计算的结果使用PenColorSetter、AttributeCopier等转换器对不同的高程值得到的矢量多边形赋予不同的颜色(设置fme_fill_color属性值),结果如下: