原文发布时间:2010-05-06
作者:毛毛虫
对于这个题目,主要是在使用FME转换器时,针对一些用户提出的问题和我自己遇到的问题及相关解决方法,平时没有注意到的但是有用的转换器的一些说明和使用技巧。在后面我会不断补充,如有问题或者有相关的建议,欢迎大家给我留言。
1、使用Clipper转换器时,保留Clipper的属性
在用shape等矢量文件裁剪栅格数据时,有时候我们想把用来裁剪的shape文件的某个属性赋给裁剪后生成的栅格数据,实现这个要求很简单,只要把Merge Attributes参数设置为Yes即可(如图)。
2、图形放大问题
我在处理缓冲区问题时,无论如何设置,矩形生成的缓冲区域都不是直角。如图:
但是有时候我想要一个矩形,这时候可以试一下下面这两种方法:
1)转换器Bufferer和BoundingBoxReplacer结合使用
2)使用转换器Scaler,如果保持图形的中心点位置不变,设置Scale origin参数为Center Point。
3、提取波段的最大最小值转换器RasterBandMinMaxExtractor
这个转换器可以提取栅格数据中波段的最大最小值,调色板的最大最小键,调色板的最大最小值,并作为属性暴露出来。暴露的属性如下:
_band{}.min
_band{}.max
_band{}.palette{}.keyMin
_band{}.palette{}.keyMax
_band{}.palette{}.valueMin
_band{}.palette{}.valueMax
这个转换器可用于查看数据或进行计算操作。注意:这个转换器不考虑nodata值。
4、重设几何类型的转换器GeometryCoercer
这个转换器可以对要素的几何类型进行重新设置。比如,可以把一个fme_polygon(面积为25)类型的几何要素设置为fme_line(面积为0)。
5、抽样转换器Sampler
保留全部的要素或一个抽取的要素,根据抽样类型选择。剩下的输入要素被丢弃。
这个转换器典型的用于测试来减少数据量。
Sampling Amount是要保持的要素的编号,如果设置为1,则抽取所有要素,选0,丢弃所有要素。
Sampling Type是保留要素的编号还是要素的数目,比如Sampling Amount设置为10,选择Every Nth Feature表示所有的第十个要素被保留,如果选择First N Features表示只保留前十个要素。
6、字符型数据到数字型数据的转换
有的用户在处理数据时,遇到这样的问题,我有一个string类型的属性,我想把它写入integer类型的属性中,但是string类型的数据,比如有一个值为001,我想转换为整数1。
可以完成这个转换的转换器是StringFormatter。它可以格式化属性为strings, characters 或 numbers(包括十进制的floating point或integer、 八进制数、十六进制等),其语法为:
[flags][width][precision]<type>
Flag Characters:
0 这个值表示把空格用0来填充。
- 这个值表示替代默认的右边填充,在左边填充。
+ 数字化的值是有符号的。
Field Width:
这个可选域给出一个十进制数。如果这个值小于域的宽度,用空格填充。
Field Precision:
指定十进制数的小数位数。
Attribute Type:
必须要指定下面的一个类型。
d 整数
e 十进制数(科学技术法: -d.ddde+dd)
f 十进制数(浮点类型: -ddd.ddd)
o 八进制数
x 十六进制数
s 字符串
例:给出一个值12345,String Format设置与结果如下:
String Format设置 |
结果 |
08s |
00012345 |
-8s |
12345 |
e |
1.234500e+004 |
.5f |
12345.00000 |
4.4f |
12345.0000 |
x |
3039 |
0 |
30071 |
7、读取list列表中的值
有的用户问过我怎么读取list的值的问题,可以使用转换器ListIndexer。
另外在如果Tester转换器中用到list中的值做判断条件,可以把该值直接输入,如下:
在Left Value中list是无法选择的,这时候我们可以直接输入该list中的属性值。
8、自动生成ID转换器
我们在把要素写入数据库时,有时设置一个主键ID,我们可以用转换器UUIDGenerator来生成,它产生一个36bit的UUID(通用唯一标识符),表达为8个十六位数,之后用连字符连接的3组4个六位数,连字符加12个十六进制数,如:7672aac8-fa0b-464c-b0b8-3efa9ae9cd86。
转换器GOIDGenerator对每个输入要素产生一个GOID(地理对象标识符),它是一个唯一的结合要素位置等其它数字的128bit数字,组成为:32个16位进制的ASCII字串,前16位对应位置,接着的10位定义时间,下面的4位到序列号。
9、根据坐标点生成线
使用2DpointAdder转换器把坐标转换为点,然后使用PointConnector转换器可以把点,连接成线或面。如果连接成面,注意点的第一个坐标和最后一个坐标要一致。
10、坐标小数位截取
CoordinateRounder转换器,如果不需要太高的精度,可以使用该转换器进行四舍五入截取坐标后的小数到设置的精度。