原文发布时间:2010-05-01

作者:毛毛虫

前面有很多操作是将栅格数据转换为矢量数据的,矢量数据栅格化也是常用的操作,之前在提到栅格处理常用的转换器时,提到过转换器ImageRasterizer,用这个转换器可以把矢量数据转换为栅格数据。

现在通过一个具体例子来说明一下这个处理过程。

现在有个DWG数据,想要进行的处理就是把含有多个层的DWG转换为一个栅格数据,有两种方法:一种是使用一个ImageRasterizer转换器把所有图层一次栅格化为一张栅格影像;也可以对每一个图层使用一个ImageRasterizer转换器进行栅格化,然后用RasterMosaicker转换器融合所有图层的栅格数据形成一幅影像。栅格化时,需要注意点图层的叠加次序,可以用Sorter转换器来设置。

DWG数据如下图所示,共含有五个图层:contours、 elevation points、streams、lakes和tile boundary。

FME中的栅格数据操作之十二——矢量数据栅格化

 我们直接对该数据进行栅格化后如图:

FME中的栅格数据操作之十二——矢量数据栅格化

部分放大后如图:

FME中的栅格数据操作之十二——矢量数据栅格化

下面是对上述DWG数据的各个图层进行了预处理之后栅格化的效果:

FME中的栅格数据操作之十二——矢量数据栅格化

从两幅图的对比中我们可以看到,第二个图视图效果更好些,比如对湖泊的边界做了区分,标志了高程点(图中显示537处,属于elevation points层),而第一幅图中该点信息没有显示出来。因此,为了得到较好的视图效果的栅格数据,可以在进行栅格化之前,先设置每个图层的颜色等相关的处理。

对于第一个图层contours,如下图所示:

FME中的栅格数据操作之十二——矢量数据栅格化

通过转换器CoordinateExtractor对该图层输出,通过Z值属性知道,该等高线的间距是10,我们可以通过转换器ExpressionEvaluator、Tester和PenColorSetter转换器设置下等高线的颜色,比如,每个50m(此时ExpressionEvaluator转换器的标的是设置为fmod(@Value(_elevation),50)?1:0)等高线的颜色不同于其它等高线的颜色,来得到更好的视图。

FME中的栅格数据操作之十二——矢量数据栅格化

对于elevation points层:

FME中的栅格数据操作之十二——矢量数据栅格化

为了能使该信息在栅格数据中能显示出来和更好的视图效果,可以把该点转换为圆(使用转换器2DellipseReplacer),并把高程作为注记标识出来(使用转换器LabelPointReplacer把点转换为注记,转换器TextStroker把注记点转换为多边形),并用PenColorSetter转换器设置该图层的颜色。

FME中的栅格数据操作之十二——矢量数据栅格化

对其中一个点进行放大后的效果如下:

FME中的栅格数据操作之十二——矢量数据栅格化

 这样这个图层就从一个点,转换为用一个圆和用高程注记表示了。

对于lakes层,

FME中的栅格数据操作之十二——矢量数据栅格化

可以进行处理把每个图层的边界轮廓和图形内部区分出来,用不同的颜色表示,这就需要使用GeometryCoercer转换器提取出边界,使用DONUTBUILDER转换器找出需要填充的多边形,用PenColorSetter转换器对边界和内部填充部分赋不同的颜色。

FME中的栅格数据操作之十二——矢量数据栅格化

streams层,

FME中的栅格数据操作之十二——矢量数据栅格化

tile_boundary层:

FME中的栅格数据操作之十二——矢量数据栅格化

对streams层和tile_boundary层可以只用PenColorSetter设置下颜色,然后对设置好的所有图层进行栅格化即可。通过这个实例,可以了解下矢量数据栅格化的过程,根据自己的需要,调整各个矢量图层的设置,使得生成的栅格数据达到要求的视图效果。






相关文章: