原文发布时间:2010-06-12
作者:毛毛虫
前面讲过很多栅格的操作,在FME群里也有人提出多添加一些实例,这里讲一个矢量数据栅格化的例子。昨天有客户需要把几个shp文件转换为tif文件,并且要求把相关的注记显示出来。我在做个例子中,遇到的最大的问题是中文的显示。在这里说一下这个例子的处理过程。
原数据有三个shp文件,分布为点线面,如图所示:
部分放大后的数据:
要想把这个数据转换为栅格文件,只要使用转换器ImageRasterizer就可以了。
当然要记住需要添加一个fme_color属性,否则后报错:
ImageRasterizer(VectorToRasterFactory): No valid input features. 2084 input feature(s) processed. 0 input feature(s) with invalid geometry discarded. 2084 input feature(s) not compatible with the raster interpretation discarded
A fatal error has occurred. Check the logfile above for details
A fatal error has occurred. Check the logfile above for details
直接使用转换器AttributeCreator即可,设置为:
我们选择点图层以后,有两种比较简单的方法可以把标注显示出来,一种是使用转换器TextAdder,这个转换器用来设置要素的几何类型为文本并显示在先前点显示的位置;另一种方法是使用转换器LabelPointReplacer,用来用一个标注点代替几何。这两种方法都能达到要求。
然后使用转换器TextStroker把标注文本转换为多边形,这里有个问题,转换为文本时输出为“?”。TextStroker的参数设置窗口为:
点击Truetype Font Name后面的省略号按钮,弹出窗口:
当我选择默认字体或选择宋体等简体中文后,使用TextStroker转换器前输出的内容为:
使用TextStroker转换器后输出的内容为:
两个图层叠加效果为:
通过测试我发现,要想正确输出中文,只有两个设置:
书写系统选择简体中文,在字体里选择Arial Unicode MS或下面设置:
在书写系统中选择繁体中文,字体中选择Arial Unicode MS,也是显示的简体中文,输出效果如下:
其他我测试过的设置输出的均为“?”。英文输出没有这个问题,能正常输出。之后字体在STROKED端口输出,比较转换前后要素属性变化,转换前如图:
属性为:
转换后如图:
属性为:
主要有两方面的变化,fme_geometry由fme_point转换为fme_aggregate,fme_type由fme_text转换为fme_area,此时进行栅格化后可以获得文本显示,如果没有使用转换器TextStroker,输出的栅格该要素图层都是显示为点而不是文字,即使在Viewer转换为栅格前为文本显示。
还需要主要的另一个问题是,如果把所有的图层一起栅格化为一个栅格图,可能点、线很不清晰,为此我们可以把线、点图层的单元格间隔调整的小一些,显示的清晰一些,为了更清楚的显示点,可以使用2DboxReplacer或2DellipseReplacer转换器把点转换为矩形或圆形来显示。然后把所有的栅格使用转换器进行融合,即可生成一个含有所有数据的图层。但是单元格间隔也不要设置的过小,否则产生的临时文件会很大,导致C盘空间不足,转换失败。
比如我所使用的测试数据,三个shp总大小为468K,点要素为176个,线要素为3个,面要素为266个,使用ImageRasterizer转换器时,点、线、面的X/Y的Cell Space分布设置为0.5、0.2和5,结果转换进程在40%左右时,出现下列错误:
Failed to write to file 'C:\DOCUME~1\ADMINI~1\LOCALS~1\Temp\shape2tiff_200210\ImageRasterizer_RASTER_222952_109603088_15.frs'. Please ensure that you have sufficient privileges to write this file
Failed to write feature data to `C:\DOCUME~1\ADMINI~1\LOCALS~1\Temp\shape2tiff_200210\ImageRasterizer_RASTER_222952_109603088.ffs'
RasterMosaicker(RasterMosaicFactory): Failed to output the feature with the mosaicked raster
A fatal error has occurred. Check the logfile above for details
A fatal error has occurred. Check the logfile above for details
此时我在c 盘临时目录下找到该临时文件,共46.8G。
最终生成的栅格文件为:
部分放大后:
再次放大后:
该图对于点图层我使用了转换器2DellipseReplacer转换为了圆,半径可能设置的太大了,可以根据观察调到合适的大小,点、线、面的X/Y的Cell Space分布设置为1、1和5。
这里用的到几个转换器,我会在即将要写的一些转换器的用法和注意事项(二)中详细说明,会尽快完成,有任何问题或建议欢迎跟我联系。