span8
span4
用户选择一个要素类(公开参数)和FME写入一至六个格式(如CSV,形状,DGN ACAD,XLS的MapInfo等...)
在FMW我要求的格式通过发布的参数写
OUTPUT_FORMAT = DWG,形状,XLS像(逗号隔开)
然后我用蟒PRG分裂这些值针对每个格式创建新的属性(是)
进口FME进口fmeobjects进口数学高清FRQ(功能):my_list = feature.getAttribute( '_名单{}')ESRISHAPE = '' XLSXW = '' CSV = '' AUTOCAD_OD = '' AUTOCAD_DWF = '' FILEGDB = '' 的项目 in my_list: if item=="ESRISHAPE": ESRISHAPE="YES" if item=="FILEGDB": FILEGDB="YES" if item=="XLSXW": XLSXW="YES" if item=="CSV": CSV="YES" if item=="AUTOCAD_OD": AUTOCAD_OD="YES" if item=="DWF": AUTOCAD_DWF="YES" feature.setAttribute("ESRISHAPE", ESRISHAPE) feature.setAttribute("XLSXW", XLSXW) feature.setAttribute("CSV", CSV) feature.setAttribute("AUTOCAD_OD", AUTOCAD_OD) feature.setAttribute("AUTOCAD_DWF", AUTOCAD_DWF) feature.setAttribute("FILEGDB", FILEGDB)
在结束我使用的多个测试过滤器检查这些值和发送到每个写入
现在我的问题是
如果用户想要写3种格式,那么所有的功能都将每个测试过滤器变压器(6个过滤器6名的格式)
DWG = YES,那么转到DWG作家
DGN = YES,那么转到DGN作家
........
........
所有功能变为6不同势特征过滤器用于测试ATTRIB值
我认为,我们可以更优化的方式编写相同FMW?我担心的是,如果我必须写仅三种格式,那么为什么所有的功能应该去6个过滤器?这是FME权的巨大的负荷?
我们可以做一些事情的优化?
它看起来像吗?
请注意这两个合格/不合格被连接到下一个测试,但只应该永远出现其中之一。
我认为,如果你这样做,那么你将有只有一个额外的副本。是的,数据变为每个测试仪,但它穿过,因为测试仪是不是基于组的。你不会在每次测试获得数据的副本,只有当测试结果为真出现一个副本。因此,如果格式数为n,那么你会得到n个最多(也许甚至没有因为最终测试人员没有失败的输出连接)+ 1份。
我想可能是更重要的是可以用的,而不是一个作家FeatureWriter变压器。然后事情会并行发生和数据不会在每个作家进行缓存。如 - 见戴尔的回答上一个问题。
如果你真的想确保你只得到n个数据的副本,然后做出的选择的格式数量和使用克隆创建多份。然后你可以使用一个单一的TestFilter每个克隆组分开,并将其指向正确的作家(你需要能够克隆号码映射到特定的格式,但不应该太硬)。
希望这可以帮助。
在你PythonCaller,我会用一个类替代功能,而不是创建6个属性,我将创建特征的副本属性“FORMAT”设置为用户请求每种格式所需要的格式。
那么只有一个AttributeFilter(在格式属性)来过滤器根据所要求的格式的功能。
Python代码:
进口FME进口fmeobjects类FeatureProcessor(对象)的:def __init __(个体):通过DEF输入(个体,特征):my_list = feature.getAttribute( '_列表{}'),用于在my_list项:如果项== “ESRISHAPE”: outputFeature = feature.clone() outputFeature.setAttribute("FORMAT", "ESRISHAPE") self.pyoutput(outputFeature) if item=="FILEGDB": outputFeature = feature.clone() outputFeature.setAttribute("FORMAT", "FILEGDB") self.pyoutput(outputFeature) if item=="XLSXW": outputFeature = feature.clone() outputFeature.setAttribute("FORMAT", "XLSXW") self.pyoutput(outputFeature) if item=="CSV": outputFeature = feature.clone() outputFeature.setAttribute("FORMAT", "CSV") self.pyoutput(outputFeature) if item=="AUTOCAD_OD": outputFeature = feature.clone() outputFeature.setAttribute("FORMAT", "AUTOCAD_OD") self.pyoutput(outputFeature) if item=="DWF": outputFeature = feature.clone() outputFeature.setAttribute("FORMAT", "AUTOCAD_DWF") self.pyoutput(outputFeature) def close(self): pass
©2019安全亚搏在线软件公司|法律