“与Pythoncaller检查空间关系”的答案 https://knowledge.亚搏在线safe.com/questions/24314/check-the-spatial-relationship-with-a-pythoncaller.html “与Pythoncaller检查空间关系”问题的最新答案 答案由拉里 https://knowledge.亚搏在线safe.com/answers/24443/view.html

您好,

首先,你应该切割之前和粘贴它连接你输入和输出变压器端口。如果将它们连接起来,你就会有一个更好的工厂。

您也可以看看工厂文档,以获取有关TeeFactory一些线索。

在下面的图片,我连一个创建者的输入端口和一个检查至输出之一。

现在对TeeFactory输入和输出上的ChoppingFactory(1和2)。

还要注意的是所述TeeFactory的输出端(3)连接到所述ChopperFactory的输入端(4)。

我的理解是,TeeFactory创建_remnant属性中包含“否”作为缺省值,而且ChoppingFactory将设置它为 “yes”,如果需要的话。

您现在有三个选项,这个代码在PythonCaller整合

  1. 只需使用ChoppingFactory:正确切碎功能的不会有的_remnant =“无”属性,剩余的功能将有_remnant =“yes”属性。
  2. 只需使用ChoppingFactory并创建_remnant =上推入厂前的特点是“无”属性:你有相同的行为变压器
  3. 添加两者。工厂流水线:你有相同的行为变压器

    此Python代码演示选项3.注意,由于ChopperFactory没有阻止,我可以回读切碎的特点。后右推动用于处理,而不是具有在阻断工厂等SpatialRelator的情况下的接近方法来等待一个

    进口FME进口fmeobjects#模板类接口:类FeatureProcessor(对象)的:def __init __(self): #Initialize the pipeline strFactory1 = """FACTORY_DEF * TeeFactory \ FACTORY_NAME Chopper_catcher \ INPUT FEATURE_TYPE Creator_2_CREATED \ OUTPUT FEATURE_TYPE __chopper_input__ \ _remnant no""" strFactory2 = """FACTORY_DEF * ChoppingFactory \ FACTORY_NAME Chopper \ INPUT FEATURE_TYPE __chopper_input__ \ MODE VERTEX \ MAX_VERTICES 2 \ REMNANT_ATTRIBUTE _remnant \ CHOP_POLYGONS \ OUTPUT CHOPPED FEATURE_TYPE Chopper_OUTPUT \ _chopped yes \ OUTPUT UNTOUCHED FEATURE_TYPE Chopper_OUTPUT \ _chopped no""" self.pipeline = fmeobjects.FMEFactoryPipeline("MyFactory") self.pipeline.addFactory(strFactory1) self.pipeline.addFactory(strFactory2) def input(self,feature): #Push features in the pipeline feature.setFeatureType("Creator_2_CREATED") self.pipeline.processFeature(feature) tmpFeature = self.pipeline.getOutputFeature() while tmpFeature != None: self.pyoutput(tmpFeature) tmpFeature = self.pipeline.getOutputFeature() def close(self): pass 

    Regards,

    Larry

    2016年3月10日星期四16:12:32 GMT 拉里 答案由jeroenstiers https://knowledge.亚搏在线safe.com/answers/24414/view.html

    哇,这是有趣的!

    我只是想实现这个自己,但使用的砍刀。然而,我注意到有两个工厂都堪称砍刀变压器。 <前> DEFAULT_MACRO WB_CURRENT_CONTEXT#------------------------------------------------------------------------- FACTORY_DEF * TeeFactory \FACTORY_NAME Chopper_catcher \输出FEATURE_TYPE __chopper_input__ \ “_remnant” 没有FACTORY_DEF * ChoppingFactory \ FACTORY_NAME砍刀\ INPUT FEATURE_TYPE __chopper_input__ \ MODE VERTEX \ REMNANT_ATTRIBUTE “_remnant” \ CHOP_POLYGONS \ GRID_POLYGONS 点击

    拉里,你在乎拟订我怎么能实现这个使用Python?

    我与TeeFactory挣扎因为似乎有一个输入它不。我要这个工厂添加到管道?这是如何运作的?

    感谢您的回答! 2016年3月10日,星期四,格林尼治时间10:52:10 jeroenstiers 答案由拉里 https://knowledge.亚搏在线safe.com/answers/24320/view.html

    你好Dries,

    首先,你可以在这里访问FME工厂的文档:

    If I have this transformer in FME Workbench:

    < / p > < p >我可以剪切和粘贴在文本编辑器中查看工厂代码:< / p > < pre > DEFAULT_MACRO WB_CURRENT_CONTEXT # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - FACTORY_DEF * SpatialRelationshipFactory \ FACTORY_NAME SpatialRelator \输入基地FEATURE_TYPE AttributeCreator_OUTPUT_0_olPiq + C1D00 = \输入候选人FEATURE_TYPE AttributeCreator_2_OUTPUT_1_KpUyI6tMDVI = \谓词“相交”\ LIST_NAME _relationships _related_candidates”\“\ SUCCESS_ATTR”REJECT_INVALID_GEOM是的\ CURVE_BOUNDARY_RULE ENDPOINTS_MOD2 \ CALCULATE_CARDINALITY没有\输出标记FEATURE_TYPE SpatialRelator_Output \输出拒绝FEATURE_TYPE SpatialRelator_< Rejected> < / pre > < p >然后我可以在python中使用,工厂代码调用者(注意,我重命名参数和清理一些引号(“)):< / p > < pre >进口fme进口fmeobjects #模板类接口:类FeatureProcessor(对象):def __init__(自我):#初始化管道strFactory = " " FACTORY_DEF * SpatialRelationshipFactory \ FACTORY_NAME SpatialRelator \输入基地FEATURE_TYPE RequestorPort \输入候选人FEATURE_TYPE SupplierPort \谓词相交\ LIST_NAME _relationships \ SUCCESS_ATTR _related_candidates \ REJECT_INVALID_GEOM是的\ CURVE_BOUNDARY_RULE ENDPOINTS_MOD2 \ CALCULATE_CARDINALITY没有\输出标记FEATURE_TYPE SpatialRelator_Output \输出拒绝FEATURE_TYPE SpatialRelator_< Rejected>””“自我。管道= fmeobjects.FMEFactoryPipeline(我厂)self.pipeline.addFactory (strFactory) def输入(自我,特性):#推功能的管道类型= feature.getAttribute (“_type”)如果类型= =“线”:打印“添加一个线”feature.setFeatureType (RequestorPort) self.pipeline.processFeature(特性)elif类型= =“区域”:打印“添加一个区域”feature.setFeatureType (SupplierPort) self.pipeline.processFeature(特性)其他:提高异常(意想不到的功能!)def关闭(自我):#添加一个线myFeature = fmeobjects.FMEFeature () myFeature.addCoordinates(((10、30),(100年,30)])myFeature.setFeatureType (RequestorPort) self.pipeline.processFeature (myFeature) #执行工厂代码self.pipeline.allDone () tmpFeature = self.pipeline.getOutputFeature()而tmpFeature ! =没有:#我们跳过拒绝功能如果tmpFeature.getFeatureType () = =“SpatialRelator_Output”:

    Sample workspace is attached (FME 2015).

    Regards,

    Larry

    格林威治时间2016年3月8日星期二15:05:45 拉里