FME中的栅格数据操作之六——转换器RasterExpressionEvaluator的用法(二)

原文发布时间:2010-04-20

作者:毛毛虫

在继续前面讲的RasterExpressionEvaluator转换器之前,先举个用ExpressionEvaluator转换器进行栅格数据到矢量数据转换的例子。 

这个例子是一个中心线提取示例:

对于一些相当好的栅格类型(或并不是十分糟糕的栅格)例如,使用GIS包从矢量数据产生的栅格。如果源矢量数据丢失,我们可以尝试矢量化栅格数据。

下面是一个Google Maps图片(png格式):

    

下面是提取道路的过程,如下:

使用转换器RasterCellCoercer把栅格转换为点图层,使用PointOnRasterValueExtractor提取栅格单元格的相关波段信息,后面连续添加三个ListIndexer、AttributeCopier转换器,


设置如下:



提取R、G、B三个波段的信息。

通过对源栅格数据中的分析,得出道路点(灰色)的R、G和B相当接近,我们使用ExpressionEvaluator转换器设置下列表达式来判断:

(abs(@Value(_red)-@Value(_green))<=3?1:0)&&(abs(@Value(_red)-@Value(_blue))<=3)?1:0

这个表达式的意思是G和B波段跟R波段相差小于等于三时结果为1,否则结果为0。

提取出道路(带有道路标注)的图示为:


类似的得出黄色道路(这个表达式是说对于黄色的部分,G波段很接近R波段,而蓝色波段要明显的小于B波段)计算的表达式为:

(abs(@Value(_red)-@Value(_green))<=4?1:0)&&(abs(@Value(_red)-@Value(_blue))>20)?1:0

提出黄色道路的图为:


两类道路叠加后的图为:


通过上面步骤,我们保留了道路和一些黑色的道路标注。

然后根据原来的单元格大小,把单元格生成的点转换为方形(这一部分以及下面关于生成轮廓线、平滑等问题在前面的相关文章中已经说明,不再详述)。

使用Dissolver融合内部的边界生成一个连续的覆盖区域。使用DonutHoleExtractor 提取后外部轮廓和内部的小多边形后,根据AreaCalculator计算的结果删除很小的面,使用DonutBuilder去除内部的小多边形,再用Generalizer转换器平滑,此时的图为:


再使用CenterLineReplacer转换器提取道路的中心线,再用Deaggregator分解聚类后的图为:


平滑后,与原来的栅格数据叠加效果如下:


为了达到更好的效果,可以使用MRF2Dcleaner转换器来减少悬线,使效果更好。

这种方法也可以用于根据区域的颜色提取区域。

本篇主要讲的是一个根据ExpressionEvaluator转换器来进行栅格数据转矢量的例子,下面文章中会提到使用转换器RasterExpressionEvaluator的做法。

待续…………

 

针对回复的十字路口问题的贴图:







猜你喜欢

转载自blog.csdn.net/fmechina/article/details/80851480
今日推荐