原文发布时间:2014-06-13
作者:Tenniwdy
在FME中常常处理分析SHP数据,再通过SHP的写模块将成果输出,这可能会遇到只输出小部分数据或是完全没有输出输出的情况,在模板的数据流中也没发现数据丢失,模板提示运行成功。这样的问题对于接触FME不久的朋友来说就很难找到原因,因为这不是某个错误操作或是某个转换器使用不当导致。
在对一个SHP的面数据进行处理后,添加写模块输出,在输出完成后,模板没报错,没有输出结果,模板运行日志提示:Error - Expected an aggregate or area geometry;拒绝32输出要素。使用转换器Deaggregator处理后任然没有解决此问题。
写模块是输出的面,看提示可能是输出时有非面的几何体,在写模块前添加FME Universal Viewer预览。如下图:
预览没发现任何问题,但却没有输出成果。对写模块重定向,成预览如下图:
查看到的所有数据fme_geometry=fme_line,在写模块前添加的FME Universal Viewer预览fme_geometry=fme_polygon。看到这样的情况很凌乱了,第一次遇到的这样的情况。
将写模块改为MDB写模块,正常输出需要结果,或将数据的属性改为fme_geometry=fme_polygon和fme_type=fme_area也可以输出SHP数据,但这并不是最好的解决方法。
经过资深技术专家指导,发现问题出在Clipper转换器,准确的说也不是Clipper转换器的错,是不正确使用Clipper与LineOnAreaOverlayer两个转换器导致的问题。使用Clipper转换器后常常会出现聚合体,在存在聚合体的时候使用LineOnAreaOverlayer转换器就会有以上问题的出现。
在Clipper参数设置中-矢量处理-创建聚合改为No,就能解决问题了。
这样的实例提醒我们在学习和使用FME各个转换器的过程中不要仅以某个转换器的方式来学习,而要以某些或某类转换器的学习方式来学习,使用时要考虑转换器与转换器之间可能存在的问题。